将linger.ms保持为0的含义

Adi*_*vek 5 apache-kafka kafka-producer-api

我们正在使用kafka 0.10.2.1。该文档指定了即使缓冲区未满也可以发送的缓冲区。

默认情况下,即使缓冲区中还有其他未使用的空间,缓冲区也可以立即发送。但是,如果要减少请求数,可以将linger.ms设置为大于0的值。

但是,它也表示即使延迟时间设置为0ms,生产者也将尝试批处理请求-

请注意,时间紧靠的记录通常即使linger.ms = 0也将一起批处理,因此在高负载下将进行批处理,而与linger配置无关。但是,如果不将其设置为大于0的值,则在未处于最大负载的情况下,可能会导致更少的请求和更有效的请求,但以少量的等待时间为代价。

凭直觉,似乎任何种类的批处理都需要一些延迟时间,而使延迟时间为0的唯一方法是使代理呼叫同步。显然,将延迟时间保持为0似乎并不会像阻塞发送呼叫那样对性能造成太大影响,但似乎会对性能产生一些影响。有人可以澄清上面的文档怎么说吗?

daw*_*saw 12

文档说,即使您将逗留时间设置为 0,您也可能会在负载下进行一点批处理,因为添加记录的速度比发送线程可以调度它们的速度快。此设置正在优化最小延迟。如果您真正关心的性能衡量标准是吞吐量,那么您会增加一点延迟时间以进行更多批处理,这就是文档所要达到的。在这种情况下与同步发送没有太大关系。更深入的信息


Pai*_*izo 6

随着linger.ms=0记录的尽快发送和许多请求,这可能会影响性能。通过增加linger.ms中等/高负载来强制稍作等待将优化批次的使用并提高吞吐量。这也取决于记录的大小,该大小越大,则批处理就越少(batch.size默认为16Kb)。

基本上它是一个权衡的数量之间的请求和吞吐量的数量,它实际上取决于您的方案,但是立即送不走配料和压缩(如果启用)的充分利用,我建议运行一些指标具有不同的值linger.ms,例如如0/5/10/50/200

一般来说,我建议设置 linger.ms > 0

参考文献: