kafka学习之Exactly Once

将服务器的ACK在设置为-1,可以保证producer到server之间的数据不丢失 即at least once 。

将服务器的ACK级别设置为0,可以保证生产者每条消息只会被发送一次 即at most once。

at least once 可以保证数据不丢失 但是不能保证数据不重复,相对的 at most once 可以保证数据不重复 但是不能保证数据不丢失

对于一些非常重要的信息 下游数据消费者要求数据既不重复也不丢失 Exactly Once

幂等性:就是指producer无论向server发送多少次重复的数据,server端只会持久化一条,幂等性结合at least once就构成了exactly once

要启用幂等性,只需要将 Producer 的参数中 enable.idompotence 设置为 true 即可。Kafka的幂等性实现其实就是将原来下游需要做的去重放在了数据上游。开启幂等性的 Producer 在初始化的时候会被分配一个 PID,发往同一 Partition 的消息会附带 Sequence Number。而Broker 端会对<PID, Partition, SeqNumber>做缓存,当具有相同主键的消息提交时,Broker 只会持久化一条。但是 PID 重启就会变化,同时不同的 Partition 也具有不同主键,所以幂等性无法保证跨分区跨会话的 Exactly Once

posted @   先生小凯  阅读(345)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示