Kafka-服务端-GroupCoordinator

在每一个Broker上都会实例化一个GroupCoordinator对象,Kafka按照Consumer Group的名称将其分配给对应的GroupCoordinator进行管理;

每个GroupCoordinator只负责管理Consumer Group的一个子集,而非集群中全部的Consumer Group。

请注意与KafkaController以及副本机制中的主从模式的区别。

GroupCoordinator有几项比较重要的功能:

一是负责处理JoinGroupRequest和SyncGroupRequest完成Consumer Group中分区的分配工作;

二是通过GroupMetadataManager和内部Topic"Offsets Topic"维护offset信息,即使出现消费者宕机也可以找回之前提交的offset;

三是记录Consumer Group的相关信息,即使Broker宕机导致Consumer Group由新的GroupCoordinator进行管理,新GroupCoordinator也可以知道Consumer Group中每个消费者负责处理哪个分区等信息;

四是通过心跳消息检测消费者的状态。

GroupCoordinator中使用MemberMetadata记录消费者的元数据,MemberMetadata中各字段的含义和功能如下所述。

  • memberld:对应消费者的id,此值是由服务端的GroupCoordinator分配的。
  • groupld:记录消费者所在的Consumer Group的id。
  • assignment:Array[Byte]类型,记录了分配给当前Member的分区信息。
  • supportedProtocols:对应消费者支持的PartitionAssignor。
  • awaitingJoinCallback:与JoinGroupRequest相关的回调函数,后面详述。
  • awaitingSyncCallback:与SyncGroupRequest相关的回调函数,后面详述。
  • sessionTimeoutMs:心跳超时时间。
  • latestHeartbeat:最后一次收到心跳消息的时间戳。
  • isLeaving:标识对应消费者是否已经离开了Consumer Group。

MemberMetadata.vote方法提供了从给定候选PartitionAssignor中选择消费者支持的PartitionAssignor的功能。

GroupMetadata记录了Consumer Group的元数据信息,其字段的含义如下所述。

  • groupld:对应Consumer Group的id。
  • members:HashMap[String,MemberMetadata]类型,key是memberld,value是对应的MemberMetadata对象。
  • state:GroupState类型,标识当前Consumer Group所处的状态。
  • generationld:标识当前Consumer Group的年代信息,避免受到过期请求的影响。
  • leaderld:记录Consumer Group中的Leader消费者的memberld。
  • protocol:记录了当前Consumer Group选择的ParitionAssignor。
    在GroupMetadata中提供了对上述字段的操作,例如对members集合的增删、对state的切换。GroupMetadata在进行Member的增删操作时,还会顺便选择Group Leader:
相关推荐
KmSH8umpK43 分钟前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第八篇
数据库·redis·分布式
KmSH8umpK3 小时前
Redis分布式锁从原生手写到Redisson高阶落地,附线上死锁复盘优化方案进阶第七篇
数据库·redis·分布式
_F_y8 小时前
仿RabbitMQ实现消息队列-服务端核心模块实现(4)
分布式·rabbitmq
Albert Edison11 小时前
【RabbitMQ】发布确认模式(使用案例)
分布式·rabbitmq·ruby
EXnf1SbYK13 小时前
Redis分布式锁进阶第十二篇:全系列终极兜底复盘 + 锁架构巡检落地 + 线上零事故收尾方案
redis·分布式·架构
EXnf1SbYK13 小时前
Redis分布式锁进阶第八篇:锁超时乱序深度踩坑 + 看门狗失效真实溯源 + 业务长耗时标准化兜底方案
数据库·redis·分布式
EXnf1SbYK13 小时前
Redis分布式锁进阶第十一篇
数据库·redis·分布式
biyezuopinvip14 小时前
分布式风电场低电压穿越故障建模与仿真
分布式·matlab·毕业设计·毕业论文·分布式风电场·低电压穿越故障·建模与仿真
苍煜14 小时前
SpringBoot单体应用到分布式下的数据库锁、事务、Redis事务、分布式锁、分布式事务协调
数据库·spring boot·分布式
fengxin_rou14 小时前
黑马点评项目万字总结:从redis基础到实战应用详解
java·开发语言·分布式·后端·黑马点评