在Apache Kafka中,谁跟踪使用者读取的最后一条消息?还有谁跟踪哪个消费者组ID从哪个分区读取?所有这些信息都在动物园管理员中吗?
答案 0 :(得分:1)
每个消费者组都按主题分区维护其偏移量。由于v0.9
,每个消费者组的已提交偏移量信息都存储在此内部主题中(在v0.9之前,此信息存储在Zookeeper中)。偏移量管理器收到OffsetCommitRequest
时,会将请求追加到名为 __consumer_offsets
的特殊压缩Kafka主题上。最后,仅当offsets主题的所有副本都接收到偏移量时,偏移量管理器才会向消费者发送成功的偏移量提交响应。
关于您对分区分配的问题,Kafka使用partition.assignment.strategy
来确定如何将分区分配给使用者。此属性默认为RangeAssignor
:
范围分配器按主题工作。对于每个主题,我们 按数字顺序列出可用的分区,将使用者分类 字典顺序。然后,我们将分区数除以 消费者总数确定要划分的分区数 分配给每个消费者。如果没有平均分配,则第一个 很少有消费者会有一个额外的分区。例如,假设 有两个使用者C0和C1,两个主题t0和t1,每个 主题有3个分区,导致分区t0p0,t0p1,t0p2, t1p0,t1p1和t1p2。分配为:C0:[t0p0,t0p1,t1p0, t1p1] C1:[t0p2,t1p2]
其他两个选项是RoundRobinAssignor
和StickyAssignor