我们有一系列传入的事件:
{ user: 123, itemid: 'abc', ... }
{ user: 456, itemid: 'abc', ... }
{ user: 123, itemid: 'def', ... }
{ user: 789, itemid: 'xyz', ... }
{ user: 123, itemid: 'xyz', ... }
等等。我们需要通过项目ID(Web服务调用)查找的数据来丰富这些内容,但是 查找可能很慢。另一方面,项目数据非常静态, 所以将它缓存一天不会有问题。
现在,标准解决方案是将项目数据发布到KTable并加入,但...... 我们无法获得所有项目 - 我们从后端系统获得这些项目,而不能只是做“全部”。 并且不会有更新通知。想象一下,项目ID是书籍ISBN号码 - 我们不能要求列出世界上所有的书籍。书籍信息只会缓慢变化 (例如,某人修复了分类错误),我们无需为此类更改重新发布事件。
那么,我们该怎么做呢? 我目前的想法是我们在itemid上进行分区,使用项目KTable进行左连接,然后在值joiner中进行 如果正确的值为null,请执行Web服务查找,返回结果并将结果发布到项目KTable主题。 但这会阻止我们两次查看'abc'吗?
对于比例尺,我们当前的数据集有大约150万个单独的项目。
答案 0 :(得分:1)
基本想法似乎是合理的,但我不会使用KTable
,而是使用维持状态的自定义有状态Transformer()
。 transform()
只有一个输入流,您可以查找Transformer
的状态。如果查找失败,则转到RCP,将其放入存储区,并为输出记录执行连接。