如何从KTable删除旧键

时间:2020-06-03 18:36:47

标签: java apache-kafka apache-kafka-streams spring-kafka

我有一个生产者,它向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键。

如果有人对我该如何做有任何建议,我将非常感激。

1 个答案:

答案 0 :(得分:1)

您的flatMap()必须是有状态的,即,您可以将flatTransfrom()与状态存储一起使用以实现它。我们可以通过flatTransform()运算符(在2.5版本中添加)将KTable的结果加到结果KStream#toTable()中。

键值存储维护来自输入主题的原始数据。每次更改密钥时,您现在都可以访问该密钥的旧记录(来自商店)和新记录(向tranform()输入),并可以发出相应的记录来更新下游KTable。 / p>

相关问题