本文目录#

EOS 能解决什么问题#

Kafka 的 Exactly-Once Semantics(EOS)结合幂等生产者、事务性写入与消费者位点提交,解决消息重复与顺序错乱问题。适用于金额、积分等强一致场景。

配置步骤#

  1. Brokertransaction.state.log.replication.factor>=3transaction.state.log.min.isr>=2
  2. Producerenable.idempotence=truetransactional.id=xxx
  3. Consumer:使用 isolation.level=read_committed
  4. 应用逻辑
1
2
3
4
5
producer.initTransactions();
producer.beginTransaction();
producer.send(record);
producer.sendOffsetsToTransaction(offsets, consumerGroupId);
producer.commitTransaction();

常见坑位#

  • 事务超时:transaction.timeout.ms 需大于业务处理时间;
  • 并发度:一个 transactional.id 只允许单线程使用,可通过事务 ID 前缀 + 实例编号解决;
  • 写入外部系统:确保外部操作具备幂等或参与同一事务(如写入数据库 + Kafka connect 事务)。

监控指标#

  • kafka.producer.transaction-abort-ratetransaction-start-rate
  • Broker TransactionCoordinator 指标;
  • 消费端滞后:确保 read_committed 不导致堆积。

自检清单#

  • 是否评估事务时长与并发限制?
  • 是否监控事务失败率并捕获 ProducerFencedException
  • 是否在外部系统中实现幂等写入或两阶段提交?

参考资料#


本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。