具有内部联接KStream / KTable和以下消息序列:
table_evt_at_t1-> stream_evt_at_t2-> table_evt_at_t3-> stream_evt_at_t4
联接触发:
(stream_evt_at_t2,table_evt_at_t1)+(stream_evt_at_t4,table_evt_at_t3)
到目前为止,一切正常。 当我重置流应用程序(使用kafka-streams-application-reset.sh)并重播所有事件时,出现意外结果:
(stream_evt_at_t2,table_evt_at_t3)+(stream_evt_at_t4,table_evt_at_t3)
在处理事件时,Kafka Stream似乎没有考虑时间戳。它将填充Ktable,然后处理KStream,以获取两个KStream事件的Ktable的最后一个值(table_evt_at_t3)。
请注意,我使用的是Kafka Streams 2.3.1,自定义的TimestampExtractor和[KIP-353] [1]建议的属性max.task.idle.ms = 10 * 1000L
这是预期的行为吗?