【问题标题】:Can Debezium ensure all events from the same transaction are published at the same time?Debezium 能否确保同一交易中的所有事件同时发布?
【发布时间】:2020-06-11 05:35:51
【问题描述】:

我开始探索使用变更数据捕获将数据库变更从遗留和商业应用程序(我无法修改)转换为其他系统可以使用的事件。简化我的真实案例,假设将涉及两个表,order 包含订单标题详细信息,order_line 包含请求的每个产品的详细信息。

我目前的理解是这两个表中的事件将被发布到两个不同的 kafka 主题中,我应该使用 kafka-streams 或 ksql 聚合它们。我已经看到有不同的选项来定义将用于选择所有相关事件的窗口,但是我不清楚如何确定来自同一数据库事务的所有事件都已经在主题,所以我不会错过任何一个。

Debezium 是否能够确保这一点(来自同一事务的所有事件都已发布),或者可能发生以下情况,例如,Debezium 在发布事件时崩溃,并且同一事务生成的只有部分事件在 Kafka 中?

如果是这样,推荐的处理方法是什么?

谢谢

【问题讨论】:

    标签: apache-kafka debezium


    【解决方案1】:

    Debezium 将其完全读取的事务日志的位置存储在 Kafka 中,并使用这些位置在任何崩溃或类似的其他情况下恢复其工作,以及有时可能发生的其他情况,在这种情况下,debezium 丢失它的位置,它会通过再次读取数据库的快照来恢复它!

    【讨论】:

    • 感谢您的回答。我得到了保持卡夫卡职位能够恢复的部分。我想确认的是(让我知道它是否在问题中表达得不好)是我将在以下场景中的 kafka 主题中找到的内容:在提交插入 3 行的事务后,debezium 开始生成事件并且它在为第二行生成事件时崩溃(无论出于何种原因);我希望在整个事务处理完毕之前,主题中不会出现任何事件,但是我想我只会找到第一行的事件。你能确认一下吗?
    • 对,您只会找到第一行的事件。我可以解释为什么你不想要第一个事件,但 Debezium 处理 bin 日志,它本身不考虑提交。
    • 作为记录,我发现当前的开发版本(请参阅此处的公告:debezium.io/blog/2020/02/11/debezium-1-1-beta1-released/…)添加了事务标记的概念,我认为它可以用于我的用例。我需要时间试一试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 2018-10-10
    相关资源
    最近更新 更多