默认使用DefaultPartitioner这个类来作为分区策略。获取分区的方法源码:

    public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);int numPartitions = partitions.size();if (keyBytes == null) {int nextValue = this.nextValue(topic);List<PartitionInfo> availablePartitions = cluster.availablePartitionsForTopic(topic);if (availablePartitions.size() > 0) {int part = Utils.toPositive(nextValue) % availablePartitions.size();return ((PartitionInfo)availablePartitions.get(part)).partition();} else {return Utils.toPositive(nextValue) % numPartitions;}} else {return Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;}}

具体分两种情况:
1.当消息的key不为空时,直接使用murmur哈希算法从所有的分区中来选定一个分区
2.当消息的key为空时,在可用分区中按照轮询算法选定一个分区,其中调用的nextValue这个方法的源码如下:

    private int nextValue(String topic) {AtomicInteger counter = (AtomicInteger)this.topicCounterMap.get(topic);if (null == counter) {counter = new AtomicInteger(ThreadLocalRandom.current().nextInt());AtomicInteger currentCounter = (AtomicInteger)this.topicCounterMap.putIfAbsent(topic, counter);if (currentCounter != null) {counter = currentCounter;}}return counter.getAndIncrement();}

kafka:默认的分区策略相关推荐

  1. kafka生产者消息分区策略

    前言 众所周知,kafka的topic具有分区的概念,生产者写入数据到kafka之后,涉及到数据到底写到哪个分区? 常用的分区写入策略 生产者写入消息到topic,Kafka将依据不同的策略将数据分配 ...

  2. kafka 原理及分区策略

    一.简介 Apache Kafka 是一个分布式的流处理平台(分布式的基于发布/订阅模式的消息队列[Message Queue]). 流处理平台有以下3个特性: 可以让你发布和订阅流式的记录.这一方面 ...

  3. 大数据技术之kafka (第 3 章 Kafka 架构深入) 分区策略在分析

    如果不懂分区策略请看我之前的文章:https://blog.csdn.net/ywl470812087/article/details/105328015 默认的方式我们采用的是Range策略方式(按 ...

  4. Kafka生产者和消费者分区策略部分源码解析

    之前我在看其他的博客时,发现对于kafka consumer的RoundRobin的缺点分析中,有两种观点,一种认为缺点在于如果消费者组中消费者消费的主题不同,或者消费者线程数不同,那么会造成消费者消 ...

  5. kafka自定义生产者分区器、自定义消费者分区器

    目录 1 默认分区 1.1 键key的作用 1.2 键的分区 2 生产者自定义分区 2.1 使用场景分析 2.2 自定义分区器要实现Partitioner接口 2.3 生产者使用分区器 3 消费者自定 ...

  6. kafka系列之kafka生产者与分区(3)

    概要 当我们发送消息之前,先问几个问题:每条消息都是很关键且不能容忍丢失么?偶尔重复消息可以么?我们关注的是消息延迟还是写入消息的吞吐量? 举个例子,有一个信用卡交易处理系统,当交易发生时会发送一条消 ...

  7. kafka 消费者的消费策略以及再平衡

    一 kafka的消费策略 1 .一个 consumer group 中有多个 consumer 组成,一个 topic 有多个 partition 组成,现在的问题是, 到底由哪个 consumer ...

  8. Kafka 原理以及分区分配策略剖析

    欢迎关注方志朋的博客,回复"666"获面试宝典 ‍ ‍一.简介‍ ‍ Apache Kafka 是一个分布式的流处理平台(分布式的基于发布/订阅模式的消息队列[Message Qu ...

  9. kafka的分区策略(partition assignment strategy)

    概述 kafka的分区策略指的是producer端的 各个partition中的数据如何安排给consumer消费. Range(按范围) ange策略是对每个主题而言的,首先对同一个主题里面的分区按 ...

最新文章

  1. Koa源码分析(二) -- co的实现
  2. 商业级全局负载均衡器 zeus.ZXTM 实施方案
  3. 计算机基础知识与基本操作文档,计算机基础知识与基本操作——图文混排课件...
  4. java数组二分查找_java 13-1 数组高级二分查找
  5. webflux webclient DataBufferLimitException: Exceeded limit on max bytes to buffer
  6. java开发怎么打补丁_[Java教程]【NC】出补丁与打补丁
  7. Python-100 | 练习题 01 列表推导式
  8. shiro框架的学习
  9. 汉字的ascii码值范围_ASCII代码
  10. 招聘笔记:机器学习基础知识(19道题,有参考答案)
  11. larav实战教程 百度网盘
  12. 安全合规/法案--33--《APP违法违规收集使用个人信息自评估指南》原文及解读
  13. 爱思服务器shsh文件类型,爱思服务器查询shsh失败
  14. 修改bounds属性后的效果
  15. [转载]怎样做颠覆式创新?
  16. CPU 时间片轮转机制 (RR 调度)
  17. 技术思维VS管理思维
  18. 计算机陕西工业职业技术学院,2019年度陕西省中等职业学校教师省级培训计算机动漫与游戏制作开班典礼在我院举行...
  19. python网格交易法详解_什么是网格交易?一文教会你网格交易策略
  20. 【突然get到的】.BAK文件是备份文件

热门文章

  1. 【nlp学习】中文命名实体识别(待补充)
  2. 一个关于jboss Halting VM的情况处理
  3. Linux学习-49-列出进程调用或打开的文件信息(lsof命令)
  4. 本科、硕士和博士有何区别?
  5. CSS 文字下划线间距
  6. 7-238 整数转换为字符串7-242 母牛问题7-243 快速幂
  7. 服务器硬防和软防是什么意思?服务器软件防火墙
  8. OBJECTS IN SEMANTIC TOPOLOGY
  9. python语言编程:itertools.product的简介、使用方法(求笛卡尔积等)之详细攻略
  10. cxonev4验证用户_cxone软件配置