apache-kafka - 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);
}
解决方案
推荐阅读
- java - ProGuard - 混淆 SpringBoot 'fat' jar
- javascript - 在 ReactJS 中从这个对象获取数据的正确方法是什么?
- android - 在 android 或 ios 设备中将 Flutter 应用程序作为 Web 应用程序运行时如何请求权限?
- google-chrome - Chrome 更新后出现“Permissions-Policy 标头错误”
- django - 姜戈。通过模型与手动中间模型的 M2M 领域?
- python - Keras 多模型 API
- ruby-on-rails - 我应该创建另一个引用唯一 ID 的表还是只在 Ruby on Rails 中添加唯一 ID 列?
- python - 查找集合字典的有效方法在python中具有零交集
- javascript - ajax preventDefault() 不适用于 django 表单
- angular - 在 Angular 表单验证期间添加 CSS 类