kafka 重新分配节点_Kafka扩容节点和分区迁移

背景

最近工作中碰到Kafka 节点的网卡成为了性能瓶颈,为了提高整个消息队列的输出吞吐量,需要将数据量大的Topic 迁移到新的Kafka节点上。

操作步骤

1. 新建Kafka 节点

通过CDH 管理界面在新机器上安装Kafka 服务,并得到相应的Kafka broker id。(假设为140, 141)

2. 创建要迁移的Topic 列表

查看所有的Topic

$ cd /opt/cloudera/parcels/KAFKA/bin

$ ./kafka-topics --describe --zookeeper 10.1.1.50:2181/kafka

如果要删除某些不用的Topic,可运行命令

$ ./kafka-run-class kafka.admin.TopicCommand --delete --topic test_p1_r1 --zookeeper 10.1.1.50:2181/kafka

新建文件topics-to-move.json,包含要迁移到Topic 列表。这里只迁移了一个Topic,也可以是多个Topic。

{

"topics": [{"topic": "sdk_counters"}],

"version": 1

}

3. 生成Topic 分区分配表

使用kafka-reassign-partitions 工具生成分区分配表,其中需要指定topics-to-move.json 文件和迁移目标节点的broker id

$ ./kafka-reassign-partitions --zookeeper 10.1.1.50:2181/kafka --topics-to-move-json-file ~/kafka/topics-to-move.json --broker-list "140,141" --generate

将生成以下结果

Current partition replica assignment

{"version":1,"partitions":[{"topic":"sdk_counters","partition":1,"replicas":[61,62]},{"topic":"sdk_counters","partition":0,"replicas":[62,61]}]}

Proposed partition reassignment configuration

{"version":1,"partitions":[{"topic":"sdk_counters","partition":1,"replicas":[140,141]},{"topic":"sdk_counters","partition":0,"replicas":[141,140]}]}

将Current partition replica assignment 的内容保存到rollback-cluster-reassignment.json,用于回滚操作。将Proposed partition reassignment configuration 的内容保存到expand-cluster-reassignment.json,用于执行迁移操作。

在这里也可以手工编辑expand-cluster-reassignment.json 文件更改replica 和partition 配置。也可以在迁移之前更改Topic 的分区数 (6)。

$ ./kafka-topics --zookeeper 10.1.1.50:2181/kafka --alter --topic sdk_counters --partitions 6

4. 执行迁移操作

$ ./kafka-reassign-partitions --zookeeper 10.1.1.50:2181/kafka --reassignment-json-file ~/kafka/expand-cluster-reassignment.json --execute

迁移操作会将指定Topic 的数据文件移动到新的节点目录下,这个过程可能需要等待很长时间,视Topic 的数据量而定。可以运行以下命令查看执行状态。

$ ./kafka-reassign-partitions --zookeeper 10.1.1.50:2181/kafka --reassignment-json-file ~/kafka/expand-cluster-reassignment.json --verify

状态有两种,in progress 表示正在迁移,completed successlly 表示已经成功完成迁移。在此过程中,可以在各个Kafka 的节点上使用iftop 工具实时监控网络带宽。可以观察到迁移的source 节点使用了大量的输出带宽,迁移的target 节点使用了大量的输入带宽。由于在迁移过程中,会占用大量的网卡带宽进行数据传输,可能会影响到其他Topic 和应用程序的带宽使用。

迁移完成后,原先的节点下将不存在该Topic 的数据文件。

优化

减少迁移的数据量

如果要迁移的Topic 有大量数据(Topic 默认保留1天的数据),可以在迁移之前临时动态地调整retention.ms 来减少数据量,Kafka 会主动purge 掉1个小时之前的数据。

$ ./kafka-topics --zookeeper 10.1.1.50:2181/kafka --alter --topic sdk_counters --config retention.ms=3600000

在迁移完成后,恢复原先设置

$ ./kafka-topics --zookeeper 10.1.1.50:2181/kafka --alter --topic sdk_counters --config retention.ms=86400000

在迁移过程中,不会影响应用程序写Kafka,在迁移完成后需要查看应用程序是否运行正常。

在已有的Topic 上增加分区

如果使用kafka-topics 动态地增加partition 数目,则新增的partition 可能会出现在迁移之前的机器上。这时可以使用kafka-reassign-partitions 工具并手动更改分区分配表以保证所有的分区都在迁移后的机器上。注意要保持旧的分区中的节点分配和replica 和之前相同,否则会导致Kafka 对旧分区的重新迁移,增加了迁移时间,并且可能导致正在运行的程序因为分区失效而出错。

重新指定partition leader

有时候由于节点down 了,partition 的leader 可能不是我们prefer 的,这时,可以通过kafka-preferred-replica-election 工具将replica 中的第一个节点作为该分区的leader。

手动编辑topicPartitionList.json 文件,指定要重新分配leader 的分区。

{"partitions":[{"topic":"sdk_counters","partition":5}]}

执行命令

$ ./kafka-preferred-replica-election --zookeeper 10.1.1.50:2181/kafka -path-to-json-file ~/kafka/topicPartitionList.json

中断迁移任务

一旦启动reassign 脚本,则无法停止迁移任务。如果需要强制停止,可以通过zookeeper 进行修改。

$ zookeeper-client -server 10.1.1.50:2181/kafka

[zk] delete /admin/reassign_partitions

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

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

相关文章

HTML+CSS+JS实现 ❤️CSS3图片遮罩高亮显示❤️

效果演示: GIF压缩太大、故显示图片查看吧 代码目录: 主要代码实现: CSS样式: charset "utf-8"; * {margin: 0;padding: 0;list-style: none; }body {background-color: #1B1B1B }img {border: 0;cursor: pointer; }a …

rust windows 交叉编译_树莓派上使用rust:交叉编译

方法一树莓派Zero 用的 BCM2835 是 armv6 架构的。arm-linux-gnueabihf-gccpacaur -S arm-linux-gnueabihf-gccrustup target add arm-unknown-linux-gnueabihfCargo 设置需要给 cargo 的配置文件里面指定 arm-unknown-linux-gnueabihf 的 linker.默认配置一般在 ~/.cargo/conf…

HTML+CSS+JS实现 ❤️响应式图文卡片滑块展示特效❤️

效果演示: 代码目录: 主要代码实现: CSS样式: import url("https://fonts.googleapis.com/css?familyQuicksand:400,500,700&subsetlatin-ext"); html {position: relative;overflow-x: hidden !important; }body…

代码写好了怎么在php里裕兴_8 行代码用Python画一个中国地图

源 / SegmentFaultJupyter首先,第一神器是Jupyter。如果你是第一次使用,可能搞不清楚它的开发者做这么个鬼东西出来干什么,说它是博客系统也不像,说它是web服务器也不像,但它就是有用。因为我们传统的web开发首先想的就…

❤️六W字《计算机基础知识》(三)(建议收藏)❤️

推荐阅读: ❤️《计算机基础知识》(一)(建议收藏)❤️ ❤️《计算机基础知识》(二)(建议收藏)❤️ ❤️ java项目精品实战案例 ❤️ 101. Internet上,访问We…

源码 状态机_阿里中间件seata源码剖析七:saga模式实现

saga模式是分布式事务中使用比较多的一种模式,他主要应用在长流程的服务,对一个全局事务,如果某个节点抛出了异常,则从这个节点往前依次回滚或补偿事务。今天我们就来看看它的源码实现。状态机初始化在之前的文章《springcloudeur…

❤️六W字《计算机基础知识》(四)(建议收藏)❤️

151. www.cernet.edu.cn 的网址中,可以明确地看出是属于哪一类机构____。 A、教育界 B、政府单位 C、法人组织 D、公司 152. 在Wed网页中指向其他网页的‘指针“称之为____。 A、超链接 B、超文本 C、超媒体 D、多媒体 153. 下列关于URL的解释错误的是____。…

❤️六W字《计算机基础知识》(五)(建议收藏)❤️

客户/服务器模式的局域网,其网络硬件主要包括服务器、工作站、网卡和____。 A、网络拓扑结构 B、计算机 C、传输介质 D、网络协议 和广域网相比,局域网____。 A、有效性好但可靠性差 B、有效性差但可靠性高 C、有效性好可靠性也高 …

唯有自己变得强大_唯有自己变得强大,才能获得有用人脉!

孔子说:不患人之莫知己,求为可知也来源:田俊国课堂对初入职场的人来讲人微言轻,即便使出浑身解数去拓展关系,有权力、有地位的人也未必正眼瞧你。全世界的人都想巴结那些炙手可热的有权力、有资源的名人。问题是&#…

❤️六W字《计算机基础知识》(六)(建议收藏)❤️

FTP是因特网上最早使用的文件传输程序,使用FTP不能____。 A、查看文件 B、文件目录操作 C、下载文件 D、运行文件 WWW是一种建立在Internet上的全球性的、交互的、动态、多平台、分布式的图形信息系统,它的…

android sdk方法隐藏_每个Android开发都必须知道的利器

1.背景介绍在移动端项目功能不断完善和丰富的过程中我们一直在寻找一种可以高效开发且复用率高的开发模式,特别是多应用同步开发、管理。在开发过程中你是否遇到需要发布影子工程?新建项目是否需要耗费大量时间将原有基类、工具类、第三方通用类库逐个 c…

❤️六W字《计算机基础知识》(七)(建议收藏)❤️

在Word中,对某个段落的全部文字进行下列设置,属于段落格式设置的是____。 A、设置为四号字 B、设置为楷体字 C、设置为1.5倍行距 D、设置为4磅字间距 用Word编辑文件时,用户可以设置文件的自动保存时间间隔。如果改变自动保存时…

flash 火狐总是崩溃_win10系统火狐flash插件总是崩溃的解决方法

win10系统火狐flash插件总是崩溃的问题发生概率较高。怎样来处理win10系统火狐flash插件总是崩溃的问题,知道的人估计不多。本站针对win10系统火狐flash插件总是崩溃的情况总结了一些解决的方法。简单说两步:1、在火狐浏览器地址栏在输入:abo…

❤️六W字《计算机基础知识》(八)(建议收藏)❤️

在Word中替换的快捷键是____。 A、CTRLF B、CTRLH C、CTRLS D、CTRLP 在Word中打印的快捷键是____。 A、CTRLF B、CTRLH C、CTRLO D、CTRLP 在Word中打开新文档的快捷键是____。 A、CTRLF B、CTRLH C、CTRLO D、CTRLP 在Word中,___最大。 A、初…

s3vm与tritraining_S3FD论文解读

论文题目:S3FD: Single Shot Scale-invariant Face DetectorS$^3$FD: Single Shot Scale-invariant Face Detector​arxiv.orgsfzhang15/SFD​github.com作者团队,来自于中科院自动化所(CASIA),一作Shifeng Zhang(张士峰),看见没&…

❤️六W字《计算机基础知识》(九)(建议收藏)❤️

在PowerPoint2000中,若为幻灯片中的对象设置"飞入",应选择对话框____。 A、自定义动画 B、幻灯片版式 C、自定义放映 D、幻灯处放映 在编辑Word文档时,输入的新字符总是覆盖了文档中已经输入的字符,_____。 A、原因是…

mysql怎么创建表_mysql怎么创建一个表

1.登陆成功后,首先进入某一个数据库 (不是指数据库服务器)use t1; //t1是数据库名如图所示:2.在此数据库中建立数据库表2.1 先建立表结构(可以理解为表的列名,也就是字段名)在实际生产过程中,表结构是需要经过精心设计的。通用的语…

❤️1000道《计算机基础知识》汇总上----(建议收藏)❤️

1、 世界上首先实现存储程序的电子数字计算机是____。 A、ENIAC B、UNIVAC C、EDVAC D、EDSAC 2、计算机科学的奠基人是____。 A、查尔斯.巴贝奇 B、图灵 C、阿塔诺索夫 D、冯.诺依曼 3、 世界上首次提出存储程序计算机体系结构的是____。 A、艾仑•图灵 B、冯•诺…

mysql的unique_MySQL使用UNIQUE实现数据不重复插入

SQL UNIQUE 约束UNIQUE 约束唯一标识数据库表中的每条记录。UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。PRIMARY KEY 拥有自动定义的 UNIQUE 约束。请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。下面…

HTML+CSS+JS实现 ❤️乐队成员图片展示ui特效❤️

效果演示: 代码目录: 主要代码实现: CSS样式: charset "utf-8"; /* CSS rest */body {font-size: 12px;font-family: "微软雅黑"; }* {margin: 0;padding: 0; }a {text-decoration: none; }ul, li, ol {list…