Kafka 分区管理

 分区是主题的子集,每个主题可以被分割成多个分区,一个分区有一个主副本(Leader)及一个或多个从(Follower)副本。分区允许将数据分布在多个broker上,这样可以提高数据的处理能力、并行性及可靠性。

每个分区在物理上是一个有序、不可变的消息序列,存储为一系列连续的、有序的日志文件。

1 分区管理

1.1 优选副本的选举

只有leader副本对外提供读写服务,而follower副本只负责在内部进行消息同步。忽略不同分区负载情况不同这一因素,broker上leader副本个数的多少决定了这个节点的负载高低。

创建主题时,该主题的分区及副本会尽可能均匀分布在集群的各个broker节点,leader副本也会均匀分布。随着时间推移,假如某个leader副本所在的broker宕机了,那么就会在集群的其他broker中重新选举leader,当该宕机的broker重新上线加入集群时,其只能成为一个follower。这样一来,leader的副本就变得不均衡。

1.1.1 优先副本

图 主题par3 的分区副本分配详情

分区的AR(Assigned Replicas)集合是在新区被创建时,Kafka根据配置来确定该分区的所有副本,并将这些副本组成AR集合。

上图中,分区0的AR集合为 [1,0,2],分区2的AR集合为[0,2,1]。

优选副本是指AR集合中的第一个副本。例如分区0的优选副本为1。AR集合在broker发生故障或重新上线时是不会改变的。

理想情况下,优选副本就是该分区的leader副本,而优选副本选举是指通过一定的方式促使优选副本选举为leader副本。

1.1.2 优选副本自动平衡

将broker端的参数auto.leader.rebalance.enable设置为true(默认值)。Kafka会启动一个定时任务,来自动执行优选副本选举动作。

生产环境建议关闭这个,因为其自动执行优选副本选举动作的时间无法自主掌控,如果在业务高峰期执行,那么会造成业务阻塞、超时等。

1.1.3 手动执行优选副本选举

bin/kafka-preferred-replica-election.sh --zookeeper localhost:2181

该脚本还提供了path-to-json-file 参数来小批量地对部分分区执行优选副本的选择操作。以下为该文件的示范内容。

{
    "partitions": [
         {
             "partition": 0,
              "topic": "par3"
         },
         {
             "partition": 1,
              "topic": "par3"
         }
     ]
}
bin/kafka-preferred-replica-election.sh --zookeeper localhost:2181 --path-to-json-file par3.json

1.2 分区重分配

1)如果某分区是单副本,且所在节点突然宕机下线,那么这个分区就变得不可用,在节点恢复前,相应的数据就处于丢失状态。

2)某个节点有多个分区副本,如果该节点宕机,Kafka并不会将这些失效的分区副本自动迁移到集群中剩余的可用broker节点上。

3)当集群新增broker节点时,只有新建的主题分区才有可能被分配到这个节点上,之前的主题分区不会自动分配新增的节点。

4)当要对集群的一个节点进行有计划的下线时,为了保证分区及副本的合理分配,我们希望通过某种方式将该节点的分区副本迁移到其他的可用节点上。

为了解决这些问题,需要进行分区重分配。

1.2.1 分区副本重分配步骤

需求,主题par2 副本所在的一个broker(id为1)要下架,需要将其上的分区副本迁移出去。

图 主题par3 的分区副本分配详情

1)创建一个包含主题清单的JSON文件。

文件内容为要进行分区重分配的主题清单,文件名假定为par2-reassign.json,内容如下:

{
    "topics": [
         {
              "topic": "par2"
         }
     ]
}

2)根据上面的JSON文件和指定要分配的broker节点列表。生成一份重分配方案。 

bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --generate --topics-to-move-json-file par2-reassign.json --broker-list 0,2

图 生成的重分配方案

其中,Current partition replica assignment 为当前的分区副本分配方案。而Proposed partition reassignment configuration 为生成的新分配方案。

3)复制上面新分配方案,保存为new-par2.json,然后执行重分配脚本。

bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --execute --reassignment-json-file new-par2.json

图 执行重分配脚本

最后查看par2的分区副本分配详情

图 重分配后par2 的分区副本分配详情

1.2.2 修改副本因子

创建主题后,可以修改分区的个数,同样也可修改副本因子(副本数)。

上面分区副本重分配的第三步,修改new-par2.json文件来修改副本因子,然后执行重分配脚本。命名为par2-2.json。

{
"version": 1,
"partitions": [
 {
    "topic": "par2",
    "partition": 1,
    "replicas": [2],
    "log_dirs": ["any"]
 },
 {
    "topic": "par2",
    "partition": 0,
    "replicas": [0, 2],
    "log_dirs": ["any", "any"]
}]
}

图 修改副本因子后的par2 副本分配详情

2 分区数与吞吐性能

对生产者而言,每个分区的数据写入是完全可以并行化的;对消费者而言,Kafka只允许单个分区中的消息被一个消费者线程消费,一个消费组的消费并行度完全依赖于所消费的分区数。

如此看来,一个主题的分区数越多,吞吐性能越好。但实际并非如此。一旦分区数超过某个阈值,吞吐性能不升反降。

2.1 性能测试工具

Kafka 本身提供了用于生产者性能测试的kafka-producer-perf.test.sh和用于消费者性能测试的kafka-consumer-perf-test.sh。

2.1.1 生产者性能测试

bin/kafka-producer-perf-test.sh --topic par3 --num-records 100000 --record-size 1024 --throughput -1 --producer-props bootstrap.servers=localhost:9092 acks=1

向主题par3 发送10万条大小为1024B的消息,生产者对应的acks为1(分区中至少有1个副本收到这条消息,才算成功写入).

图 向生产者发送测试消息

2.1.2 消费者性能测试

bin/kafka-consumer-perf-test.sh --topic par3 --messages 100000 --broker-list localhost:9092

消费主题par3 的10万条消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953185.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xcrun: error: invalid active developer path 解决

在拉取 github 代码时,提示如下报错: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 原因是:这是由于 Xcode command line t…

2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)

大家好呀,从发布赛题一直到现在,总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…

Python 二次元初音未来桌宠

标题 相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路&…

vue3学习日记5 - 项目起步

最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录 视频网址: Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记: vue3学习日记1 - 环境搭建-CSDN博…

【Linux系统】—— vim 的使用

【Linux系统】—— vim 的使用 1 vim 的基本概念2 vim 的多模式3 命令模式下的命令集3.1 进入/退出其他模式3.2 光标移动命令集3.3 复制/剪切/粘贴/删除命令集3.4 撤销命令集3.5 查找命令集3.6 替换命令集3.7 进入与退出替换模式 4 批量化编译5 底行模式6 vim 小技巧7 vim简单配…

JAVA实战开源项目:课程智能组卷系统(Vue+SpringBoot) 附源码

本文项目编号 T 009 ,文末自助获取源码 \color{red}{T009,文末自助获取源码} T009,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 老…

了解 Ansys Mechanical 中的网格方法:综合指南

网格是每个有限元分析 (FEA) 仿真的支柱。它将几何图形划分为离散单元,使 Ansys Mechanical 能够近似模型在各种条件下的行为。结构良好的网格可确保准确、可靠和计算高效的结果,而结构不佳的网格可能会导致错误、收敛问题或不必要…

【Linux】深刻理解软硬链接

一.软硬链接操作 1.软连接 touch 创建一个文件file.txt ,对该文件创建对应的软链接改怎么做呢? ln -s file.txt file-soft.link .给对应文件创建软连接。 软连接本质就是一个独立的文件,因为我们对应的软连接有独立的inode,他…

施耐德M241与MR30-FBS-MT 在Machine Expert V2.0的组态过程

一、系统概述 MR30分布式IO是一个高度灵活的可扩展分布式 I/O 系统,MR30-FBC-MT用于通过 Modbus TCP 总线将过程信号连接到上一级控制器。 具有以下特点: 结构紧凑 PUSH IN端子,易于安装,布线简单 灵活性高:开关量模…

大数据技术在服饰行业的应用

大数据技术的快速发展为各行各业带来了深刻的变革,本文将详细探讨大数据技术的发展脉络,大数据技术推动服饰企业的数字化转型,旨在为相关领域的研究和实践提供参考。 什么是大数据大数据技术的发展历程大数据在服饰行业的应用总结 1&#xff…

Vue2+OpenLayers添加/删除点、点击事件功能实现(提供Gitee源码)

目录 一、案例截图 二、安装OpenLayers库 三、安装Element-UI 四、代码实现 4.1、添加一个点 4.2、删除所有点 4.3、根据经纬度删除点 4.4、给点添加点击事件 4.5、完整代码 五、Gitee源码 一、案例截图 可以新增/删除标记点,点击标记点可以获取到当前标…

Windows 10 ARM工控主板连接I2S音频芯片

在Windows工控主板应用中,音频功能是一项基本的需求,USB声卡在x86/x64 Windows系统上就可直接免驱使用,但这些USB声卡通常不提供ARM上的Windows系统驱动。本文将介绍如何利用安装在ARM上的Windows工控主板——ESM8400的I2S接口、连接WM8960音…

【Rust】错误处理机制

目录 思维导图 引言 一、错误处理的重要性 1.1 软件中的错误普遍存在 1.2 编译时错误处理要求 二、错误的分类 2.1 可恢复错误(Recoverable Errors) 2.2 不可恢复错误(Unrecoverable Errors) 三、Rust 的错误处理机制 3…

提升租赁效率的租赁小程序全解析

内容概要 在如今快节奏的生活中,租赁小程序俨然成为了提升租赁效率的一把利器。无论是个人还是企业,都会因其便捷的功能而受益。简单来说,租赁小程序能让繁琐的租赁流程变得轻松、高效。在这里,我们将带您畅游租赁小程序的海洋&a…

SSM商城设计与实现

摘 要 本文的主要工作是对基于B/S模式及JSP技术的基于智能推荐的b2c销售网站进行了研究与设计。本文首先介绍了基于智能推荐的b2c销售网站的背景,分析比较了国内外相关基于智能推荐的b2c销售网站的运行模式、系统特点与开发技术。然后分析了目前热点的各种Web应用开…

drawDB docker部属

docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/

CentOS7下Hadoop集群分布式安装详细图文教程

1、集群规划 主机 角色 DSS20 NameNode DataNode ResourceManager NodeManager DSS21 SecondaryNameNode NameNode NodeManager DSS22 DataNode NodeManager 1.1、环境准备 1.1.1 关闭防火墙 #查看防火墙状态 firewall-cmd --state #停止…

计算机网络——网络层-IPV4相关技术

一、网络地址转换NAT • 网络地址转换 NAT 方法于1994年提出。 • 需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IPG。 • 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将…

postgresql|数据库|利用sqlparse和psycopg2库批量按顺序执行SQL语句(psyconpg2新优化版本)

一、 旧版批量执行SQL脚本的python文件缺点,优点,以及更新内容 书接上回,postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)_python sql psycopg2-CSDN博客 这个python脚本写了很久了,最近开始…

Node.js——http 模块(二)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…