【问题标题】:Apache Kafka - linger.ms and batch.size settingsApache Kafka - linger.ms 和 batch.size 设置
【发布时间】:2019-01-02 10:34:27
【问题描述】:

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

【问题讨论】:

    标签: apache-kafka kafka-producer-api


    【解决方案1】:

    不,这并不意味着生产者将等待批次 变得饱满。 生产者将发送半满批次,甚至只发送一个批次 在他们的消息。

    因此,将batch size设置过大不会造成延迟 在发送消息时;它只会为批次使用更多内存。设置批次 尺寸太小会增加一些开销,因为生产者需要发送消息 更频繁。

    默认情况下(linger.ms=0),生产者将 只要有可用的发送者线程发送消息就发送消息,即使 批处理中只有一条消息。

    希望对你有帮助。

    谢谢。

    【讨论】:

    • 所以基本上使用 linger.ms=0 时,无论 batch.size 参数的值如何,都不会进行批处理?
    • linger.ms 给出了批处理延迟的上限。默认情况下(linger.ms =0),没有额外的等待时间。批量大小为零将完全禁用批处理。
    • 好的,假设我们定义了一个 10kb 的批处理大小,那么消息可以在这个批处理中缓冲,直到达到 10kb 或发送者线程可用。如果发送者线程在 5kb 时可用,它只会发送这些 5kb 的消息。否则在 10kb 时它无论如何都会尝试显式发送。如果我们有 linger.ms,那么即使发送者线程更早可用并且未达到批量大小,生产者也会至少等待该时间。如果我错了,请纠正我@dossani
    • 引入了使用 linger.ms 的延迟以增加批处理的机会。通过引入小的延迟,我们可以批量发送更多消息,从而提高吞吐量并减少延迟,因为发送到 Apache Kafka 的请求更少
    • 如果应用程序在缓冲区已满时尝试写入更多消息,但发送者线程仍然不可用,会发生什么情况?
    猜你喜欢
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2017-04-26
    相关资源
    最近更新 更多