0

当我们基于某个键在流上应用分组函数时,kafka 如何计算这个,因为相同的键可能存在于不同的分区中?我看到了 through() 函数,它基本上对数据进行了重新分区,但我不明白这是什么意思。它会将具有相同键的所有消息移动到单个分区中吗?另外,我们可以多久调用一次 through() 方法?如果有需求,我们可以在收到每条消息后调用它吗?请建议。谢谢

4

1 回答 1

4

Kafka 中的数据(默认情况下)总是按键分区。如果调用groupBy()分组属性设置为消息键,那么当数据写入重新分区主题时,具有相同键的所有记录都写入同一个分区。aggregate()因此,当读回数据时,可以在函数中正确计算聚合。

请注意,Kafka Streams 会自动执行此重新分区(包括创建所需主题)。调用repartition()(or through()) 可以达到相同的效果,但这不是必需的。

另请注意,Kafka Streams 程序是一个数据流程序。使用 DSL 时,您只需指定数据流程序本身,但尚未处理任何内容。只有当你调用KafkaStreams#start()数据流程序时才会执行。

于 2020-05-18T01:51:42.710 回答