消息在kafka分区中是如何分布的?

How are messages distributed in the kafka partition?

如果我们在 Kafka 中有一个主题有 4 个分区。有4个publisher在同一个主题中发布消息。

所有发布者发布不同数量的消息,例如发布者 1 发布 W 条消息,发布者 2 发布 X 条消息,发布者 3 发布 Y 条消息,发布者 4 发布 Z 条消息。

每个分区中有多少条消息?

除非您的生产者没有专门写入某些分区(通过在构建 ProducerRecord 时提供分区号),否则每个生产者产生的消息将 - 默认情况下 - 落入基于以下分区之一它的关键。在内部使用以下逻辑:

kafka.common.utils.Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;

其中 keyBytes 是您的密钥的字节表示,numPartitions 在您的情况下是 4。如果您不使用任何密钥,它将以循环方式分发。

因此,如果不知道所使用的密钥(如果使用了密钥),则无法预测每个分区中有多少消息。

给出了有关消息分区的更多信息