ksqlDB:从Debezium源主题创建表的最佳方法?

时间:2020-11-05 16:34:18

标签: apache-kafka apache-kafka-connect ksqldb debezium

我想从Debezium源主题在ksqlDB中创建表,最终目的是对这些表执行左连接,并使用JDBC接收器连接器将物化视图有效地输出到下游数据库。

Debezium源主题尚未应用任何转换(例如ExtractNewRecordState),因此包含Debezium文档{{ 3}}。

不应用ExtractNewRecordState转换的原因(可能会简化事情)是因为源CDC主题可能用于各种目的,并且似乎不可能在同一源数据库表上创建多个主题(因为主题名称)由Debezium自动确定,并取决于数据库服务器,架构和表名,如here所述。

到目前为止,我发现的最佳方法是:

  1. 从原始Debezium输入在ksqlDB中创建流,例如:
CREATE STREAM user_stream WITH (KAFKA_TOPIC='mssql.dbo.user', VALUE_FORMAT='AVRO');
  1. 创建第二个流,从第一个流的'after'属性中选择必填字段,例如:
CREATE STREAM user_stream2 AS SELECT AFTER->user_id, AFTER->username, AFTER->email FROM user_stream EMIT CHANGES;
  1. 最后,按照here所述将第二个流转换为表,即:
     SELECT user_id,
            LATEST_BY_OFFSET(username) AS username,
            LATEST_BY_OFFSET(email) AS email
     FROM user_stream2
     GROUP BY user_id
     EMIT CHANGES;

必须重复这些步骤才能生成每个表,此时可以对表执行联接以产生输出。

这似乎很漫长,有很多中间步骤。表现似乎也很缓慢。是否有更好和/或更直接的方法使用ksqlDB和Debezium生成实例化视图?是否可以删掉任何一个步骤和/或在步骤3中我应该使用其他方法(例如加窗功能)?

从性能和资源使用的角度来看,我特别希望确保所采用的方法是最有效的。

0 个答案:

没有答案