首页 > 解决方案 > Kafka:同一个 Key(string) 是否可以解析为 Kafka 中的多个分区?

问题描述

在 Kafka 中创建生产者记录时,我们从应用程序读取传入记录并使用用户 ID(作为字符串)作为生产者记录的 Key。应用程序每天处理数千个用户 ID。

我们注意到具有相同键(Z132384910042467345-0)的记录大部分时间被发送到同一个分区(分区 2),但有时被发送到分区 1 和 0。鉴于我们不使用,这在 Kafka 中是否可能一个自定义分区器?我查看了源代码,他们对 key % partition count 进行哈希处理以到达分区,但无法弄清楚为什么相同的 key 映射到不同的分区。

PS:还查看了任何异常的源数据(包含用户 ID),但找不到任何东西。

if (partitionKey != null && partitionKey.length() > 0){
        kafkaProps = kafkaConfigService.getProps(kafkaConfigService.getKafkaMode());
        record = new ProducerRecord(topicName, partitionKey, data);
    } else {
        LOG.error("partitionKey is null. Choosing a random partition");
        kafkaProps = kafkaConfigService.getProps(kafkaConfigService.getKafkaMode());
        record = new ProducerRecord(topicName, data);
    }

标签: apache-kafkakafka-producer-api

解决方案


推荐阅读