【问题标题】:how to aggregate multiple partition in kafka streams如何在kafka流中聚合多个分区
【发布时间】:2018-08-14 11:55:27
【问题描述】:

假设我有一个名为 events 的主题,其中包含我发送字符串的 3 个分区。每个分区的消息如下所示:

["userId:test1", "userId:test2", "userId:test3", "userId:test4"] 

在分区 1 上。

["userId:test2", "userId:test4", "userId:test6", "userId:test8"] 

在分区 2 上。

["userId:test3", "userId:test6", "userId:test9", "userId:test12"] 

在分区 3 上。

我想看看下面聚合的结果。

test1 1
test2 2
test3 2

(顺序无所谓。)

这可能吗?如果可以的话,希望你能给我一些建议。否则,我希望你给我第二个选择,这样我就可以以类似的方式工作。

谢谢。

【问题讨论】:

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


    【解决方案1】:

    是的,你可以这样做。

    我假设"userId:test1" 是一个键值对,即key="userId"value="test1" 等。对于这种情况,您可以将值设置为新键并应用count()

    StreamsBuilder builder = new StreamsBuilder();
    builder.stream("your-input-topic")
           .groupBy((k,v) -> v)
           .count()
           .toStream()
           .to("your-output-topic");
    

    查看文档了解更多详情:https://kafka.apache.org/20/documentation/streams/developer-guide/

    【讨论】:

    • 感谢您的回复。如果聚合结果和我写的一样,是否需要将这段代码作为单线程运行?
    【解决方案2】:

    您可能想研究一下 Apache-Flume https://flume.apache.org/FlumeUserGuide.html

    【讨论】:

    • 这不是问题的答案,因为它指向另一个工具,并且没有解决明确询问 Kafka Streams 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2017-08-15
    • 2018-10-28
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多