Kafka重新分区(用于基于密钥的分组)

时间:2020-05-18 00:46:57

标签: apache-kafka apache-kafka-streams ktable

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

1 个答案:

答案 0 :(得分:2)

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

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

还要注意,Kafka Streams程序是一个数据流程序。使用DSL时,您仅指定数据流程序本身,但尚未处理任何事情。仅当您调用KafkaStreams#start()时,数据流程序才会执行。

相关问题