TJ-*_*TJ- 7 apache-kafka kafka-consumer-api
我有一个消费者对多个主题进行民意调查。对于这个问题,我限制了每个主题一个分区。假设当消费者开始轮询时,每个主题都有一些数据。读取的顺序是什么?
是循环赛吗?是从第一个开始读取下一个之前的所有内容吗?我用来consumer.poll(N)投票。
订购相当复杂。以下是 Kafka 2.6 的工作原理:
Consumer.poll(N)它会返回所有排队的消息,但最多max.poll.records(见下文)fetch.max.bytes(如果有的话,至少返回一条消息)CompletedFetches,其中 1CompletedFetch恰好包含缓冲区中一个主题分区的所有消息CompletedFetches已排队(它们可能包含 0 条消息或 1000 条或更多)。CompletedFetch每个请求的主题分区都会有一个CompletedFetches与原始分配顺序相反,/topic 分区在最终结果中可能会混合在一起CompletedFetches在逻辑上被扁平化为一个大队列Consumer.poll(N)最多会max.poll.records从扁平的大队列中读取和出列poll,会启动另一个对所有节点的获取请求,但这一次,所有已经在扁平化队列中的主题分区都被排除在外poll电话实际上,这意味着您不会挨饿,但在获得下一主题的大量消息之前,您可能会收到来自一个主题的大量消息。
在消息大小为 10 字节的测试中,从一个主题读取了大约 58000 条消息,然后从下一主题读取了大致相同的数量。所有主题都预先填充了 100 万条消息。
因此,您将进行一种批量循环。