Kafka幂等和事务
所属分类 kafka
浏览量 1085
0.11版本引入 幂等 和 事务
幂等Producer
引入ProducerID和SequenceNumber
ProducerID
每个新的Producer初始化时,分配一个唯一的ProducerID,对客户端使用者不可见
SequenceNumber
对于每个ProducerID,Producer发送数据的每个Topic和Partition都对应一个从0开始单调递增的SequenceNumber值
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG,true)。
public static final String ENABLE_IDEMPOTENCE_CONFIG = "enable.idempotence";
自动去重,Broker会多保存一些字段
只能保证单分区上的幂等性
只能实现会话幂等性,重启Producer之后,幂等性不保证
read committed隔离级别事务
保证多条消息原子性地写入到目标分区,同时也保证Consumer只能看到事务成功提交的消息
Producer端设置
enable.idempotence = true
设置参数 transactional.id
调用事务API
initTransaction
beginTransaction
commitTransaction
abortTransaction
producer.initTransactions();
try {
producer.beginTransaction();
producer.send(record1);
producer.send(record2);
producer.commitTransaction();
} catch (KafkaException e) {
producer.abortTransaction();
}
保证record1和record2被当做一个事务提交到Kafka,要么全部成功,要么全部失败。
Consumer端设置
设置isolation.level参数
read_uncommitted
默认值 事务型Producer提交事务还是终止事务,写入的消息都可以读取
read_committed
只会读取事务型Producer成功提交事务写入的消息。
非事务型Producer写入的所有消息都能看到。
上一篇
下一篇
kafka消息发送机制
Kafka中的分区分配
linux OOM Killer 如何破
kafka面试题及答案
深入理解Kafka:核心设计与实践原理 读书笔记
管理学精髓:4大管理定律、4大管理法则、5大管理效应