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副本同步滞后过多的副本 也可称之为失效副本

关系: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机制_第1张图片

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的情况。也会丢失数据

 

你可能感兴趣的:(杂)