Apache kafka KSQL-确定何时加载表

Apache kafka KSQL-确定何时加载表,apache-kafka,ksqldb,Apache Kafka,Ksqldb,我如何确定KSQL何时已将我的数据从卡夫卡主题完全加载到我的表中 目标:选取2个卡夫卡主题,加入它们,并将结果写入新的卡夫卡主题 示例: 我使用Ksql的restapi发出以下命令 CREATE TABLE MyTable (A1 VARCHAR, A2 VARCHAR) WITH (kafka_topic='topicA', key='A1', value_format='json'); CREATE STREAM MyStream (B1 varchar, B2 varchar) WITH

我如何确定KSQL何时已将我的数据从卡夫卡主题完全加载到我的表中

目标:选取2个卡夫卡主题,加入它们,并将结果写入新的卡夫卡主题

示例:

我使用Ksql的restapi发出以下命令

CREATE TABLE MyTable (A1 VARCHAR, A2 VARCHAR) WITH (kafka_topic='topicA', key='A1', value_format='json');
CREATE STREAM MyStream (B1 varchar, B2 varchar) WITH (kafka_topic='topicB', value_format='json');
CREATE STREAM MyDestination WITH (Kafka_topic='topicC', PARTITIONS = 1, value_format='json') AS SELECT a.A1 as A1, a.A2 as A2, b.B1 as B1, b.B2 as B2 FROM  MyStream b left join MyTable a on a.A1 = b.B1;
问题:topicC仅具有来自topicB的数据,并且所有关联值均为空


虽然我从CREATETABLE命令返回了成功状态,但数据似乎尚未完全加载到表中。因此,第三个命令的结果只包含来自流的数据,不包含来自表的数据。如果在执行join命令之前人为地延迟,则生成的主题将正确地包含来自这两个主题的数据。如何确定何时加载表,以及执行join命令是否安全?

这确实是一个很好的问题。在这一点上,KSQL无法仅在表完全加载后自动执行流表联接。这确实是一个有用的特性。这里讨论了一个更一般的相关问题:

KSQL中的表(以及底层的卡夫卡流)有一个时间维度,即随着时间的推移而演化。对于流表联接,每个流记录都用“正确”的表版本联接(即,表的版本是按时间控制的)

在即将发布的CP5.1版本中,您可以通过确保表主题的所有记录时间戳小于流主题的记录时间戳来“预加载”表。这告诉KSQL,它需要首先处理表主题数据,但在开始加入之前,相应地提高表时间戳版本

有关更多详细信息,请查看: