Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 在KSQL流中<;-表左连接,部分事件未正确连接_Apache Kafka_Ksqldb - Fatal编程技术网

Apache kafka 在KSQL流中<;-表左连接,部分事件未正确连接

Apache kafka 在KSQL流中<;-表左连接,部分事件未正确连接,apache-kafka,ksqldb,Apache Kafka,Ksqldb,我试图用KSQL(5.2.3)和Kafka(2.12-2.3.0)丰富一些事件数据 左键将流与表连接 但是联接的部分结果并不像我预期的那样包含丰富的数据 我解决了这个问题 问题在于,左连接是在表加载相关的前一个事件之前处理的 为了澄清问题,我粘贴了简化的KSQL查询和事件数据 活动: TimeStamp | EventType | EventData 1 | Create | ID:1, Name:"HELLO" 2 | Access | ID:

我试图用KSQL(5.2.3)和Kafka(2.12-2.3.0)丰富一些事件数据

左键将流与表连接

但是联接的部分结果并不像我预期的那样包含丰富的数据

我解决了这个问题

问题在于,左连接是在表加载相关的前一个事件之前处理的

为了澄清问题,我粘贴了简化的KSQL查询和事件数据

活动:

TimeStamp | EventType  | EventData
1         | Create     | ID:1, Name:"HELLO"
2         | Access     | ID:1, TID:2
3         | Write      | ID:1, TID:2
100       | Acesss     | ID:1, TID:3
110       | Write      | ID:1, TID:3
流和表:

CREATE STREAM SUBJECT_CREATE (TIMESTAMP='TimeStamp') AS SELECT TimeStamp, ID, Name FROM EVENT_STREAM WHERE EventType='Create' PARTITION BY ID;
CREATE TABLE SUBJECT_CREATE_TABLE (*) WITH (KAFKA_TOPIC='SUBJECT_CREATE', KEY='ID') ;

CREATE STREAM SUBJECT_ACCESS (TIMESTAMP='TimeStamp') AS SELECT TimeStamp, ID, TID FROM EVENT_STREAM WHERE EventType='Access' PARTITION BY ID;
CREATE STREAM SUBJECT_CR_AC_JOIN WITH(TIMESTAMP='TimeStamp') AS SELECT N.TimeStamp AS TimeStamp, N.ID AS ID, N.TID AS TID, P.Name AS Name FROM SUBJECT_ACCESS N LEFT JOIN SUBJECT_CREATE_TABLE P ON N.ID = P.ID PARTITION BY ID;
主题加入流的结果:

TimeStamp | ID | TID | Name
2         | 1  |  2  | null   ==> Expected "HELLO"
100       | 1  |  3  | "HELLO"
第二个包含“Name”,但第一个不包含

是否可以使它们在KSQL中同步


谢谢。

ksqlDB将尝试处理按行时间排序的数据。因此,如果流数据的时间戳早于表数据,那么它就没有正确地连接到表数据。毕竟,在流事件发生时,表数据并不存在

这是故意的

您可以解决这个问题,因为您可以在流数据之前向Kafka生成表数据。如果没有流数据,则在
max.task.idle.ms
ksqlDB之后将开始处理表数据,这意味着将填充表。然后,您可以发送流数据

或者,您可以确保生成具有表数据的更晚时间戳的流数据。这将是最正确的解决方案


如果用于生成消息的时间戳错误,您还可以使用
和(TIMESTAMP='something')
从卡夫卡消息的有效负载中提取ROWTIME。

谢谢。我试试看。:)