英文版本为准
本页译自英文,由模型翻译。若与英文原文存在差异,以英文原文为准。
消费者组
消费者组把每个分区交给一个成员;成员加入或离开时,分区通过再均衡转移。
以文字阅读本图
- 成员 1: 读取 P0、P1、P2; P2 被 撤销; 读取 P0、P1
- 协调者: 再均衡: 新的 分配; 停止心跳超过 session.timeout.ms 的成员 离开组,它的分区以同样方式转移
- 成员 2: 加入 组; 从已提交的 偏移量读取 P2
- 加入 组 → 再均衡: 新的 分配: 加入
- 再均衡: 新的 分配 → P2 被 撤销: 撤销
- P2 被 撤销 → 读取 P0、P1
- 再均衡: 新的 分配 → 从已提交的 偏移量读取 P2: 分配
组协调者是集群中的一个 Broker。成员加入或离开时,它发起再均衡,组就新的分配达成一致。从一个成员拿走的分区在那里被撤销,并分配给另一个成员,后者从组已提交的偏移量继续读取。前一个成员在最后一次提交之后做的工作,会被第二个成员再读一遍。组从未提交过的分区从 auto.offset.reset 指定的位置开始:默认是日志末尾。
停止发送心跳超过 session.timeout.ms(librdkafka 中为 45 秒)的成员会被移出组。超过 max.poll.interval.ms(5 分钟)没有取新记录的成员也会离开组。
partition.assignment.strategy 决定再均衡如何转移分区。急切(eager)策略 range 和 roundrobin(librdkafka 的默认值是两者都用,range 在前)会撤销全部分区再重新分配。cooperative-sticky 只转移更换所有者的分区,其余分区在再均衡期间照常流动(KIP-429)。两类策略不能在同一个组内混用。
消费者也可以按名称直接获取分区,而不加入组协议。这样它永远不会再均衡,也没有任何东西会转移它的分区。