Empty 状态表示当前组内无成员, 但是可能存在 Consumer Group 已提交的位移数据,且未过期,这种状态只能响应 JoinGroup 请求。 Dead 状态表示组内已经没有任何成员的状态,组内的元数据已经被 Broker Coordinator 移除,这种状态响应各种请求都是一个Response:UNKNOWN_MEMBER_ID。 PreparingRebalanc
consumer 在构造的时候是没有 member id 的,因此 JoinGroup 请求中没有附上 member id。此时,GroupCoordinator会为这个新 consumer生成一个 member id,随MEMBER_ID_REQUIRED 异常一并返回; Consumer 填入 member id,再次发送 JoinGroup 请求; GroupCoordinator 会在 JoinGroup response 中告知 consumer 当前 group le...
② Leader 向 Group Coordinator 发送(同步分区方案请求),并传递 member_id 以及分区分配方案。 SyncGroupRequest{"member_id":"consumer-1-123","members":{"consumer-1-123":["P0","P2","P4"],"consumer-2-345":["P1","P3","P5"]}} ③ 其他消费者也将发出类似的请求,但只传递其 member_id。 S...
1.消费者向coordinator发送自己的protocol_metadata,member_id和group_id等信息 2.coordinator从请求的消费者成员中选择一个consumer leader 3.coordinator向所有消费者返回member_metadata,generation_id,leader_id等信息,向选中的leader附加发送members信息。leader获取到所有消费者的信息之后,就可以进行reblance策略执行,分配...
订阅的topic下的每个分区只能分配给某个group下的一个consumer(当然该分区还可以被分配给其他group) 同时,kafka为每个消费者分配一个Consumer ID,通常采用“Hostname:UUID”形式表示。 在kafka中,规定了每个消息分区只能被同组的一个消费者进行消费,因此,需要在zookeeper上记录消息分区与Consumer之间的关系,每个消费者...
该阶段主要完成 leader 将消费者对应的 partition 分配方案同步给consumer group 中的所有 consumer。每一个消费者,都会向 Coordinator 发送一个 SyncGroupRequest 请求。请求内容:包含group_id、member_id、generation_id 。在 leader 层面,还会有一个 member_assignment 内容。
GroupCoordinator 会检查 JoinGroup 请求的合法性。consumer 在构造的时候是没有 member id 的,因此 JoinGroup 请求中没有附上 member id。此时,GroupCoordinator会为这个新 consumer生成一个 member id,随MEMBER_ID_REQUIRED 异常一并返回; Consumer 填入 member id,再次发送 JoinGroup 请求; ...
对客户端进行状态验证,其校验如下:如果消费者状态为dead,则返回UNKNOWN_MEMBER_ID如果当前消费组的负载算法协议不支持新客户端端队列负载协议,则抛出UNKNOWN_MEMBER_ID,并提示不一致的队列负载协议。Kafka 的加入请求版本4在加入消费端组时使用有明确的客户端memberId,消费组将创建的memberId加入到组的pendingMember中...
member_id:GroupCoordinator分配给消费者的id标志,在未分配之前为null; protocol_type:对应为consumer; group_protocols:消费者支持的分区分配协议,GroupCoordinator依赖该字段选取各个consumer都支持的协议;常见的分区分配协议有:RangeAssignor,RoundRobinAssignor,StickyAssignor。
leader_id: 消费组中的消费者,coordinator 会选择一个座位 leader,对应的就是 member_id member_metadata 对应消费者的订阅信息 members:consumer group 中全部的消费者的订阅信息 generation_id: 年代信息,类似于之前讲解 zookeeper 的时候的 epoch 是一样的,对于每一轮 rebalance generation_id 都会递增。主要用来保...