>KStreams - KTable
连接的工作方式非常简单:每次在流中发出新样本时,都会在表上按键查找。
这会导致瞬态阶段的意外行为吗?我们有一个这样的拓扑:
- 一个
KStream
A,我们执行一个选择键,将其转换为流 A1 - 一个
KStream
B,我们分组然后减少,将其变成KTable B1
在启动时,我们在 A 上发布两条记录,在 B 上发布两条记录,以便在 A 上的 selectKey 和 B 上的 groupBy + reduce 之后,键将匹配。但是,我们注意到有时 A1 和 B1 之间的内部连接的样本会失败,而是丢失一些我们期望的输出。
什么是正确的拓扑来确保没有更新丢失?
> KStream-KTable 联接同步是尽力而为的。我们致力于改进,以便为 1.2 版本提供更好的保证。自动取款机,你无能为力。
如果需要严格的保证,则需要使用 transform()
而不是 join()
实现自己的流表连接运算符。您可以将 KTable 存储连接到Transformer
,并为联接查找设置自定义逻辑。