apache-kafka - 谁在 Apache Kafka 中跟踪消费者的最后读取消息偏移量?
问题描述
在 Apache Kafka 中,谁跟踪消费者读取的最后一条消息?还有谁跟踪哪个消费者组 ID 从哪个分区读取?所有这些信息都在 zookeeper 中吗?
解决方案
每个消费者组都维护每个主题分区的偏移量。由于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]
其他两个选项是RoundRobinAssignor
和StickyAssignor
推荐阅读
- unity3d - Unity - 2D - 绘制具有“真实”大小的精灵
- ios - XCUITest、UIDatePicker、adjustToPickerWheelValue
- python-3.x - 从 Mapping 派生的类的类型推断
- karate - 空手道:遍历复杂的 JSON 以找到匹配项
- php - 教义:如何将值设置为 null 而不是实体
- linux - 获取 Visual Studio 用于构建容器的命令
- github - 用于更新 package.json 的 github 操作
- java - 自动在所有类属性上设置 @SafeHtml 注释
- php - 将 URL 更改为 Cakephp 中的文章
- postgresql - PostgreSql如何声明变量类型列表