谁跟踪 Apache Kafka 中消费者最后读取的消息偏移量?

Ash*_*Ash 5 apache-kafka kafka-consumer-api

在 Apache Kafka 中,谁跟踪消费者读取的最后一条消息?谁还跟踪从哪个分区读取哪个消费者组 ID?所有这些信息都在动物园管理员中吗?

Gio*_*ous 5

每个消费者组都维护其每个主题分区的偏移量。由于v0.9每个消费者组的提交偏移量信息都存储在这个内部主题中(在 v0.9 之前,该信息存储在 Zookeeper 上)。当偏移管理器收到 时OffsetCommitRequest,它会将请求附加到名为 的特殊压缩 Kafka 主题__consumer_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]

另外两个选项是RoundRobinAssignorStickyAssignor