首页/数据/数据工程与 ETL 速查/Kafka 事务与精确一次写入
本包目录(311 条)
管道基础52 条
Kafka64 条
调度与编排40 条数仓建模52 条数据质量50 条CDC 与同步53 条

Kafka 事务与精确一次写入

事务型生产者把多分区写入与消费位点提交绑定为一个原子操作,实现 consume-transform-produce 场景的精确一次;读端需以 read_committed 隔离级别读取。

适用流处理读写环、跨主题原子写
关键配置transactional.id(唯一)、transaction.timeout.ms(默认 60000)
读侧isolation.level=read_committed

事务使用(Java 片段)

事务使用(Java 片段)
producer.initTransactions();
try {
    producer.beginTransaction();
    producer.send(record1);
    producer.send(record2);
    producer.sendOffsetsToTransaction(offsets, consumer.groupMetadata());
    producer.commitTransaction();
} catch (Exception e) {
    producer.abortTransaction();
}
读端不设 read_committed 会读到未提交甚至中止的事务消息;下游跨系统写库时仍要保证幂等。

易错点

  • transactional.id 相同会互相接管(fencing),多实例部署必须每实例唯一
  • 事务超时后 broker 会中止事务,处理时间长的任务要评估 transaction.timeout.ms

数据来源与参考

  • Apache Kafka 官方文档:Transactions 与 Producer Configs
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌