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

时间:2016-10-05 06:09:50

标签: apache-kafka kafka-producer-api

我正在尝试使用KafkaProducer将邮件发送到ProducerRecord

new ProducerRecord(topicName,messageKey,message)

这使用DefaultPartitioner,DefaultPartitioner将使用密钥的散列来确保相同密钥的所有消息都转到相同的分区。

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

1 个答案:

答案 0 :(得分:4)

默认分区策略是

  1. 如果在记录中指定了分区,请使用
  2. 如果未指定分区但存在密钥,请选择基于密钥哈希的分区
  3. 如果没有分区或密钥,请以循环方式选择分区
  4. (这是从DefaultPartitioner源代码中提取的)

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