为什么我的 Kafka 消费者投票这么快?

我的 Kafka 消费者的轮询速度比我预期的要快。是否有一些配置我可以更改以使其一直等待fetch.max.wait.ms

我将 fetch.max.wait.ms 设置为某个秒数 (5)。我设置fetch.min.bytes了一些大字节数 (99,988,800)。

我阅读了文档(但可能遗漏了一些内容):

https://kafka.apache.org/documentation/

  • 获取.min.bytes

  • 服务器应为获取请求返回的最小数据量。如果可用数据不足,则请求将等待积累足够多的数据,然后再回答请求。1 字节的默认设置意味着一旦单个字节的数据可用或获取请求在等待数据到达时超时,就会立即响应获取请求。将其设置为大于 1 的值将导致服务器等待大量数据的积累,这可以稍微提高服务器吞吐量,但会增加一些额外的延迟。

  • fetch.max.wait.ms

  • 如果没有足够的数据立即满足 fetch.min.bytes 给定的要求,服务器在回答获取请求之前将阻塞的最长时间。

fetch.max.wait.ms=5000,
fetch.min.bytes=99988800

根据我的配置选项和数据集,我希望调用poll在返回任何记录之前始终阻塞 5 秒。

相反,对 的调用poll有时会在不到一秒的时间内解决,并且总是有一些少量的记录。

这是示例运行的输出:

// send 100 records

// doesn't matter how


// timestamp -> records received

// (date, hour and minute are not shown, just the relevant seconds.millis)


32.475 -> 10

33.392 -> 12

34.116 -> 16

37.477 -> 16

38.395 -> 18

39.118 -> 17

42.479 -> 7

43.397 -> 4

没有延迟真的接近5s。


缥缈止盈
浏览 102回答 2
2回答

沧海一幻觉

对于财产,fetch.max.wait.ms=5000您说:“即使没有足够的数据可供选择,也不要等待超过 5 秒”。在执行轮询之前,您没有指定最小秒数。您可以通过启动 2 个 kafka 消费者来测试此行为,其中一个是您设置的fetch.max.wait.ms=20000,另一个是保留默认值。您会看到,在具有默认设置的消费者中,您几乎会立即收到消息,而在消费者中,fetch.max.wait.ms=20000您将不得不稍等片刻。我在我的机器上尝试过设置fetch.max.wait.ms=20000,有时需要 15 秒才能接收记录,有时需要 10 秒等等,但不会超过 20 秒。

慕沐林林

您还需要调整 max.partition.fetch.bytes、message.max.bytes 和 max.message.bytes。如果每条记录的大小约为100KB,则10条记录将触发发送。这可能是你在你的案例中看到的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java