数据可靠性
ACK应答级别

思考
Leader收到数据,所有的Follower都开是同步数据,但有一个Follower,因为某种故障,迟迟不能与Leader进行同步,那这个问题怎么解决呢?
解决
==Leader维护了一个动态的in-sync replica set(ISR),意为和Leader保持同步的Follower+Leader集合(leader:0,isr:0,1,2)。==
如果Follower长时间未向Leader发送通信请求或同步数据,则该Follower将被踢出ISR。该时间阈值由==replica.lag.time.max.ms参数设定,默认30s==。例如2超时,(leader:0, isr:0,1)
这样就不用等长期联系不上或者已经故障的节点
ISR中只保持和Leader正常通讯的Follower
数据可靠性分析
如果分区副本设置为1个,或者ISR里应答的最小副本数量(min.insync.replicas 默认为1 )设置为1,和ack=1的效果是一样的,仍然有丢数据的风险。
==数据完全可靠条件== = ==ACK级别设置为-1== + ==分区副本大于等于2== + ==ISR里应答的最小副本数量大于等于2==;
可靠性总结
- acks=0:生产者发送过来数据就不管了,可靠性差,效率高。
- acks=1:生成这发送过来数据等待Leader应答,可靠性中等,效率中等。
- acks=-1:生产者发送过来数据等待Leader和ISR队列中的素有Follower应答,可靠性高,效率低。
==在生产环境中,acks=0很少使用;acks=1一般用于传输普通日志,允许丢个别数据;acks=-1一般用于传输和钱相关的数据,和其他对可靠性要求比较高的场景==
数据重复分析
==acks:-1(all)==:生产者发送过来的数据,Leader和ISR队列中的所有节点收齐数据后准备应答,此时,Leader突然挂掉,应答失败,然后选举出的新Leader继续接收应答失败的数据,导致数据重复。

本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果