提问者:小点点

KStream/KTable连接中的Kafka Stream时间戳同步


在KStream/KTable内连接以下消息序列:

table_evt_at_t1

连接触发器:

(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和属性max.task.idle.ms=10*1000L作为[KIP-353][1]建议

这是预期的行为吗?


共1个答案

匿名用户

  • 连接触发的第一个结果是预期行为,因为KStream-KTable连接不是窗口化的,而是时间戳
  • 重置/重放后的结果也是预期行为,因为KTable仅保留给定键的最新值,并且table_evt_at_t3(table_evt_at_t1已被覆盖)是最后一个值