1.sarama 源码解析--Kafka的码解重平衡
2.NameServer 核心原理解析
sarama 源码解析--Kafka的重平衡
重平衡操作
重平衡是动态调整Consumer Group下的Consumer订阅Topic的分区的一个关键操作。Sarama中的码解BalanceStrategyRange和BalanceStrategySticky策略具体实施这一操作。
重平衡触发条件之一是码解成员数变更。这一过程包括以下步骤:
1. 启动一个新的码解消费者实例。
2. 调用Consume方法。码解
3. Consume方法初始化连接信息,码解claymore 源码并启动一个goroutine。码解程序会阻塞在sess.ctx.Done()上。码解
4. 在newSession方法中找到协调者信息,码解并发起join请求和syncgroup请求。码解Consumer Leader执行一次重平衡。码解
5. 创建consumer group session,码解并初始化offset manager和开启心跳goroutine。码解
6. 当心跳超时或收到coordinator的码解重平衡通知时,调用cancel()方法取消操作,码解退出Consume逻辑。
7. 此时,我的mycat源码Consume函数优雅退出。由于外层循环的存在,会重新执行Consume,实现一次重平衡。
另一个触发重平衡的条件是订阅主题分区数发生变更。这一过程如下:
1. 在Consume方法中开启心跳goroutine,并将consumer group session传递给它。
2. 分区数发生变化时,宠物his系统源码调用sess.cancel(),Consume优雅退出并重新执行,实现重平衡。
NameServer 核心原理解析
NameServer,通常被称为注册中心,是RocketMQ架构中一个关键但常被忽视的组件。它在集群背后起着类似Zookeeper在Kafka中的作用,支持Broker、超市供货源码Producer和Consumer的正常协作。
在日常操作中,我们主要与Producer和Consumer交互,NameServer则作为幕后支持者。Broker启动时,会将自己的信息,如IP、端口以及存储的云账本源码Topic路由信息(指明每个MessageQueue所在的Broker)通过心跳发送到NameServer。Producer则依赖NameServer获取元数据,将消息发送到正确的Broker。而Consumer通过NameServer获取消费配置,如Topic和Consumer Group,从而获取Broker的地址信息,开始消费消息。
接下来,我们通过注册Broker的源码来理解NameServer的工作。首先,NameServer会验证Broker发送的数据完整性,接着处理Body,如重置DataVersion或解析配置信息。核心的注册逻辑会维护集群中Broker的Name及其对应的地址信息,确保数据一致性。同时,它还会维护每个Broker的地址,区分主从节点,并处理可能的重复地址。此外,NameServer还会维护MessageQueue的数据,包括创建、更新和维护Broker与MessageQueue的映射关系。
NameServer的启动流程涉及定期扫描并更新活跃Broker列表,以及移除长时间无心跳的Broker。虽然文章仅展示了注册Broker的流程,但NameServer实际上支持更多操作,如查询、删除等,这些操作的源码都与注册操作紧密相关。
本文已为您全面解析了NameServer的核心原理,若对其他内容感兴趣,欢迎您通过微信搜索关注SH的全栈笔记获取更多帮助。感谢您的支持,点赞关注和分享是对我们最大的鼓励。