我有一个生产者,它向Kafka主题发布键为A或B的记录。
在流应用程序中,我将键A的每个记录映射到键U,V或W的记录,将键B的每个记录映射到键X,Y或Z的记录。
每个平面图操作创建的记录数各不相同。例如,一条具有键A的特定记录可能被映射到一个具有键U的记录,但是另一条记录可能被映射到键V之一和键W之一。
我想为这些平面映射记录创建一个KTable。但是,我希望此KTable的键与键A和B的每个记录的上一次平面映射操作生成的键匹配。
例如,如果KTable在特定时刻具有X,Y和U键,然后发布了具有键B的记录并将其映射到仅包含键X的一条记录,那么我希望KTable仅具有X和U键。
如果有人对我该如何做有任何建议,我将非常感激。
答案 0 :(得分:1)
您的flatMap()
必须是有状态的,即,您可以将flatTransfrom()
与状态存储一起使用以实现它。我们可以通过flatTransform()
运算符(在2.5版本中添加)将KTable
的结果加到结果KStream#toTable()
中。
键值存储维护来自输入主题的原始数据。每次更改密钥时,您现在都可以访问该密钥的旧记录(来自商店)和新记录(向tranform()
输入),并可以发出相应的记录来更新下游KTable
。 / p>