kafka中副本数据同步策略 ,acknowledge的发送策略,kafka的数据可靠性保证

ack(acknowledge)简介

为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的消息后,都需要向producer发送ack(acknowledge),确认收到信号。

如果producer收到topic发送的ack,就会进行下一轮的发送,否则重新发送数据

何时发送ack?

确保有follower与leader同步完成,leader再发送ack,这样才能保证leader挂掉之后,能在follower中选举出新的leader

发送策略:多少个follower同步完成后发送ack?

方案一:半数以上的follower同步完成,即可发送ack。

优点:延迟低,反应速度快。 缺点:选举新的leader时,若要容忍n台结点的故障需要2n+1个副本

方案二:全部的follower同步完成,才可以发送ack

优点:选举新的leader时,容忍n台结点的故障,需要n+1副本。缺点:延迟高,反应速度慢

kafka选择了第二种方案

原因如下:
(1)为了容忍n台节点的故障,第一种方案需要2n+1个副本,而第二种方案只需要n+1个副本。kafka的每个分区都有大量的数据,第一种方案会造成大量的数据冗余

(2)虽然第二种方案的网络延迟会比较高,但网络延迟对kafka的影响较小

为何是2n+1?

节点需要超过一半才能选举一个新的leader。

如果只有2n个副本,每次同步到n个节点就返回,如果这n个节点都发生故障,数据便丢失了

如果是2n+1个副本,半数就是n+1,即每次同步到n+1个节点就返回,n个节点发生故障,至少还存在一个节点存在完整数据。

你可能感兴趣的