使用消息值中的多个字段来聚合消息

时间:2019-05-27 16:05:54

标签: apache-kafka apache-kafka-streams

我有一个Kafka主题,其中包含针对多个不同用户的多个用户信息事件。 我试图弄清楚如何使用值中的多个字段将这些汇总在一起。

例如:

输入主题:

1:{"SSN":"123456"}
2:{"twitterHandle":"elvis"}
3:{"SSN":"123456","twitterHandle":"elvis"}
4:{"SSN":"123456"}
5:{"SSN":"000000"}
6:{"twitterHandle":"foo"}
7:{"SSN":"000000","twitterHandle":"foo"}
8:{"SSN":"000000"}

我想要一个输出主题(汇总):

{"SSN":"123456","twitterHandle":"elvis"}
{"SSN":"000000","twitterHandle":"foo"}

如何使用Kafka Streams实现此目的? 我可以根据输入主题创建KStream并将其转换为KTable以获得输出主题吗?

更新: 该主题包含来自多个不同用户的事件。用户标识符(SSN,twitterHandle)不固定。用户可能还有其他ID

1 个答案:

答案 0 :(得分:0)

如果您一味想要删除消息1和2并保留消息3,则可以使用使用者拦截器。

拦截器将盲目解析json消息,检查消息是否同时存在两个键(而不是null),然后成功地将消息提前发送,否则不发送。在这种情况下,您不需要kstream应用。消费消息时只需要使用一个拦截器类。

但是,如果您只希望缝合1和2而在它们之间没有任何公共密钥,那么我认为那是不可能的,因为我们不知道哪个SSN需要与哪个twitter处理合并。

让我知道我是否可以通过其他任何方式提供帮助。