Apache Kafka-linger.ms和batch.size设置

Viv*_*wal 4 apache-kafka kafka-producer-api

在kafka生产者设置中,如果将linger.ms设置为0且batch.size不为零,则预期的行为是什么?生产者将在发送消息之前等待到达batch.size多长时间?它会一直等待直到消息的大小小于指定的批处理大小,还是因为linger.ms为零,所以它将不进行任何批处理而仅发送每个请求?

dos*_*ani 7

不,这并不意味着生产者将等待批次装满。生产者将发送半满的批次,甚至只发送一条消息的批次。

因此,将批处理大小设置得太大不会导致发送消息的延迟。它只会为批处理使用更多的内存。将批处理大小设置得太小会增加一些开销,因为生产者将需要更频繁地发送消息。

默认情况下(linger.ms = 0),即使批量中只有一条消息,生产者也会在有发送者线程可用时立即发送消息。

希望能帮助到你。

谢谢。

  • 好的,假设我们定义了一个 10kb 的批处理大小,然后消息可以在这个批处理中缓冲,直到达到 10kb 或发送者线程可用。如果发件人线程在 5kb 可用,它只会发送这些 5kb 的消息。否则在 10kb 时它会尝试明确发送。如果我们有 linger.ms,那么即使发送者线程更早可用并且未达到批处理大小,生产者也将至少等待该时间。如果我错了,请纠正我@dossani (7认同)
  • 使用 linger.ms 引入延迟是为了增加批处理的机会。通过引入较小的延迟,我们可以批量发送更多消息,从而提高吞吐量并减少延迟,因为发送到 Apache Kafka 的请求较少 (2认同)