大数据

一文搞清楚主流选主算法 zookeeper,kafka, roc

2020-09-15  本文已影响0人  陈sir的知识图谱

zookeeper 选主 (ZAB)

关键概念

选举步骤
1 所有机器首先初始化任期为1,此时zxid为 0,myid为当前机器配置的id
2 所有机器先给自己投票,比如第一台的myid为1,zxid 为0 那投票信息就是(0,1),前面0,是zxid,1是myid
3 所有机器将自己的投票广播给其他机器。
4 收到其他机器投票的机器,针对自己的投票进行比较,然后修改自己的投票,再次进行广播
修改投票的逻辑是
首先比较本机投票中的zxid号,如果收到的票中的zxid号,比本机投票中的zxid号大,直接使用收到的投票作为本机投票,然后呢再进行广播。,如果zxid号与本机投票号相同,那么比较myid号,使用myid大的投票作为本机投票再进行广播。简单来说,就是ZXID 号最大的会成为master,如果有zxid相同的两台主机,myid大的作为master。
5 票数过半投到同一个(zxid,myid)的时候,这台机器就成为master

image.png

kafka选主

1 kafka中的controller 监测到 zookeeper 中的临时节点/controller 消失,激活选主流程
2 所有kafka节点竞争在zookeeper中创建临时节点/controller,创建成功的,成为master

kafka 分区选主

想当随意,如果某个分区的主分区挂了,随机选一个。本质是hash get

rocketmq DLedger 选主 Raft

1 所有机器生成自己的任期,最初任期都是1,每选一次加1
2 每个机器等待一个随机时间,随机时间最短的机器首先成为candidata
3 成为candidate的机器对着其他机器疯狂输出选我为master,如果得到半数以上的机器accept就成为真的master。
4 成为真正master的机器对整个集群吼,我成功当选master,于是其他小弟纷纷拜服。都开始拜码头,认老大。

参考
https://cloud.tencent.com/developer/article/1596838
https://cloud.tencent.com/developer/article/1491188

上一篇 下一篇

猜你喜欢

热点阅读