Kafka幂等Producer和事务Producer

本文介绍了Kafka的消息交付可靠性,包括最多一次、至少一次和精确一次三种模式。重点讨论了幂等性Producer和事务型Producer的实现与特性。幂等性Producer通过设置参数实现,确保单分区消息不重复。而事务型Producer则能保证多分区消息的原子性,并在Producer重启后保持精确一次处理。设置事务型Producer需开启幂等性并设置transaction.id,同时代码中需使用事务API进行操作。
摘要由CSDN通过智能技术生成

一、Kafka 消息交付可靠性

Kafka 对Producer和Consumer 需要处理的消息提供三种承诺:

  • 最多一次(at most once):消息可能丢失,但绝不会被重发;
  • 至少一次(at least once):消息不会丢失,但有可能被重复发送(默认此可靠性);
  • 精确一次(at most once):消息不会丢失,也不会被重复发送。

目前,Kafka默认提供的交付可靠性保障是第二种,即至少一次。Producer 发送消息后,没有收到 Broker的callback,就会发起重试,发送相同的消息到Broker。

二、幂等性 Producer

在Kafka中,Producer 默认不是幂等性的,但我们可以闯进幂等性Producer。在0.11 版本之后,添加一个参数即可实现幂等性,即 props.put(“enable.idempotence”,true)或props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG,true)。
设置参数后,Kafka 自动帮你做消息的重复去重。底层实现原理很简单,就是典型的空间去换时间的优化思路,即在Broker端多保存一些字段。当Producer 发送相同字段值的消息后,Broker能够自动知晓这消息已经去重复了, 于是可以在后台默默的把它们"丢弃"掉。
Producer 幂等性只能保证单分区上的幂等性,即保证某一个分区上不出现重复消息,它无法实现多分区的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值