【问题标题】:Debezium Ordering of CDC Events between multiple tables多个表之间 CDC 事件的 Debezium 排序
【发布时间】:2021-10-15 15:47:12
【问题描述】:

嗨,我是 debezium 的新手

我计划使用 debezium 进行实时数据库(mysql 和 mongo)集成 从每个数据库我需要将数据同步到目标数据库(mysql和mongo) 从 mysql 和 mongo 我只需要分别来自每个数据库的 X 个表和 y 个集合

在那些 x 个表和 y 个集合中,我只需要基于每个表和集合的条件的特定数据集

这里的条件不是直截了当的,我的意思是,例如,如果我们使用 mysql 数据库,我需要通过将一个表(我想要捕获 cdc 的表)与一个特定的表连接起来并仅捕获匹配的记录来获取记录

以上是我的要求,我对要求有一些疑问

  1. 根据基于每个表创建主题的 debezium 文档, 对于每个主题,如果我们将 cdc 数据推送到该主题的特定分区,则顺序是有保证的,因此在使用多个表时,它将 cdc 数据推送到每个表的主题分区,在这种情况下,我如何实现多个之间的事件顺序表 我的意思是我需要在 mysql binlog 上执行的事件的确切顺序 处理多个表时是否保证顺序,因为我需要按照与源数据库的 binlog 相同的顺序在目标数据库上进行同步??

  2. 如果我想要基于 mysql 或 mongo 连接条件与表或集合的数据,我如何从 debezium 实现这一目标

这是我的两个主要问题 请帮我解决这个问题

谢谢

迈克

【问题讨论】:

    标签: mysql mongodb debezium


    【解决方案1】:

    自从我发布这个问题 15 天以来,到目前为止我没有收到任何答案,所以我自己进行了测试并找到了订购的答案我对 debezium mysql 连接器进行了测试

    我已经测试了有 7 次操作的交易

    1.tableA 插入

    2.tableA 更新

    3.tableB 插入

    4.tableA 更新

    5.tableB 插入

    6.tableA 更新

    7.tableC 插入

    我使用默认连接器配置并观察了 5 次更改我可以看到订单不是我执行的顺序 所以我进行了配置更改以将默认主题分区设置为 1 然后我可以观察到数据中的每个主题都是有序的,但是整个顺序并不存在,然后当我设法通过拥有一个主题和一个分区来实现它时,则保证了交易顺序

    这是单个分区

    "topic.creation.default.replication.factor": 1,
    "topic.creation.default.partitions": 1,
    

    这是针对单个主题的

             "transforms":"dropPrefix",
             "transforms.dropPrefix.type":"org.apache.kafka.connect.transforms.RegexRouter",  
             "transforms.dropPrefix.regex": "(.*)([^0-9])(.*)",
             "transforms.dropPrefix.replacement": "yourtopic",
    

    请注意,我已经使用 kafka 版本 2.7.0 进行了测试,我遇到了 2.6.0 的问题

    我在 golang 中创建了一个库,可用于提取所需数据

    https://github.com/ahamedmulaffer/cdc-formatter

    希望对某人有所帮助

    谢谢

    迈克

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2020-11-28
      • 2021-07-23
      • 2020-07-09
      • 2019-10-20
      • 2019-09-02
      • 2023-01-26
      • 2019-09-20
      • 2020-09-27
      相关资源
      最近更新 更多