Kafka - DefaultPartitioner 与 MessageKey 与 Custom Partitioner 之间的区别?
Kafka - Difference between DefaultPartitioner with MessageKey vs Custom Partitioner?
我正在尝试使用 ProducerRecord
向 KafkaProducer
发送消息。
new ProducerRecord(topicName,messageKey,message)
这使用 DefaultPartitioner
,DefaultPartitioner 将使用密钥的哈希值来确保同一密钥的所有消息都进入同一分区。
这和使用 CustomPartitioner
有什么区别?我希望 Custom Partitioner 也用于根据 Key 将消息发送到同一分区。
默认分区策略是
- 如果记录中指定分区,则使用它
- 如果未指定分区但存在键,请根据键的散列选择分区
- 如果不存在分区或键,则以循环方式选择一个分区
(这是从 DefaultPartitioner
源代码中提取的)
自定义分区程序只允许您设置自己的策略。因此,例如,您可以随机分配分区,或者如果您以某种方式预先知道分区将基于此分配多大的分区。 DefaultPartitioner
的默认部分更多是关于循环策略。我想在 most/all 情况下,选项 1 和 2 将被视为常态。
我正在尝试使用 ProducerRecord
向 KafkaProducer
发送消息。
new ProducerRecord(topicName,messageKey,message)
这使用 DefaultPartitioner
,DefaultPartitioner 将使用密钥的哈希值来确保同一密钥的所有消息都进入同一分区。
这和使用 CustomPartitioner
有什么区别?我希望 Custom Partitioner 也用于根据 Key 将消息发送到同一分区。
默认分区策略是
- 如果记录中指定分区,则使用它
- 如果未指定分区但存在键,请根据键的散列选择分区
- 如果不存在分区或键,则以循环方式选择一个分区
(这是从 DefaultPartitioner
源代码中提取的)
自定义分区程序只允许您设置自己的策略。因此,例如,您可以随机分配分区,或者如果您以某种方式预先知道分区将基于此分配多大的分区。 DefaultPartitioner
的默认部分更多是关于循环策略。我想在 most/all 情况下,选项 1 和 2 将被视为常态。