【车联网kafka】Kafka核心架构与实战经验(第四篇)

一、社团扛把子不为人知的秘密

香港社团里,Kafka 是整个组织的名号,ZooKeeper 就是说一不二的长老团,各个片区的 "话事人" 就是 broker,而能统领所有片区的 "扛把子",就是 Kafka 里的控制器。​

1.1 选举的秘密

每天社团开工,各个片区的话事人都要先去长老团报备。这时候,大家都会偷偷瞄一眼长老团手里的 "花名册"------ 也就是 ZooKeeper 里的 /controller 节点。

要是花名册上已经写了某个片区话事人的名字(brokerid),其他人就只能乖乖退回,承认对方是扛把子;

可要是花名册是空的,或者上面的名字糊了,所有人就得立刻抢着去长老团登记,谁先把自己名字写上,谁就是新扛把子。不过这登记有讲究,花名册是 "临时的",要是扛把子出了意外(节点宕机),名字会自动从花名册上消失,这时候就得重新选扛把子。​

每个新扛把子上任,长老团还会给一个 "任期编号"------ 也就是 controller_epoch。

头一任扛把子是 1 号,要是扛把子换了人,编号就自动加 1。为啥要有这编号?比如前扛把子的小弟拿着命令来找现任扛把子,现任一看编号不对(比自己的小),就知道这是过期命令,直接不认。这规矩能避免前任的旧指令扰乱社团。​

1.2 日常工作的职责之谜

当了扛把子,就得比普通话事人多扛不少活儿(这些事都得扛把子亲自拍板,还得让长老团盯着相关的节点,随时汇报动静)。

  • 片区地盘调整(分区重分配):

    • 为ZooKeeper中的/admin/reassign_partitions 节点注册 PartitionReassignmentHandler
  • 手下兄弟变动(ISR 集合变更):

    • 为 ZooKeeper 中的/isr_change_notification节点注册IsrChangeNotificetionHandler
  • 换片区负责人(优先副本选举):

    • 为ZooKeeper中的/admin/preferred-replica-election节点添加PreferredReplicaElectionHandler
  • 社团里新来重大任务(新增主题):

    • 为 ZooKeeper 中的/brokers/topics 节点添加TopicChangeHandler
  • 社团某些重大任务不干了(删除主题):

    • 为 ZooKeeper 中的/admin/delete_topics节点点添加TopicDeletionHandler。​
  • 有新话事人加入(broker 上线)或者老话事人跑路(broker 下线),扛把子得盯着花名册(/brokers/ids),及时调整人手。

    • 为ZooKeeper中的/brokers/ids节点添加BrokerChangeHandler,用来处理broker增减的变化。
  • 每天开工,扛把子得先从长老团那里把所有地盘、兄弟的信息抄一遍,整理成总表,再下发给所有片区,保证大家信息一致。​

    • 为ZooKeeper中的/brokers/topics/<topic>节点添加PartitionModificationsHandler。​

对了,社团里还有个规矩:要不要定期调整各个地盘的负责人(优先副本均衡),得看扛把子手里的 "自动调整开关"(auto.leader.rebalance.enable)。这开关要是打开,扛把子会每 5 分钟查一次,要是发现 10% 以上的地盘负责人不合适,就会自动换人。但老江湖都知道,这自动调整容易出乱子,万一正忙着做事呢,突然换负责人会耽误事,所以社团里一般都把这开关关了,换成手动调整 ------ 就像用脚本 kafka-perferred-replica-election.sh 指定换人,稳妥得多。​

说到底,扛把子的存在就是为了让整个社团不乱套:谁的地盘谁负责,兄弟变动有记录,地盘调整有章法,就算扛把子换了人,有任期编号顶着,新老大照样能顺利接盘。这一套规矩下来,社团才能在香港的复杂环境里稳稳当当运行。

相关推荐
谷玉树22 分钟前
框架分类与选型:一种清晰的三层分类法
人工智能·pytorch·机器学习·架构·django·前端框架
星川皆无恙28 分钟前
大数据爬虫可视化分析:基于Python的豆瓣书籍可视化分析系统的设计与实现
大数据·爬虫·python·架构·pycharm·django
i***586740 分钟前
自动驾驶---E2E架构演进
人工智能·架构·自动驾驶
GIOTTO情1 小时前
技术深度拆解:Infoseek 媒体发布系统的分布式架构与自动化实现
分布式·架构·媒体
拾忆,想起1 小时前
Dubbo序列化方式全解析:从原理到实战的性能优化指南
服务器·网络·微服务·性能优化·架构·dubbo
7***n751 小时前
后端在微服务中的Traefik
微服务·云原生·架构
上海云盾-小余1 小时前
警惕 “伪装型” CC 攻击!通过日志分析识别异常请求,让恶意访问无所遁形
人工智能·安全·架构
j***12152 小时前
计算机体系结构期末复习3:GPU架构及控制流问题
java·开发语言·架构
b***67642 小时前
深入解析HDFS:定义、架构、原理、应用场景及常用命令
hadoop·hdfs·架构
稚辉君.MCA_P8_Java2 小时前
Gemini永久会员 哈希表(Hash Table)高效的数据结构
java·数据结构·后端·算法·架构