weixin_52225937 2022-12-20 15:32 采纳率: 89.5%
浏览 11
已结题

kafka分区策略疑惑

如果我在消息类producerRecord中定义了分区,或者设置了value,但我又配置了自定义的分区器,那此时会优先使用哪种分区策略呢?还有默认分区器会在什么时候用上呢,默认不是会粘性分区吗?

  • 写回答

1条回答 默认 最新

  • AllenGd 大数据领域优质创作者 2022-12-21 02:51
    关注
    消息经过序列化之后就需要确定它发往的分区,如果消息ProducerRecord中指定了partition字段,那么就不需要分区器的作用,因为partition代表的就是所要发往的分区号。如果消息ProducerRecord中没有指定partition字段,那么就需要依赖分区器,根据key这个字段来计算partition的值。分区器的作用就是为消息分配分区。
    Kafka中提供的默认分区器是org.apache.kafka.clients.producer.internals.DefaultPartitioner, 它实现了org.apache.kafka.clients.producer.Partitioner接口。
    除了使用Kafka提供的默认分区器进行分区分配,还可以使用自定义的分区器,只需同 DefaultPartitioner 一样实现Partitioner接口即可。默认分区器在 keynull 时不会选择非可用的分区,我们可以通过自定义的分区器打破这一限制。实现了自定义的分区器后需要通过配置参数 partition.class来显式指定这个分区器。示例如下:
    properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, DemoPartitioner.class.getName());
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    weixin_52225937 2022-12-21 13:18

    如果我消息指定了分区,但我又配置了自定义分区器,此时会报错吗?还是不会报错,然后优先选择消息中指定的分区?

    回复
    AllenGd 回复 weixin_52225937 2022-12-21 13:32

    在KafkaProducer中的partition方法注释中可以看到该方法就是用来计算partition,如果发过来的记录中含有partition信息,那么就返回partition信息,否则就调用配置的分区器去计算partition。

    回复
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 1月8日
  • 已采纳回答 12月31日
  • 创建了问题 12月20日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部