1.分区原因
2.分区原则
为保证生产则发送的数据,能可靠地发送到指定的topic,topic的每个分区收到数据后,都需要向生产者发送acknowledgement确认,若生产者收到ack,就会进行下一轮的发送。否则重新发送数据。
1.副本同步策略
2.ISR
leader维护了一个动态的in-sync replica set(ISR),意为和leader保持同步的follower集合。当ISR中的follow完成数据的同步之后,leader就会给follower发送ack。如果follower长时间未向leader同步数据,则该follower将被剔除ISR,该时间阈值由replica.lag.time.max.ms参数设定。leader发生故障之后,就会从isr中选取新的leader。
3.ack应答机制
三种可靠性级别,用户可以根据对可靠性和延迟的要求,进行配置acks
4.故障处理细节
HW和LEO是保证消费者消费数据的一致性,与存储数据完整性没有关系。
5.Exactly Once
作用:避免重复数据
Exactly Once = At Least Once + 幂等性
Producer中的enable.idompotence=true
实质:kafka的幂等性实现其实就是讲原来下游需要做的去重放在了数据上游。
过程:Producer在初始化的时候会被分配一个PID,发往同一个Partition的消息会附带Sequence Number。二Broker端会对<PID,Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker只会持久化一条数据。
注意:幂等性只在一次会话中有效,如果Producer故障之后重新恢复,会被分配不同的PID,此时即使带着相同的数据,Broker端也识别不到是同一个数据。
原文:https://www.cnblogs.com/zqzhen/p/12952711.html