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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?