首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何实现Kafka的Partition重分配

如何实现Kafka的Partition重分配

作者头像
Fayson
发布于 2018-09-29 02:41:14
发布于 2018-09-29 02:41:14
7.3K00
代码可运行
举报
文章被收录于专栏:Hadoop实操Hadoop实操
运行总次数:0
代码可运行

1.文档编写目的


Kafka集群资源使用已超出系统配置的资源时,需要通过扩容Kafka节点来实现Kafka集群的资源扩容。新增的Kafka节点,只有在创建新的Topic才会参与工作,对于之前其它Broker节点上的分区是不会自动均衡的,不能达到负载的效果。这时需要在Broker之间重新分配分区,本篇文章Fayson主要介绍如何重新分配Topic的partition。

  • 内容概述

1.环境准备及说明

2.重新分配Partition及验证

3.总结

  • 测试环境

1.CM和CDH版本为5.15

2.Kafka版本为0.10.2+kafka2.2.0

2.环境准备及说明


1.现集群Kafka节点数量为3个

2.在Kafka集群中创建一个测试的Topic,命令如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kafka-topics --create --zookeeper cdh01.fayson.com:2181 --replication-factor 2 --partitions 4 --topic test_partition

(可左右滑动)

该Topic为2个副本共4个Partition,通过Kafka命令查看该Topic的详细信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kafka-topics --zookeeper cdh01.fayson.com:2181 --describe --topic test_partition

(可左右滑动)

可以看到test_partition的4个Partition分布在三个Broker上。

3.向测试test_partition生产部分测试数据

测试脚本可以在Fayson的Github上下载。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://github.com/fayson/cdhproject/tree/master/kafkademo/0283-kafka-shell

(可左右滑动)

4.为Kafka集群扩容一个新的Broker(通过CM添加一个Kafka角色并启动即可)

在Kafka的配置界面搜索“broker.id”,查看Kafka所有节点的BrokerID,在后面的Partition重新分配时会用到

5.使用Kafka命令查看Topic的详细描述,可以看到Kafka的Partition仍然分配在之前的三个Broker上并未因为新增Broker而进行自动均衡

6.创建一个新的Topic,查看Partition的分布情况

可以看到新创建的Topic,相应的Partition会分布在新的Broker节点上,对于之前的Topic的Partition不会自动均衡到新的节点上,因此之前Topic的压力还在旧的节点上,接下来Fayson会说明如何使用Kafka命令重新分配Kafka的Partition。

3.重新分配Partition


以我们上面创建的test_partition为例来说明,如何重新分配该Topic的Partition。

1.在重新分配Partition前登录新扩容的Broker节点查看数据目录

可以看到没有关于test_partition Topic的分区目录。

2.创建一个待重新分配的Topic的JSON文件,内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@cdh01 kafka_partition_reassignment]# vim topics-to-move.json
{
  "topics": [{
     "topic": "test_partition"
   }],
   "version": 1
}

(可左右滑动)

这里也可以同时为多个Topic进行重新分配,在json文件中添加多个topic即可。

3.使用kafka-reassign-partitions命令生成一个分配计划,下面的命令行中broker-list参数即对应上面的BrokerID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kafka-reassign-partitions --zookeeper cdh01.fayson.com:2181 \
    --topics-to-move-json-file topics-to-move.json \
    --broker-list "110,111,109,190" \
    --generate

(可左右滑动)

可以看到在命令行生成的Partition重分配的计划(这里还没有真正的去分配,只是生成了分配计划),在截图中也很清楚的标出了分配前和分配后的结果,注意这里我们需要使用到分配计划生成的结果(即重新分配后Partition的JSON字符串)。

4.将分配计划的第二个JSON保存至reassignment.json文件中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@cdh01 kafka_partition_reassignment]# vim reassignment.json 
{"version":1,"partitions":[{"topic":"test_partition","partition":1,"replicas":[109,111]},{"topic":"test_partition","partiti
on":0,"replicas":[190,110]},{"topic":"test_partition","partition":3,"replicas":[111,109]},{"topic":"test_partition","partit
ion":2,"replicas":[110,190]}]}

(可左右滑动)

5.运行kafka-reassign-partition命令根据上述执行计划生成的结果进行分配,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kafka-reassign-partitions \
    --zookeeper cdh01.fayson.com:2181 \
    --reassignment-json-file reassignment.json \
    --execute

(可左右滑动)

6.对于数据量比较大的Topic运行重新分配会比较耗时,这时可以通过如下命令查看Topic的重分配情况,命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kafka-reassign-partitions \
    --zookeeper cdh01.fayson.com:2181 \
    --reassignment-json-file reassignment.json \
    --execute

(可左右滑动)

通过该命令可以看到每个Partition的分配进度。

4.验证Partition分配情况


可以通过kafka-topics命令查看指定Topic的描述信息,操作如下:

1.在命令行执行如下命令,查看Topic的描述信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kafka-topics --zookeeper cdh01.fayson.com:2181 --describe --topic test_partition

(可左右滑动)

上图可以看到Topic的Partition0和2已经重新分配到ID为190的Broker节点上了,该节点为新扩容节点。

2.登录该节点查看Kafka的数据目录

可以看到新增的Broker节点上,跟分配计划一致,将test_partition0和2的数据移动至该节点(包括Partition的数据)。

5.总结


1.在进行Kafka集群扩容后,需要考虑为原有的Topic分区进行重新分配,否则新增节点是不会负载扩容前已存在的Topic。

2.重新分配的命令中broker-list参数可以指定多个BrokerID(注意这里是ID而不是Broker的ip或则hostname)。在指定broker-list时,如果不想partition分配到某个Broker时则list中不要有对应节点的BrokerID即可。

3.kafka-reassign-partitions命令是针对Partition进行重新分配,而不能将整个Topic的数据重新均衡到所有的Partition中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
❤️3万字长文呕心沥血教你彻底搞懂数据迁移原理❤️(附配套教学视频)
(后续的视频会在 公众号[全套视频首发]、CSDN、B站等各平台同名号[石臻臻的杂货铺]上上传 )
石臻臻的杂货铺[同名公众号]
2021/08/03
5130
❤️3万字长文呕心沥血教你彻底搞懂数据迁移原理❤️(附配套教学视频)
kafka数据迁移实践
本文重点介绍 kafka 的两类常见数据迁移方式:1、broker 内部不同数据盘之间的分区数据迁移;2、不同 broker 之间的分区数据迁移。
mikealzhou
2018/01/19
5.9K11
kafka数据迁移实践
0748-5.14.4-Kafka的扩容和缩容
在Kafka集群资源使用已超出系统配置的资源时,或者有大量资源闲置造成资源浪费的时候,需要分别通过扩容Kafka和缩容Kafka来进行调整。本篇文章Fayson主要介绍如何进行Kafka的扩容和缩容,以及变更后的Kafka集群如何进行负载均衡的操作。
Fayson
2020/02/24
1.9K0
0748-5.14.4-Kafka的扩容和缩容
【kafka实战】分区重分配可能出现的问题和排查问题思路(生产环境实战,干货!!!非常干!!!建议收藏)
先定义一下名词: 迁移前的Broker: OriginBroker 、 迁移后的副本 TargetBroker
石臻臻的杂货铺[同名公众号]
2021/07/14
7270
Kafka-案例-异常分区(Partion)修复
一般情况下,我们的分区很少会出现异常的情况,但是在Broker异常下线,尤其是一次性下线多个节点的情况就会出现。我这里为了演示,所以把上个小节5节点Kafka直接下线2个节点,就可以模拟这个情况。
运维小路
2025/06/09
860
Kafka-案例-异常分区(Partion)修复
【kafka实战】分区重分配可能出现的问题和排查问题思路(生产环境实战,附视频)
先定义一下名词: 迁移前的Broker: OriginBroker 、 迁移后的副本 TargetBroker
石臻臻的杂货铺[同名公众号]
2021/12/31
5680
【kafka实战】分区重分配可能出现的问题和排查问题思路(生产环境实战,附视频)
进击消息中间件系列(八):Kafka 主题与分区
主题和分区是Kafka的两个核心概念,主题作为消息的归类,可以再细分为一个或者多个分区,分区可以看作是对消息的二次归类。分区的划分不仅可以为Kafka提供了可伸缩性,水平扩展能力,还可以通过副本机制来为Kafka提供数据冗余以提高数据的可靠性,为了做到均匀分布,通常partition的数量通常是BrokerServer数量的整数倍。
民工哥
2023/08/22
6581
进击消息中间件系列(八):Kafka 主题与分区
kafka集群扩容后的数据均衡
生产环境的kafka集群扩容,是一个比较常见的需求和操作。然而kafka在新增节点后并不会像elasticsearch那样感知到新节点加入后,自动将数据reblance到整个新集群中,因此这个过程需要我们手动分配。
一条老狗
2019/12/26
5.3K0
kafka集群扩容后的数据均衡
Kafka 常用运维脚本
集群管理 (1)启动 broker $ bin/kafka-server-start.sh daemon <path>/server.properties (2)关闭 broker $ bin/kafka-server-stop.sh topic 管理 kafka-topics.sh 脚本 # 创建主题 $ bin/kafka-topics.sh --create --zookeeper localhost:2181 --partitions 64 --replication-factor 3 --topi
张乘辉
2020/08/27
1.4K0
Kafka集群平滑扩容及Leader均衡【实战笔记】
当集群中新增加节点时,需要对已有的topic的副本进行迁移,以平衡流量。以公司集群扩增两个节点broker 4和broker 5为例说明操作过程。
瓜农老梁
2019/08/30
2.8K2
必会 | 教你如何重新分布kafka分区、增加分区副本数
已知,Kafka 集群中有两个 kafka broker ,id 分别为 200、201 。
create17
2020/12/01
12.1K1
必会 | 教你如何重新分布kafka分区、增加分区副本数
【kafka运维】你真的懂数据迁移吗?(附教学视频)
如果你不想看文章,可以直接看配套的视频; (后续的视频会在 公众号、CSDN、B站等各平台同名号石臻臻的杂货铺上上传 )
石臻臻的杂货铺[同名公众号]
2021/07/26
7800
【kafka运维】你真的懂数据迁移吗?(附教学视频)
Kafka集群常用命令
kafka常用命令 以下是kafka常用命令行总结: 1、kafka服务启动 ./kafka-server-start.sh -daemon ../config/server.properties 2、创建topic ./kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 1 --partitions 1 --topic test 2.1、为topic增加副本 ./kafka-reassign-partition
ZONGLYN
2019/08/08
1.3K0
进击消息中间件系列(三):Kafka 中 shell 命令使用
注:partitions指定topic分区数,replication-factor指定topic每个分区的副本数。
民工哥
2023/08/22
5900
进击消息中间件系列(三):Kafka 中 shell 命令使用
比迅雷还猛的kakfa数据迁移,秒传小电影!(附教学视频)
在进行分区副本重分配之前,最好是用下面方式获取一个合理的分配文件; 编写move-json-file.json文件; 这个文件就是告知想对哪些Topic进行重新分配的计算
石臻臻的杂货铺[同名公众号]
2021/07/28
7120
比迅雷还猛的kakfa数据迁移,秒传小电影!(附教学视频)
Kafka集群扩容「建议收藏」
Kafka集群的服务发现是有zk实现的,因此想kafka集群添加新的broker就非常容易。我们只需要为新的broker设置一个唯一的broker.id, 然后启动新增的kafka就行。Kafka集群会自动发现新增的broker并同步原数据,包括当前集群有哪些topics以及topics的分区信息等。
全栈程序员站长
2022/08/29
1.4K0
Kafka集群扩容「建议收藏」
kafka 集群运维和使用「建议收藏」
集群信息:12台服务器,每台机子12块盘每块1.8T,其中6台做RAID,6台使用12块盘,64G内存,CPU24核,万兆网卡。集群每天写入的消息量能到每天33亿条消息,消费暂时还没有统计(通过ZK消费的消息量大概每天100亿,还有很大一部分走的SimpleConsumer没有统计)。
全栈程序员站长
2022/09/03
5710
Kafka的灵魂伴侣Logi-KafkaManger(4)之运维管控–集群运维(数据迁移和集群在线升级)
有想进滴滴LogI开源用户群的加我个人微信: jjdlmn_ 进群(备注:进群) 群里面主要交流 kakfa、es、agent、LogI-kafka-manager、等等相关技术; 群内有专人解答你的问题 对~ 相关技术领域的解答人员都有; 你问的问题都会得到回应
石臻臻的杂货铺[同名公众号]
2021/07/14
4790
Kafka 运营总结
蒋海鹏
2017/09/18
3K0
Kafka 运营总结
Kafka集群新增节点后数据如何重分配
分区重新分配工具可用于在代理之间移动分区。理想的分区分配将确保所有代理之间的数据负载和分区大小均匀。分区重新分配工具没有能力自动研究Kafka群集中的数据分布,并四处移动分区以实现均匀的负载分布。因此,必须弄清楚应该移动哪些主题或分区。
大数据真好玩
2022/03/28
2K0
推荐阅读
相关推荐
❤️3万字长文呕心沥血教你彻底搞懂数据迁移原理❤️(附配套教学视频)
更多 >
LV.5
这个人很懒,什么都没有留下~
交个朋友
加入HAI高性能应用服务器交流群
探索HAI应用新境界 共享实践心得
加入[游戏服务器] 腾讯云官方交流站
游戏服运维小技巧 常见问题齐排查
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档