kafka 可靠性配置,幂等性,精确性问题(只发一次)问题
2022-08-29 10:03:13 0 举报
AI智能生成
kafka 幂等性问题
作者其他创作
大纲/内容
ExactlyOnce语义 精准发送一次
ack模式
0:At Most Once 语义 producer不等待broker的ack,这一操作提供了一个最低的延迟,broker一接收到还没有写入磁盘就已经返回,当broker故障时有可能丢失数据
1: producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据
-1 all):At Least Once 语义 有可能重复 producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack。但是如果在follower同步完成后,broker发送ack之前,leader发生故障,那么会造成数据重复
建立在ACK为all的基础上,想办法如何去重
At Least Once + 幂等性 = Exactly Once
幂等性
要启用幂等性,只需要将 Producer 的参数中 enable.idompotence 设置为 true 即可。Kafka
的幂等性实现其实就是将原来下游需要做的去重放在了数据上游。开启幂等性的 Producer 在
初始化的时候会被分配一个 PID,发往同一 Partition 的消息会附带 Sequence Number。而
Broker 端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker 只
会持久化一条
的幂等性实现其实就是将原来下游需要做的去重放在了数据上游。开启幂等性的 Producer 在
初始化的时候会被分配一个 PID,发往同一 Partition 的消息会附带 Sequence Number。而
Broker 端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker 只
会持久化一条
但是 PID 重启就会变化,同时不同的 Partition 也具有不同主键,所以幂等性无法保证跨
分区跨会话的 Exactly Once
分区跨会话的 Exactly Once
收藏
0 条评论
下一页