CDC事件在多个表之间的Debezium排序



嗨,我是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实现这一点

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

感谢迈克

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

我已经测试了有7个操作的事务

1。为多插入

2。为多更新

3。插入表b

4。为多更新

5。插入表b

6。为多更新

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

希望能帮到别人

感谢迈克

最新更新