Kafka的ACK机制 - Go语言中文社区

Kafka的ACK机制


先来几个名词解释

AR(Assigned Repllicas):分区中所有副本的统称

ISR(In-Sync Replicas):由所有与leader副本保持一定程度同步的副本(包括Leader)组成的集合

ISR集合是AR集合中的一个子集。在kafka中 消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对于leader副本而言会有一定程度的滞后。“一定程度”是指可以忍受的滞后范围,这个范围可以通过参数进行配置.在可以忍受的这个滞后范围内的follower副本 才算做ISR中的一员

OSR(Out-Sync Relipcas):与leader副本同步滞后过多的副本(不包括leader)组成的集合

超过可以忍受的这个滞后范围内的follower副本 算作OSR的一员

关系:AR=ISR+OSR

在正常情况下,所有的follower副本都应该与leader副本保持一定程度的同步,即AR=ISR,OSR集合为空。

Leader会维护一个动态的ISR。意为与leader保持同步的follower集合。

当ISR中的follower完成数据的同步之后 leader才会发送ask。

如果follower长时间未向leader同步数据,则该leader将其提出ISR 该时间阈值由'replica.lag.time.max.ms'参数来设定。

当leader发生故障时 会优先从ISR中选取新的leader

kafka的ack机制

Kafka的ack机制:指的是producer的消息发送确认机制 通过request.required.acks参数来设置

这直接影响到Kafka集群的吞吐量和消息可靠性。而吞吐量和可靠性就像硬币的两面,两者不可兼得,只能平衡。

1(默认):producer在ISR中的leader已成功收到数据并得到确认。(leader写完即代表接收成功)

最低的延迟,但是最弱的持久性。

如果leader刚刚接收到消息,follwer还没来得及同步过去,结果leader所在的broker宕机了,此时也会导致这条消息丢失。

0:producer无需等待来自broker的确认而继续发送下一批消息。(只管发 不管leader是否接收到)

这种情况下数据传输效率最高,但是数据可靠性确是最低的。

可能你发送出去的消息还在半路,leader所在broker就直接挂了,但是你的客户端还是认为消息发送成功,此时就会导致这条消息丢失。

-1(all):producer需要等待ISR中的所有follower都确认接收到数据后才算一次发送完成

持久性最好,延时性最差,可靠性最高。

但是当ISR中只有leader时 这样就变成了acks=1的情况。也会丢失数据

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42652074/article/details/103628688
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-06 23:11:49
  • 阅读 ( 1249 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢