我想从Debezium源主题在ksqlDB中创建表,最终目的是对这些表执行左连接,并使用JDBC接收器连接器将物化视图有效地输出到下游数据库。
Debezium源主题尚未未应用任何转换(例如ExtractNewRecordState),因此包含Debezium文档{{ 3}}。
不应用ExtractNewRecordState转换的原因(可能会简化事情)是因为源CDC主题可能用于各种目的,并且似乎不可能在同一源数据库表上创建多个主题(因为主题名称)由Debezium自动确定,并取决于数据库服务器,架构和表名,如here所述。
到目前为止,我发现的最佳方法是:
CREATE STREAM user_stream WITH (KAFKA_TOPIC='mssql.dbo.user', VALUE_FORMAT='AVRO');
CREATE STREAM user_stream2 AS SELECT AFTER->user_id, AFTER->username, AFTER->email FROM user_stream EMIT CHANGES;
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中我应该使用其他方法(例如加窗功能)?
从性能和资源使用的角度来看,我特别希望确保所采用的方法是最有效的。