当前位置: 首页 > news >正文

kafka Partition(分区)详解

一、什么是 Partition

  • Partition(分区) 是 Kafka Topic(主题) 的最小并行单位。

  • 一个 Topic 可以包含多个 Partition,每个 Partition 底层对应一个有序、不可变的消息队列,消息只会顺序追加。

  • Partition 内部消息都有一个唯一的偏移量(offset),消费者依靠 offset 来消费。

👉 关系:

Topic = Partition1 + Partition2 + ... + PartitionN


二、分区的作用

  1. 提高吞吐量(并行度)

    • 单个 Partition 只能由一个 Consumer 实例顺序消费。

    • 增加 Partition 数量,可以让更多消费者并行消费,提高消费能力。

    • 同样,生产者发送时可以并行写入多个 Partition,提升写入吞吐量。

  2. 数据存储与扩展性

    • Partition 分布在不同的 Broker 上,数据可以水平扩展,突破单机存储瓶颈。

  3. 容错与副本机制的基础

    • 每个 Partition 都有 Leader 和 Follower 副本。

    • Leader 负责读写,Follower 同步 Leader 数据,用于故障切换。


三、分区的工作机制

  1. 生产者写入

    • 生产者写消息时,需要决定写入哪个 Partition。

    • Kafka 提供三种分区策略:

      • 轮询(Round-robin):平均分配到各个 Partition。

      • 按 key 哈希(Key Hash):相同的 key 会被分配到同一个 Partition(保证消息顺序)。

      • 自定义分区器:可以自己实现 Partitioner 接口来决定分区逻辑。

  2. 消费者消费

    • 一个消费者组中的每个 Partition 同一时刻只能被一个消费者消费。

    • Kafka 会自动做负载均衡,把 Partition 分配给组内消费者。

  3. 副本机制

    • 每个 Partition 有一个 Leader 和若干 Follower。

    • Producer 和 Consumer 只和 Leader 交互。

    • Follower 定期从 Leader 同步数据,保证数据可靠性。


四、分区数的选择

分区数是 Topic 创建时的关键参数,影响系统性能和架构:

  • 分区数过少

    • 无法充分利用集群并行能力,吞吐量有限。

  • 分区数过多

    • 元数据管理开销变大(Zookeeper / KRaft 需要维护更多状态)。

    • Rebalance 时间变长。

    • 消费者切换代价增加。

👉 一般经验:

  • 分区数 = 生产者吞吐量 / 单分区最大处理能力。

  • 或者分区数 = 消费者并行度。

  • Kafka 官方推荐:不要轻易创建上千分区,根据硬件能力做评估。


五、如何指定 Partition

生产者写入消息时,可以指定 Partition:

ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", key, value);

规则:

  • 如果指定了 partition 参数,则直接写入该 Partition。

  • 如果指定了 key(但没有指定 partition),Kafka 根据 key 的哈希值选择 Partition。

  • 如果都没指定,则轮询选择 Partition。


六、分区与顺序性

  • Kafka 只保证 同一个 Partition 内的消息有序

  • 不同 Partition 之间的消息是无序的。

  • 如果业务要求消息严格有序,则必须让相关消息写入 同一个 Partition(通常通过 key 实现)。


七、实战:管理 Partition

1. 创建 Topic 时指定分区数

bin/kafka-topics.sh --create \ --bootstrap-server localhost:9092 \ --topic test-topic \ --partitions 4 \ --replication-factor 2

2. 查看 Topic 分区信息

bin/kafka-topics.sh --describe \ --bootstrap-server localhost:9092 \ --topic test-topic

输出示例:

Topic: test-topic PartitionCount: 4 ReplicationFactor: 2 Partition: 0 Leader: 1 Replicas: 1,2 Isr: 1,2 Partition: 1 Leader: 2 Replicas: 2,3 Isr: 2,3 Partition: 2 Leader: 3 Replicas: 3,1 Isr: 3,1 Partition: 3 Leader: 1 Replicas: 1,2 Isr: 1,2

3. 增加分区数

bin/kafka-topics.sh --alter \ --bootstrap-server localhost:9092 \ --topic test-topic \ --partitions 6

⚠️ 注意:增加分区数不会自动对现有消息做迁移,只影响新消息。


八、总结

  • Partition 是 Kafka 的核心并行单元

  • 作用:提升吞吐量、扩展存储、实现高可用。

  • 分区内有序,跨分区无序

  • 分区数要合理规划,过少浪费性能,过多增加负担。

  • 生产者可通过 key 控制分区,保证某些业务的顺序性。


文章转载自:

http://OIwYHQRS.dtpqw.cn
http://DXUpTLV4.dtpqw.cn
http://uypQXWxm.dtpqw.cn
http://x34qfm9C.dtpqw.cn
http://O2k5Atwq.dtpqw.cn
http://UAX3thXH.dtpqw.cn
http://BySwblrE.dtpqw.cn
http://lz5gslyr.dtpqw.cn
http://mRuBgczs.dtpqw.cn
http://Ze4bmi5Z.dtpqw.cn
http://wFLZcMcJ.dtpqw.cn
http://Ce8vV9YE.dtpqw.cn
http://e6tVYAKN.dtpqw.cn
http://UV6BVDfx.dtpqw.cn
http://9P43i5hB.dtpqw.cn
http://uUlz4Mnb.dtpqw.cn
http://wSaElrIY.dtpqw.cn
http://WMWz6IOw.dtpqw.cn
http://sOxPipOC.dtpqw.cn
http://r65uqMio.dtpqw.cn
http://0a0GH9Jq.dtpqw.cn
http://W55TVTkg.dtpqw.cn
http://EfIENAYr.dtpqw.cn
http://V6vTjxLg.dtpqw.cn
http://h7okFMTW.dtpqw.cn
http://kViPUdGQ.dtpqw.cn
http://s4ykK7tJ.dtpqw.cn
http://XjYcqPhE.dtpqw.cn
http://V8YnaWqm.dtpqw.cn
http://mng9BZ1d.dtpqw.cn
http://www.dtcms.com/a/365377.html

相关文章:

  • 线性代数基础 | 基底 / 矩阵 / 行列式 / 秩 / 线性方程组
  • UniApp 混合开发:Plus API 从基础到7大核心场景实战的完整指南
  • 老年综合实训室建设方案:产教融合新实践助力养老人才供需精准对接
  • pytorch初级
  • 【FPGA】DDS信号发生器
  • leetcode210.课程表II
  • 蓝光三维扫描技术赋能内衣胸垫设计:从精准制造到个性化体验的革新之旅
  • 【OC】属性关键字
  • 3027. 人员站位的方案数 II
  • 前端自动化打包服务器无法安装高版本 Node.js v22 问题解决
  • 高效文本处理:cut、sort、uniq 和 tr 命令详解与实战
  • 巨头撤退,玩家内卷!2025,IoT平台的生死劫与重生路
  • raspberry Pi 4B(树莓派4B)开启VNC服务 主机用VNC连接
  • Radiant Photo 2.1.0.756 +扩展插件 图像AI增强修饰
  • 时间感知认知诊断模型:原理与实施步骤
  • Vite 环境变量与全局变量详解
  • Java 技术支撑 AI 系统落地:从模型部署到安全合规的企业级解决方案(三)
  • 什么是好的系统设计
  • 虚拟机详细图文教程系列14、Linux虚拟机Centos8系统下载安装Python-Pycharm
  • 【QT随笔】巧用事件过滤器(installEventFilter 和 eventFilter 的组合)之 QComboBox 应用
  • 标准化与定制化的平衡艺术:制造企业如何通过灵活配置释放系统价值
  • 嵌入式第四十五天(51单片机相关)
  • TDD测试驱动开发+Python案例解析
  • SkyWalking 支持的告警通知方式(Alarm Hooks)类型
  • 吱吱企业通讯软件以安全为核心,构建高效沟通与协作一体化平台
  • 驱动开发系列69 - GLSL编译器实现 - 符号表的定义
  • 【SQL Server 2022】保姆级SQL Server 详细图文下载安装教程
  • Unity学习----【进阶】Addressables(一)--概述与简单的使用
  • 涉私数据安全与可控匿名化利用机制研究(上)
  • 代码随想录算法训练营第四十三天|LeetCode300. 最长递增子序列,LeetCode674. 最长连续递增序列,LeetCode718. 最长重复子数组