04 kafka怎么做分布式事务?

vvEcho 2024-02-20 22:30:12
Categories: Tags:

kafka的优势其实在于副本机制以及在消息的吞吐量上,它本身的机制并不能用来做分布式事务;

如果非得要用它来做事务管理的话,我们需要自己业务层面自己来确保消息的幂等性

如果非要用kafka实现一个分布式事务,则需要借助一个本地事务状态表来实现,过程如下:

  1. 业务操作和消息记录在一个事务中,先标记为待发送(发生的消息需携带唯一id)
  2. 启动一个定时任务定时扫描待发送的消息投递到kafka, 成功后将状态更新为已发送;
  3. 若失败则重新投递,失败重试前根据消息id及状态判断是否需要重试
  4. 消费者收到消息后,将消息消息更新为待处理
  5. 执行消费端的本地事务,成功后将状态改为已处理
  6. 若消费失败,则定时扫描待处理的消息,重试失败的业务操作或触发回滚的逻辑

根据最终一致性来保障消息的可靠性