Kafka Cluster 扩容 添加副本 重分配分区

news2024/9/28 23:36:21

Kafka Cluster 扩容

针对kafka集群,可以通过向群集添加新节点来扩展群集。新节点将仅服务于新主题或新分区,现有分区将不会自动重新平衡以使用新节点。如果需要对现有的TOPIC进行重新分配分区,需要运维人员手动进行干预。今天学习下如何对已有的kafka集群进行扩容?如何将现有TOPIC分区迁移到新添加的节点上?

新建集群

集群规划

在本机搭建一个3个Broker节点的kafka集群,组成一个简单的单机版集群环境,用于学习使用,各节点信息如下:

  • Node1 节点

    broker_id=10
    listeners=PLAINTEXT://:19092
    log.dirs=/tmp/19092/kafka-logs
    
  • Node2 节点

    broker_id=11
    listeners=PLAINTEXT://:19093
    log.dirs=/tmp/19093/kafka-logs
    
  • Node3 节点

    broker_id=12
    listeners=PLAINTEXT://:19094
    log.dirs=/tmp/19094/kafka-logs
    

集群配置

  • 在kafka安装目录 创建clusters目录
mkdir clusters
  • 复制kafka默认配置文件到目录中
# 复制node1 节点配置
cp config/server.properties clusters/node1.properties
# 复制node2 节点配置
cp config/server.properties clusters/node2.properties
# 复制node3 节点配置
cp config/server.properties clusters/node3.properties

并根据之前的节点信息,对配置属性进行对应的修改

启动集群

# 1. 启动 zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
# 1. 启动节点1
./bin/kafka-server-start.sh clusters/node1.properties
# 2. 启动节点2
./bin/kafka-server-start.sh clusters/node2.properties
# 3. 启动节点3
./bin/kafka-server-start.sh clusters/node3.properties

创建主题

./bin/kafka-topics.sh --create --topic clustersTopic --bootstrap-server localhost:19092 --partitions 6
  • 查看topic信息
./bin/kafka-topics.sh --describe --topic clustersTopic --bootstrap-server localhost:19092

在这里插入图片描述

集群扩容

假设,由于业务发展迅速,现有的3个节点的kafka集群不足以满足实际要求,现在需要对集群进行扩容,重新新增一个broker节点,同时对现有的Topic - clustersTopic 进行扩容,将原来的分区重新分配到新增加的Node4 节点上。接下来看操作步骤

新增节点

  • 新增一个Node4节点,节点配置信息如下
broker_id=13
listeners=PLAINTEXT://:19095
log.dirs=/tmp/19095/kafka-logs
  • 复制 broker 配置文件 并更改以上配置属性
cp config/server.properties clusters/node4.properties
#更改Node4 以上配置属性
vim clusters/node4.properties
  • 启动节点
# 3. 启动节点4
./bin/kafka-server-start.sh clusters/node4.properties

然而,这些新服务器不会自动分配任何数据分区,因此除非手动进行人工干预,否则在创建新主题之前,它们不会执行任何工作。因此,将机器添加到集群时,通常需要将一些现有数据迁移到这些机器。

迁移分区工具

现在手动将之前创建的topic - clusterTopic中的分区6 手动迁移到新的节点- Node4上。kafka 提供对应的脚本工具可以进行分区数据的迁移工作,分区分配工具可以在3种互斥模式下运行:

  • –generate - 在此模式下,给定toic列表和broker列表,该工具将生成一个候选重新分配,以将指定主题的所有分区移动到新broker。该选项仅提供了一种在给定主题和目标broker列表的情况下生成分区重新分配计划的方便方法。

  • –execute - 在此模式下,该工具根据用户提供的重新分配计划开始重新分配分区。(使用–recassignment json文件选项)。这可以是管理员手工编制的自定义重新分配计划,也可以使用–generate选项提供

  • –verify - 在此模式下,该工具将验证上次–execute期间列出的所有分区的重新分配状态。状态可以是成功完成、失败或正在进行

迁移步骤

指定主题

生成一个JSON文件,指定待迁移的topic信息

vim clusters/move_to_topic.json  
# 内容如下
{
	"topics": [{
		"topic": "clustersTopic"
	}],
	"version": 1
}

生成迁移计划

bin/kafka-reassign-partitions.sh --bootstrap-server localhost:19092 --topics-to-move-json-file clusters/move_to_topic.json  --broker-list "10,11,12,13" --generate

# --broker-list 表示json文件的topic分区 将在 "10,11,12,13" 节点中进行重新分配 

在这里插入图片描述

如上图,工具生成两部分内容

# 第一部分内容 表示topic 现有的分区信息 用户可以将内容存储起来,用于后续备份
Current partition replica assignment
{"version":1,"partitions":[{"topic":"clustersTopic","partition":0,"replicas":[11],"log_dirs":["any"]},{"topic":"clustersTopic","partition":1,"replicas":[12],"log_dirs":["any"]},{"topic":"clustersTopic","partition":2,"replicas":[10],"log_dirs":["any"]},{"topic":"clustersTopic","partition":3,"replicas":[11],"log_dirs":["any"]},{"topic":"clustersTopic","partition":4,"replicas":[12],"log_dirs":["any"]},{"topic":"clustersTopic","partition":5,"replicas":[10],"log_dirs":["any"]}]}
# 第二部分内容 表示topic 重新分配后的分区信息 用户需要将内容存储起来 用于执行
# 存储文件名: expand-cluster-reassignment.json
Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"clustersTopic","partition":0,"replicas":[10],"log_dirs":["any"]},{"topic":"clustersTopic","partition":1,"replicas":[11],"log_dirs":["any"]},{"topic":"clustersTopic","partition":2,"replicas":[12],"log_dirs":["any"]},{"topic":"clustersTopic","partition":3,"replicas":[13],"log_dirs":["any"]},{"topic":"clustersTopic","partition":4,"replicas":[10],"log_dirs":["any"]},{"topic":"clustersTopic","partition":5,"replicas":[11],"log_dirs":["any"]}]}
// clusters/expand-cluster-reassignment.json
{"version":1,"partitions":[{"topic":"clustersTopic","partition":0,"replicas":[10],"log_dirs":["any"]},{"topic":"clustersTopic","partition":1,"replicas":[11],"log_dirs":["any"]},{"topic":"clustersTopic","partition":2,"replicas":[12],"log_dirs":["any"]},{"topic":"clustersTopic","partition":3,"replicas":[13],"log_dirs":["any"]},{"topic":"clustersTopic","partition":4,"replicas":[10],"log_dirs":["any"]},{"topic":"clustersTopic","partition":5,"replicas":[11],"log_dirs":["any"]}]}

执行迁移

# 执行脚本 进行分区迁移
bin/kafka-reassign-partitions.sh --bootstrap-server localhost:19092 --reassignment-json-file clusters/expand-cluster-reassignment.json --execute

在这里插入图片描述

验证结果

# 验证校验
bin/kafka-reassign-partitions.sh --bootstrap-server localhost:19092 --reassignment-json-file clusters/expand-cluster-reassignment.json --verify

在这里插入图片描述

增加副本

为现有TOPIC现有分区增加复制因子很容易。只需在自定义重新分配json文件中指定额外的副本,并使用–execute选项来增加指定分区的复制因子。

# 添加副本之前的topic 状况
$ ./bin/kafka-topics.sh --describe --topic clustersTopic --bootstrap-server localhost:19092
Topic: clustersTopic	TopicId: hNgIV8naQj-BMc5hpe9hVQ	PartitionCount: 6	ReplicationFactor: 1	Configs: 
	Topic: clustersTopic	Partition: 0	Leader: 10	Replicas: 10	Isr: 10
	Topic: clustersTopic	Partition: 1	Leader: 11	Replicas: 11	Isr: 11
	Topic: clustersTopic	Partition: 2	Leader: 12	Replicas: 12	Isr: 12
	Topic: clustersTopic	Partition: 3	Leader: 13	Replicas: 13	Isr: 13
	Topic: clustersTopic	Partition: 4	Leader: 10	Replicas: 10	Isr: 10
	Topic: clustersTopic	Partition: 5	Leader: 11	Replicas: 11	Isr: 11

指定分区

vim clusters/increase-replication-factor.json
# 创建文件,内容如下
{
        "version": 1,
        "partitions": [{
                "topic": "clustersTopic",
                "partition": 0,
                "replicas": [10, 11, 12]
        }]
}

执行脚本

bin/kafka-reassign-partitions.sh --bootstrap-server localhost:19092 --reassignment-json-file clusters/increase-replication-factor.json --execute

在这里插入图片描述

验证结果

  • 验证方式一
bin/kafka-reassign-partitions.sh --bootstrap-server localhost:19092 --reassignment-json-file clusters/increase-replication-factor.json --verify

在这里插入图片描述

  • 验证方式二
./bin/kafka-topics.sh --describe --topic clustersTopic --bootstrap-server localhost:19092

在这里插入图片描述

可以很明显看到分区0,多了2个同步副本信息

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

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

相关文章

CAPL学习之路-测试功能集函数(故障注入函数)

TestDisableMsg 禁止发送消息,除非调用函数TestSetMsgEvent 使用TestEnableMsg重新启用消息。此函数影响分配CANoe交互层或CANopen仿真的仿真节点 这个函数可以在测试用例中控制Simulation Setup界面仿真节点报文的发送与停止 testcase TCExample() {testDisableMsg(LightSt…

Linux模块代码、编译、加载、卸载一条龙

最近要写一个Linux的内核模块&#xff0c;记录一下内核模块的代码编写、编译、加载和卸载的基本流程&#xff0c;以作备忘&#xff0c;也希望能帮到有需要的同学。 模块代码 //代码来自https://yangkuncn.cn/kernel_INIT_WORK.html //init_works.c #include <linux/kernel…

Docker-compose快速部署PostgreSQL

Docker-compose快速部署PostgreSQL&#xff1a; 利用docker-compose编排工具部署&#xff1a; docker-compose.yml 文件 version: "3.1" services:postgresql:image: postgres:12-alpinecontainer_name: postgresqlenvironment:POSTGRES_DB: postgresPOSTGRES_USE…

Python--数据容器总结

一、数据容器的分类 数据容器可以从一下视角进行简单的分类&#xff1a; 是否支持下标索引 支持&#xff1a;列表、元组、字符串 --序列类型不支持&#xff1a;集合、字典 --非序列类型是否支持重复元素 支持&#xff1a;列表、元组、字符串 --序列类型不支持&#xff1a;集…

自动生成单测代码插件Squaretest

今天来介绍一款工具Squaretest&#xff0c;它是一款自动生成单元测试的插件&#xff0c;会用到它也是因为最近公司上了代码质量管控的指标&#xff0c;会考评各个项目的单元测试覆盖率&#xff0c;以及sonar扫描出来的各种问题。 很多老项目老代码&#xff0c;或者着急交付的项…

第十八讲:神州三层交换机DHCP中继服务的配置

当DHCP客户机和DHCP服务器不在同一个网段时&#xff0c;由DHCP中继传递DHCP报文。增加DHCP中继功能的好处是不必为每个网段都设置DHCP服务器&#xff0c;同一个DHCP服务器可以为很多个子网的客户机提供网络配置参数&#xff0c;即节约了成本又方便了管理。这就是DHCP中继的功能…

vue经历从2.0到3.0更新

​编辑vue专栏收录该内容 9 篇文章2 订阅 订阅专栏 vue经历从2.0到3.0更新之后&#xff0c;简⽽⾔之就是变得更轻&#xff0c;更快&#xff0c;使⽤起来更加⽅便&#xff0c;每⼀次的版本迭代都是对上⼀个版本的升级优化&#xff0c;不管 是对于我们开发者还是对于⽤户体验都…

铁威马NAS教程之使用CloudSync应用轻松同步备份网盘数据

铁威马在TOS 5系统中&#xff0c;将各种云盘的同步集合到了一个应用——CloudSync&#xff0c;更方便用户使用。只需要下载安装CloudSync&#xff0c;就可以在TNAS和各种云盘之间&#xff0c;实现快速安全的数据同步、分享文件。 1.TOS应用中心下载CloudSync应用&#xff1b; …

中国霍尔效应电流传感器市场规模达到了192.71百万美元?

霍尔效应&#xff0c;是指有小电流通过的一个半导体薄片置于磁场中&#xff0c;受到磁场作用影响电流发生偏转&#xff0c;在控制电流的垂直方向上的半导体两侧形成了电压差&#xff0c;该电势差就是霍尔电压。霍尔电压的大小&#xff0c;与磁场强度和半导体内通过的控制电流成…

JSP ssh 在线英语学习平台myeclipse开发oracle数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh在线英语学习平台是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S 模式开发。开发环境为TOMCAT7.0…

【MySQL从入门到精通】【高级篇】(三十)记一次mysql5.7的新特性derived_merge的坑

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…

深度学习 Day23——利用RNN实现天气预测

深度学习 Day23——利用RNN实现天气预测 文章目录深度学习 Day23——利用RNN实现天气预测一、前言二、我的环境三、前期工作1、导入依赖项2、导入数据3、查看数据基本信息4、查看各列数据的数据类型5、转换数据集中有关时间数据转换为时间格式6、删除Date标签列7、查看所有列的…

多版本并发控制(MVCC)

MVCC机制概述 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;&#xff0c;中文是多版本并发控制&#xff0c;是指在使用READ COMMITTED、REPEATABLE READ这两种隔离级别的事务在执行SELECT操作时访问记录的版本链的过程&#xff0c;从而在不加锁的前提下使不…

基于LSTM三分类的文本情感分析,采用LSTM模型,训练一个能够识别文本postive, neutral, negative三种

基于LSTM三分类的文本情感分析&#xff0c;采用LSTM模型&#xff0c;训练一个能够识别文本postive, neutral, negative三种 &#xff0c;含数据集可直接运行 完整代码下载地址&#xff1a;基于LSTM三分类的文本情感分析 基于LSTM三分类的文本情感分析 背景介绍 文本情感分析…

Comic Life - 超棒的漫画制作工具,拥有多种动画模版,创作属于自己的漫画

Comic Life - 超棒的漫画制作工具&#xff0c;拥有多种动画模版&#xff0c;创作属于自己的漫画 Comic Life是一个照片编辑器&#xff0c;能够添加各种效果&#xff0c;并基于它们创建漫画。该工具包包括各种各样的模板&#xff0c;可以很容易地将照片放置在工作表上&#xff0…

CKEditor 为你的Flask项目添加一个富文本编辑器

人家高高在上的CKEditor是有个官网的&#xff01;&#xff01; WYSIWYG HTML Editor with Collaborative Rich Text EditingRock-solid, Free WYSIWYG Editor with Collaborative Editing, 200 features, Full Documentation and Support. Trusted by 20k companies.https://c…

SBM模型分析全流程

数据包络分析DEA时&#xff0c;其研究投入产出效率情况&#xff0c;并且其假定投入和产出之间存在单调线性关系&#xff0c;其为一种线性规划技术来确定DMU相对效率的方法。但有时候会多出下‘非期望产出’&#xff0c;就是不希望有它产出&#xff0c;比如资金投入、教育投入换…

【Unity3D日常开发】Unity3D拓展开发:UI界面控制,UI界面的显示和隐藏实现

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群&#xff1a;1040082875 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中&#xff0c;可能遇到管理…

2022最后一天盘点

今天是今年最后的一天工作日&#xff0c;对于我来说就是今年的最后一天&#xff0c;因为放假了我就不需要思考了&#xff08;当然公司后端程序员要保持24小时oncall&#xff09; 1 阳完之后 还是有些 咳嗽&#xff0c;公司此起彼伏的咳嗽声&#xff0c;不知道什么时候所有人都…

21.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[…