Kafka重新分区(基于key的group by)

San*_*jay 2 apache-kafka apache-kafka-streams ktable

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

Mat*_*Sax 6

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

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

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