Kafka 重新分区(基于键分组)

Kafka repartitioning ( for group by based on key)

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

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

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

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