Debezium Embedded Engine with AWS Kinesis - PostgreSQL 快照加载和事务元数据流

Posted

技术标签:

【中文标题】Debezium Embedded Engine with AWS Kinesis - PostgreSQL 快照加载和事务元数据流【英文标题】:Debezium Embedded Engine with AWS Kinesis - PostgreSQL snapshot load and Transaction metadata stream 【发布时间】:2020-12-04 15:36:53 【问题描述】:

我想将 Debezium Embedded Engine 与 AWS Kinesis 一起使用,以加载 PostgreSQL 数据库的初始快照,然后持续执行 CDC。

我知道,使用 Kafka Connect,我将拥有开箱即用的事务元数据主题,以便检查事务边界。

如果使用 Debezium Embedded Engine 和 AWS Kinesis (https://debezium.io/blog/2018/08/30/streaming-mysql-data-changes-into-kinesis/) 怎么样?在这种情况下,我会有 Kinesis Transaction 元数据流吗?此外,Debezium Embedded Engine 是否会执行现有 PostgreSQL 数据的初始快照?

更新

我使用 PostgreSQL 实现了测试 EmbeddedEngine 应用程序:

    engine = EmbeddedEngine.create()
            .using(config)
            .using(this.getClass().getClassLoader())
            .using(Clock.SYSTEM)
            .notifying(this::sendRecord)
            .build();

现在,在我的 'sendRecord(SourceRecord record)' 方法中,我可以看到参与事务的每个数据库表的正确主题,例如:

private void sendRecord(SourceRecord record) 

    String streamName = streamNameMapper(record.topic());
    System.out.println("streamName: " + streamName);

结果如下:

streamName: kinesis.public.user_states
streamName: kinesis.public.tasks

在同一个txId=1510

但我仍然看不到交易元数据流。 如何使用 Debezium EmbeddedEngine 正确获取事务元数据流?

【问题讨论】:

【参考方案1】:

如果您不具体使用 Debezium 嵌入式引擎,那么 Debezium 本身提供了一个选项,它被称为 Dewbezium Server(在内部我相信它使用了 Debezium 引擎)。 它是使用 Kafka 的一个很好的替代方案,并且它支持 Kinesis、Google PubSub、Apache Pulsar,截至目前用于 CDC。

这里有一篇文章可以参考 https://xyzcoder.github.io/2021/02/19/cdc-using-debezium-server-mysql-kinesis.html

【讨论】:

以上是关于Debezium Embedded Engine with AWS Kinesis - PostgreSQL 快照加载和事务元数据流的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个 Postgres 服务器中将 Embedded Debezium 用于多个数据库?

Data liberation pattern using the Debezium engine

Data liberation pattern using the Debezium engine

Debezium 在发出初始 DROP TABLE 事件时中断

Debezium系列之:安装部署debezium详细步骤,并把debezium服务托管到systemctl

带有 kafka 的 Debezium 还是只有嵌入式 Debezium?