Kafka Streams 是否可以配置为等待 KTable 加载?

Can Kafka Streams be configured to wait for KTable to load?

我正在使用物化 KTable 来与我的 KStream 进行左连接(而流在左侧)。

然而,它似乎立即处理,而不等待当前版本的 KTable 加载..

我的 KTable 源主题中有很多值,当我启动应用程序时,很多连接都失败了(嗯,不是真的,因为它是左连接)。

我可以让它延迟启动以便等待初始主题加载吗?

处理在 Kafka Streams 中是时间同步的。因此,table 输入主题和流输入主题是根据记录时间戳顺序处理的。这在语义上是合理的,因为在 stream-table 加入时,您不想加入旧版本或新版本 KTable 的流记录,而是基于正确的版本流记录时间戳。

如果您的数据时间戳不正确,您可以尝试为通过 builder.table(..., Consumed.with(...)) 到 return 的时间戳指定一个自定义时间戳提取器,以确保正确的行为(即,可能小于第一个时间戳流记录?)

请注意,正确的时间戳同步需要 Kafka Streams 2.1。旧版本仅以尽力而为的方式同步时间,可能无法提供您想要的行为。有关详细信息,请参阅 KIP-353。

Kafka 3.0 附带更多时间戳同步改进:https://cwiki.apache.org/confluence/display/KAFKA/KIP-695%3A+Further+Improve+Kafka+Streams+Timestamp+Synchronization

您可以使用 GlobalKTable。它一直等到所有值都同步。