当我们基于某个键将流按组应用时,kafka如何计算此值,因为相同的键可能出现在不同的分区中?我在看through()函数,该函数基本上是对数据进行分区的,但是我不明白这是什么意思。它将所有具有相同密钥的消息移到一个分区中吗?还有我们可以多久调用一次through()方法?如果有要求,我们可以在收到每条消息后调用它吗?请提出建议。 谢谢
答案 0 :(得分:2)
(默认情况下)Kafka中的数据始终按键分区。如果调用groupBy()
,则将分组属性设置为消息键,因此,当将数据写入重新分区主题时,具有相同键的所有记录都将写入同一分区。因此,当读回数据时,可以在aggregate()
函数中正确计算聚合。
请注意,Kafka Streams自动执行此重新分区(包括创建所需主题)。调用repartition()
(或through()
)可以达到相同的目的,但这不是必需的。
还要注意,Kafka Streams程序是一个数据流程序。使用DSL时,您仅指定数据流程序本身,但尚未处理任何事情。仅当您调用KafkaStreams#start()
时,数据流程序才会执行。