首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生产端的Kafka交易管理

问生产端的Kafka交易管理
EN

Stack Overflow用户
提问于 2021-05-21 05:40:33
回答 1查看 122关注 0票数 0

我在寻找卡夫卡在交易中的表现。我有一个oracle数据库插入操作运行在同一个事务中,如果事务回滚,它将回滚更改。卡夫卡生产者在交易回滚的情况下是如何表现的?

消息是回滚还是Kafka不支持回滚?

我知道只有在提交事务时,JMS消息才会被提交到队列。寻找类似的解决方案,如果它是支持的。

注意:生产者代码是使用spring引导编写的。

EN

回答 1

Stack Overflow用户

发布于 2022-03-03 15:38:01

你想要更新两个系统

将oracle database

  • sending中的记录更新为apache

这是一个挑战,因为您希望它是原子的,要么执行所有东西,要么什么都不执行,否则您的数据库和kafka之间就会有不一致的结果。

  • 您可以发送一条Kafka消息,即使数据库事务是回滚的。
  • 或相反的方式(如果您在提交之后发送消息),您可能会在发送卡夫卡事件之前(出于某种原因)提交数据库事务并崩溃。

最简单的解决方案之一是使用发件箱模式:

假设您想要更新订单表,并将事件发送给kafka

  • Instead的transaction

  • You中的
  • 可以使用与订单更新
  • 相同的事务将数据库表(发件箱)保存为数据库表(发件箱)--单独的进程将从发件箱表读取数据,并确保将其发送给卡夫卡(至少使用一次semantic)
  • Your使用者需要是幂等的。

)。

在这篇文章中,我将更详细地解释如何实现这个解决方案。

https://mirakl.tech/sending-kafka-message-in-a-transactional-way-34d6d19bb7b2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67631362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档