我们从应用程序中读取传入的记录,并在Kafka中创建生产者记录时使用用户ID(作为字符串)作为生产者记录的密钥。应用程序每天处理数千个用户ID。
我们注意到,具有相同密钥(Z132384910042467345-0)的记录大多数时间被发送到同一分区(分区2),但有时会被发送到分区1和0.鉴于我们在Kafka这是可能的吗?不要使用CustomPartitioner?我查看了源代码,他们对密钥%分区计数进行哈希处理以到达分区,但无法弄清楚为什么相同的密钥映射到不同的分区。
P.S:还查看了任何异常的源数据(包含用户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);
}