kafka的HA高可用机制

1、kafka的HA机制:副本机制+消息同步+leader选举。

  每个topic有多个partition,每个partition又有多个副本,这些副本当中也存在不同的角色,leader、follower。producer和consumer都只跟leader进行交互,leader进行读写操作。leader负责将消息写进本地log当中,follower去leader上pull拉取数据,将数据同步到本地log当中。当leader挂了的时候,就利用zookeeper重新选出一个leader即可。

  其中,kafka将所有的partition均匀分布在集群中的broker上,所有的Replica副本也均匀分布在集群中的broker上,这样做主要是保证负载均衡和容错能力。因为所有的分区和副本都在一个broker上,那样这个broker挂了,数据也就都丢失了。实现这个均匀分布,使用的是一种算法。主要就是用求余数的运算。

  Kafka分配Replica的算法如下:

  1.将所有Broker(假设共n个Broker)和待分配的Partition排序

  2.将第i个Partition分配到第(i mod n)个Broker上

  3.将第i个Partition的第j个Replica分配到第((i + j) mode n)个Broker上

     总之,kafka的健壮性主要来源其强大的副本策略。

2、消息同步策略:producer发送消息到某个partition时,首先通过zookeeper获取这个partition的leader, producer只将消息发送给leader ,leader将该消息写入其本地log中,follower从leader上pull数据。为了提高性能,follower收到消息之后直接向leader返回Ack,follower将消息写进本地log中。一旦leader收到了ISR列表中的所有Replica的ack,该消息就被认为已经commit了,leader向producer发送ACK。

       consumer读消息也只从leader读取,只有commit的消息才会暴露给consumer。

3、leader选举:所有的follower都在zookeeper上注册watch监听,一旦leader宕机,其对应的ephemeral znode临时节点会被删除,此时所有的follower都去尝试创建该节点,创建成功者,成为新的leader,其他的Replica就是follower。

leader选举本质上是分布式锁,有两种方式实现基于zookeeper的分布式锁。

节点名称唯一性:多个客户端创建一个节点,只有创建成功的才会获得锁。

临时顺序节点:所有的客户端在某个目录下创建自己的临时顺序节点,只有序号最小的才会获得锁。

参考博客:https://www.cnblogs.com/frankdeng/p/9310704.html

原文地址:https://www.cnblogs.com/guoyu1/p/12027374.html