首页 > 解决方案 > 谁在 Apache Kafka 中跟踪消费者的最后读取消息偏移量?

问题描述

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

标签: apache-kafkakafka-consumer-api

解决方案


每个消费者组都维护每个主题分区的偏移量。由于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


推荐阅读