Kafka - DefaultPartitioner 与 MessageKey 与 Custom Partitioner 之间的区别?

Kafka - Difference between DefaultPartitioner with MessageKey vs Custom Partitioner?

我正在尝试使用 ProducerRecordKafkaProducer 发送消息。

new ProducerRecord(topicName,messageKey,message)

这使用 DefaultPartitioner,DefaultPartitioner 将使用密钥的哈希值来确保同一密钥的所有消息都进入同一分区。

这和使用 CustomPartitioner 有什么区别?我希望 Custom Partitioner 也用于根据 Key 将消息发送到同一分区。

默认分区策略是

  1. 如果记录中指定分区,则使用它
  2. 如果未指定分区但存在键,请根据键的散列选择分区
  3. 如果不存在分区或键,则以循环方式选择一个分区

(这是从 DefaultPartitioner 源代码中提取的)

自定义分区程序只允许您设置自己的策略。因此,例如,您可以随机分配分区,或者如果您以某种方式预先知道分区将基于此分配多大的分区。 DefaultPartitioner 的默认部分更多是关于循环策略。我想在 most/all 情况下,选项 1 和 2 将被视为常态。