一个名为“addcash”的主题,它有3个分区(kafka集群机器的数量也是3个),并且有很多用户充值消息流入其中。我想每天计算总钱数。 我从一些关于Kafka Streams的文章中了解到:Kafka Streams将拓扑作为任务运行,任务的数量取决于主题分区的数量,每个任务都有单独的状态存储。 因此,当我用状态stroe计算总金额时,是否有三个值,而不是总值会返回?做正确的方法是什么? 谢谢!
答案 0 :(得分:1)
这是正确的。
您有两种方法可以做到这一点:
您执行部分和,并跟进KTable.groupBy(...).reduce(...)
并设置一个全局密钥以将所有部分聚合组合在一起。
您可以通过创建额外的单分区主题来获得总和,将部分结果写入此主题,使用KafkaStreams读取数据并执行第二次聚合以将这些部分数字添加到一起。您可以使用through("my-single-partition-topic");
使用单个程序来表达此信息,以连接聚合的第一部分和第二部分。您需要使用transform()
而不是DSL来执行此解决方案的第二个聚合步骤。