将linger.ms保持为0的含义

问题描述 投票:3回答:2

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

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

但是,它也说生产者将尝试批量请求,即使逗留时间设置为0ms-

请注意,即使在linger.ms = 0的情况下,及时到达的记录通常也会一起批处理,因此在重负载情况下,无论延迟配置如何,都会发生批处理;但是,将此设置为大于0的值可以在不受最大负载影响的情况下以较少的延迟为代价导致更少,更有效的请求。

直观地说,似乎任何类型的批处理都需要一些逗留时间,而实现0的逗留时间的唯一方法是使代理调用同步。显然,将逗留时间保持为0似乎不会像阻止发送呼叫那样损害性能,但似乎对性能有一些影响。有人可以澄清文档上面说的是什么吗?

apache-kafka kafka-producer-api
2个回答
2
投票

文档说,即使你将延迟时间设置为0,你可能最终会在加载下进行一些批量处理,因为记录被添加的速度比发送线程可以发送的速度快。此设置针对最小延迟进行了优化。如果您真正关心的性能衡量标准是吞吐量,那么您可以将停留时间稍微增加到批处理,这就是文档所获得的。在这种情况下,与同步发送无关。 More in depth info


3
投票

使用linger.ms=0,记录会尽快发送,并且有许多请求可能会影响性能。通过在中等/高负载下增加linger.ms来强制稍微等待将优化批次的使用并增加吞吐量。这也取决于记录大小,批量越小越适合(batch.size默认为16Kb)。

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

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

参考文献:

© www.soinside.com 2019 - 2024. All rights reserved.