美文网首页大数据
一文搞清楚主流选主算法 zookeeper,kafka, roc

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

作者: 陈sir的知识图谱 | 来源:发表于2020-09-15 14:40 被阅读0次

    zookeeper 选主 (ZAB)

    关键概念

    • zxid zk的事务id,单项递增,zxid越大,表示节点处理的事物越多,存储的数据操作也越多。
    • myid 分配给机器的唯一id,类型为数字
    • epoch 任期,单项递增,同一任期的选票才能计数,低任期的选票作废。

    选举步骤
    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

    相关文章

      网友评论

        本文标题:一文搞清楚主流选主算法 zookeeper,kafka, roc

        本文链接:https://www.haomeiwen.com/subject/hwcfyktx.html