如何通过kafka-streams实现去重后再groupBy统计频率?
使用Kafka-Streams做流计算的大家想必知道,它本身提供了 groupBy 操作可以方便我们做一些聚合计算,比如统计每分钟内每个人发出的消息数量,这个时候就可以 groupBy 用户的uid去,统计用户间互动消息频率就可以使用groupBy 用户uid和他的互动用户uid即可。
但如果现在需求是:如何统计每分钟和任一用户互动消息超过某频率的用户?
简化一下,如果,不考虑时间(Time Window)维度,上面需求简化成SQL就是类似如下:
找了很久,发现是可以实现的,KS是可以groupByKey时进行aggregate操作的,groupByKey 本身其实也是通过aggregate实现的。
简单来说,就是通过 group by uid时候,构建一个 fuid的集合去保存这样的状态,然后再对状态进行聚合,即:
上面这个例子是stackoverflow上的一个问答,原文:https://stackoverflow.com/questions/51048125/apache-kafka-grouping-twice/51071663
感兴趣可以试下: