一、什么是 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://www.pswp.cn/pingmian/95649.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95649.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95649.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中创中间件适配HGDB

文章目录环境文档用途详细信息环境 系统平台&#xff1a;Microsoft Windows (64-bit) 10 版本&#xff1a;5.6.5 文档用途 本文章主要介绍中创中间件简单适配HGDB。 详细信息 一、数据源配置 1.数据库准备 &#xff08;1&#xff09;安装HGDB并创建一个名为myhgdb的数据…

服务器内存和普通计算机内存在技术方面有什么区别?

服务器内存和普通计算机内存在技术上的区别&#xff0c;主要体现在为满足不同工作场景和要求而采用的设计和特性上。下面这个表格汇总了它们的主要技术差异&#xff0c;方便你快速了解&#xff1a; ​技术特性​​服务器内存​​普通计算机内存​​错误校验 (ECC)​​支持ECC(…

哪款AI生成PPT工具对职场新人最友好?操作门槛最低的是哪个?

一句话生成专业PPT&#xff0c;职场新人也能轻松做出高质量演示文稿现代职场节奏快&#xff0c;PPT制作已成为必备技能。然而&#xff0c;职场新人常面临两大挑战&#xff1a;缺乏设计经验&#xff0c;以及需要在有限时间内完成高质量演示。传统PPT制作耗时费力&#xff0c;需梳…

1.注解的力量:Spring Boot如何用注解重构IoC容器

文章目录1.1 IoC容器&#xff1a;Spring的智能管家1.2 注解驱动&#xff1a;给管家下指令1.2.1 SpringBootApplication&#xff1a;总管家的聘书1.2.2 组件注解&#xff1a;员工的身份标识1.2.3 Autowired&#xff1a;依赖注入的三种方式1.2.4 Bean注解&#xff1a;手动招聘特殊…

【算法】92.翻转链表Ⅱ--通俗讲解

一、题目是啥?一句话说清 给你一个链表和两个整数 left 和 right,反转从第 left 个节点到第 right 个节点的子链表,并返回反转后的链表。其他部分保持不变。 示例: 输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5](反转了从第2到第4个节点) 二、解题…

Nature子刊:新发现!深层脑网络中发现强迫症症状的神经生物标志物

强迫症&#xff08;OCD&#xff09;是一种令人困扰的精神疾病&#xff0c;患者常常被强迫思维和强迫行为所困扰。例如&#xff0c;有些人会反复洗手&#xff0c;无法控制自己的清洁冲动&#xff1b;还有些人会不断检查门窗是否关好&#xff0c;即便他们已经确认过无数次。这些行…

Onlyoffice集成与AI交互操作指引(Iframe版)

Onlyoffice集成与AI交互操作指引&#xff08;Iframe版&#xff09; 本文档系统介绍了软件系统集成OnlyOffice实现在线编辑与AI辅助功能的方案。主要内容包括&#xff1a;后端需提供文档配置信息并实现Callback接口以处理文档保存&#xff1b;前端通过Vue集成编辑器&#xff0c…

TypeScript 中 keyof、typeof 和 instanceof

在 TypeScript 开发中&#xff0c;keyof、typeof 和 instanceof 是核心的类型操作符和操作符&#xff0c;专门用于提升类型安全、代码可读性和维护性。1. keyof 操作符定义和用途&#xff1a;keyof 是一个类型操作符&#xff0c;用于获取对象类型的所有键&#xff08;属性名&am…

分布式专题——1.1 Redis单机、主从、哨兵、集群部署

1 Redis 部署 下面演示在 Linux 环境下部署 Redis7。 1.1 单机部署 1.1.1 检查安装 gcc 环境Redis 是由 C 语言编写的&#xff0c;它的运行需要 C 环境&#xff0c;因此我们需要先安装 gcc&#xff1b; # 关闭防⽕墙 systemctl stop firewalld.service # 查看防火墙状态 firewa…

2025年渗透测试面试题总结-54(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。1、SQL注入的防护方法有哪些&#xff1f; 2、永恒之蓝的漏洞原理是什么&#xff1f;怎么做到的&#xff1f; 3、命令…

安卓学习 之 按钮点击事件

今天学习安卓应用中的按钮点击事件&#xff1a;总结下来在安卓应用中的Button注册点击事件的方法主要是以下4种方法&#xff0c;稍后会逐个介绍&#xff1a; 第一种方法&#xff1a;自定义内部类的方法 第二种方法&#xff1a;匿名内部类的方法 第三种方法&#xff1a;当前Acti…

鸿蒙NEXT主题设置指南:应用级与页面级主题定制详解

在鸿蒙应用开发中&#xff0c;灵活的主题设置能力是实现个性化用户体验的关键技术&#xff0c;HarmonyOS NEXT提供了强大而灵活的主题设置功能&#xff0c;让开发者能够轻松实现应用级和页面级的主题定制。在当今追求个性化的时代&#xff0c;用户希望应用能够根据自己的喜好呈…

全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元,2025-2031年复合增长率达94.3%,由Infineon和Navitas驱动

全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元&#xff0c;2025-2031年复合增长率达94.3%&#xff0c;由Infineon和Navitas驱动汽车氮化镓技术正从一个有前景的细分市场加速进入主流电力电子领域。根据QYResearch&#xff08;恒州博智&#xff09;的《全球汽车GaN技术…

xftp断网后提示错误如何继续下载?

问题&#xff1a;xftp断网后提示错误如何继续下载&#xff1f;解决方法&#xff1a;断网后&#xff0c;先连接上网&#xff0c;然后继续双击右侧的那两个要传输的文件&#xff0c;然后会弹出一个覆盖还是继续下载&#xff08;如下图&#xff09;的选择框&#xff0c;选择继续下…

Day22_【机器学习—集成学习(4)—Boosting—GBDT算法】

提升树 &#xff08;Boosting Decision Tree &#xff09;每一个弱学习器通过拟合残差来构建强学习器梯度提升树 &#xff08;Gradient Boosting Decision Tree&#xff09;每一个弱学习器通过拟合负梯度来构建强学习器一、提升树残差数学公式为&#xff1a;残差真实值−预测值…

前缀和、子矩阵的和;差分、差分矩阵

一、前缀和数组要稍微注意前缀和数组从1开始#include <iostream>using namespace std;const int N 100010;int n, m; int a[N], s[N];int main() {scanf("%d%d", &n, &m);for (int i 1; i < n; i ) scanf("%d", &a[i]);for (int i…

启用BBR拥塞控制算法

目录 &#x1f4cb; 先决条件 &#x1f527; 启用步骤 &#x1f4dd; 额外检查与说明 ⚠️ 注意事项 BBR&#xff08;Bottleneck Bandwidth and Round-trip time&#xff09;是谷歌开发的一种TCP拥塞控制算法&#xff0c;它能有效提升网络传输速度和性能&#xff0c;尤其在…

Python:AI开发第一语言的全面剖析

文章目录引言1. Python的历史与AI开发的契合1.1 Python的诞生与设计哲学1.2 Python与AI发展的历史交汇2. 语言特性如何支持AI开发2.1 动态类型与交互式编程2.2 简洁优雅的语法2.3 高级数据结构的原生支持2.4 函数式编程特性2.5 强大的元编程能力3. 丰富的AI生态系统和库支持3.1…

Nikto 漏洞扫描工具使用指南

目录 ✨ 核心功能一览 &#x1f680; 基本使用方法 1. 扫描单个目标 2. 指定端口扫描 3. 扫描 HTTPS 目标 使用 -ssl 参数主要有两个核心原因 ⚙️ 高级使用技巧 1. 使用代理扫描 2. 保存扫描结果 3. 使用特定插件 4.交互命令 ✨ 核心功能一览 Nikto 是一款开源的 W…

FunASR的Java实现Paraformer实时语音识别 | 一款无需联网的本地实时字幕软件

0. 开发背景 我们在看直播时&#xff0c;没有视频字幕&#xff0c;可能看惯了视频字幕&#xff0c;来到直播中缺少字幕会感觉不习惯&#xff0c;特别是对于听力障碍的人群&#xff0c;只能依赖于字幕&#xff0c;那么这个软件可以解决直播&#xff0c;在线会议等场景中无字幕的…