具有多个分区的使用者不会交错

qgelzfjb  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(316)

我正在尝试运行中所示的简单示例https://projectreactor.io/docs/kafka/release/reference/#_sample_consumer. 我看到了链接中描述的输出,但是我不知道这是否是预期的输出。特别是链接上说
producer示例发布的20条消息应该出现在控制台上。如上面的输出所示,消息是按顺序为每个分区使用的,但是来自不同分区的消息可能是交错的。
链接中的输出似乎也是我得到的。但是,分区1中的所有内容首先被分区0占用。我实际上期望的是来自分区0的一条消息,来自分区1的一对消息,然后是来自分区0的一对消息,以此类推(尽管在分区内消息的顺序与预期的一样)。
当我在本地运行时,我也得到相同的输出。这是我遗漏的东西吗?

eh57zj3b

eh57zj3b1#

您所看到的是极少量消息的预期行为。当从多个分区进行消费时,消费者将进行交错,但只使用大量的消息。
Kafka的消费者是“成批”工作的。它们每隔一段时间进行一次轮询,如果一个分区中的10条左右的消息足够小,可以放入一个轮询请求或“批处理”,那么使用者只需同时使用所有消息,甚至在到达下一个分区之前。这就是为什么你看不到20条信息的交错效果。
如果用20k条消息重试测试,应该可以更清楚地看到交织行为。

ghg1uchk

ghg1uchk2#

+1到@mjurez的答案。只是想补充一点,如果减少 max.poll.records 为您的消费者设置为1(默认值为500),从而强制它一次处理一条消息。
Kafka参考:
名称:max.poll.records
description:对poll()的单个调用中返回的最大记录数。
类型:int
默认值:500
有效值:[1,…]
重要性:中等

相关问题