我正在使用物化的KTable来与我的KStream进行左连接(而流是在左侧)。
但是,它似乎可以立即处理,而无需等待KTable的当前版本加载。。
我在KTable的源主题中有很多值,并且当我启动应用程序时,很多联接失败了(嗯,不是真的,因为它是左联接)。
我可以延迟启动它,以便等待初始主题加载吗?
答案 0 :(得分:2)
在Kafka Streams中处理是时间同步的。因此,基于记录时间戳顺序处理表输入主题和流输入主题。从语义上讲,这是合理的,因为在流表联接中,您不希望将流记录与旧版本或较新版本的KTable
联接,而要基于流记录来选择正确的版本。时间戳。
如果您的数据未正确加上时间戳,则可以尝试通过builder.table(..., Consumed.with(...))
指定自定义时间戳提取器,以返回确保正确行为的时间戳(即,是否小于第一个流记录的时间戳?)>
请注意,正确的时间戳同步需要Kafka Streams 2.1。旧版本仅以尽力而为的方式同步时间,可能无法提供您想要的行为。有关更多详细信息,请参阅KIP-353。
答案 1 :(得分:1)
您可以使用GlobalKTable。等待所有值同步。