如何检测KTable连接的哪一侧触发了更新?

时间:2018-01-14 15:59:32

标签: apache-kafka apache-kafka-streams

当您在Kafka加入两个KTable时,每当两个KTable中的一个得到更新时,您的输出Ktable也会更新。

想象一下,您正在加入Customers,其中包含您已适当减少的Orders列表。想象一下,您再次使用此联接的结果为最终客户提供特别优惠和建议:

  • 您可能希望向他发送特别优惠,因为他已更改地址,而且他现在位于您销售产品XYZ的区域
  • 您可能希望向他发送特别优惠,因为他的总订单金额超过1000美元。

为了实现这一点,您需要知道每次连接“发出”流上的新记录时,连接的哪一侧确定了此新记录。处理此用例的适当解决方案是什么?

1 个答案:

答案 0 :(得分:1)

我认为有两种方法可以做到这一点:

  1. 在存储当前联接结果的联接之后使用连续的.transform()。如果您收到更新,则可以将新结果与旧结果进行比较,从而确定客户数据或订单数据是否已更改。这是一个内存密集型解决方案。
  2. 在联接之前使用transform()(对于每个输入),并使用时间戳或偏移量信息扩充记录。联接应保留此信息。因此,在结果中,订单的较大偏移/时间戳与客户相比,告诉您订单已更新并触发此结果。此解决方案占用的内存较少,但可能不是100%准确,具体取决于您的输入数据(使用偏移可能根本不起作用,时间戳也可能模糊,具体取决于数据更新的频率)。