当您在Kafka加入两个KTable时,每当两个KTable中的一个得到更新时,您的输出Ktable也会更新。
想象一下,您正在加入Customers
,其中包含您已适当减少的Orders
列表。想象一下,您再次使用此联接的结果为最终客户提供特别优惠和建议:
为了实现这一点,您需要知道每次连接“发出”流上的新记录时,连接的哪一侧确定了此新记录。处理此用例的适当解决方案是什么?
答案 0 :(得分:1)
我认为有两种方法可以做到这一点:
.transform()
。如果您收到更新,则可以将新结果与旧结果进行比较,从而确定客户数据或订单数据是否已更改。这是一个内存密集型解决方案。transform()
(对于每个输入),并使用时间戳或偏移量信息扩充记录。联接应保留此信息。因此,在结果中,订单的较大偏移/时间戳与客户相比,告诉您订单已更新并触发此结果。此解决方案占用的内存较少,但可能不是100%准确,具体取决于您的输入数据(使用偏移可能根本不起作用,时间戳也可能模糊,具体取决于数据更新的频率)。