日志复制模式: 大多数投票(Quorums),同步复制队列(ISRs)和状态机模式
kafka高可用的核心思想是建立在日志同步的机制上. 日志同步在分布式数据系统中是最常见同时极为重要环节之一,市面上有许多已实现的算法供参考. 其中状态机模型常被分布式系统用于实现日志复制来达到分布式系统的状态一致性
日志同步机制既要保证在分布式系统中数据的一致性,也要保证数据输入的顺序性. 当然有许多方法能实现这些功能,其中最为简单高效的处理方式是集群中选出一名leader来处理数据写入的顺序性,只要leader状态是存活的,follower副本只需按leader的写入顺序复制这些数据以达到集群内数据的一致性.
通常情况,只要leader不宕机我们是不用关心follower同步的问题,写入只发生在leader节点,副本节点只需按序复制leader日志即可. 当leader服务宕机,此时集群需要从follower节点群中选择新的leader节点, 此时这些follower节点可能存在未能同步到leader最新日志或者服务同时宕机的情形,但系统必须保证能选出具有最新日志数据的follower节点作为leader.事务日志复制算法最基本保证要做到:当客户端提交事务返回成功ack时,此时若leader宕机不可用,新选举的leader事务日志里必须包含客户端提交过的事务日志. 这里有个折中的情况:leader需要等待大多数follower返回日志复制ack信息,才能对外发布该事务消息,一定程度上增大了事务延迟,但有利的方面是当leader不可用时,更多的follower节点可以被选作leader,能加快选举的过程降低系统不可用时间.
大多数投票机制(majority vote):需要同时满足事务提交确