我想从debezium源主题在ksqldb中创建表,最终目的是在这些表上执行左连接,并使用jdbcsink连接器高效地将物化视图输出到下游数据库。
debezium源主题尚未应用任何转换(例如extractnewrecordstate),因此包含“before”和“after”属性,如这里的debezium文档所述。
不应用extractnewrecordstate转换(这可能会简化问题)的原因是源cdc主题可能用于各种目的,并且似乎不可能从同一个源数据库表创建多个主题(因为主题名称由debezium自动确定,并且依赖于数据库)服务器、架构和表名(如下所述)。
到目前为止,我发现最好的方法是:
从原始debezium输入在ksqldb中创建流,例如:
CREATE STREAM user_stream WITH (KAFKA_TOPIC='mssql.dbo.user', VALUE_FORMAT='AVRO');
创建第二个流,从第一个流的“after”属性中选择所需字段,例如:
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中使用不同的方法(例如窗口功能)?
我特别希望从性能和资源使用的Angular 确保所采用的方法是最有效的。
暂无答案!
目前还没有任何答案,快来回答吧!