当前位置: 首页 > article >正文

kafka-集群扩容

一. 前言:

  随着业务增加,我们会面临这kafka当性能问题,需要进行集群扩容,增加broker节点。 

二. 扩容说明:

增加新服务到kafka集群是很容易的(参考: kafka-部署安装-CSDN博客 ),只要为新服务分配一个独一无二的Broker ID并启动即可。但是,新的服务不会自动分配到任何数据,需要把分区数据迁移给它们,在此期间它们一直不工作,直到新的topic创建,所以,通常向集群添加机器时,你需要将一些现有的数据迁移到这些机器上。

迁移数据的过程是手动启动的,但是执行过程是完全自动化的。在kafka后台内部中,kafka将添加新的服务器,并作为正在迁移分区的follower,来完全复制该分区现有的数据。当新服务器完全复制该分区的内容并加入同步副本,成为现有副本之一后,就将现有的副本分区上的数据删除。

分区重新分配工具可以用于跨broker迁移分区,理想的分区分配将确保所有的broker数据负载和分区大小。分区分配工具没有自动研究kafka集群的数据分布和迁移分区达到负载分布的能力,因此,管理员要弄清楚哪些topic或分区应该迁移。

分区分配工具的3种模式:

       --generate: 这个选项命令,是生成分配规则json文件的,生成“候选人”重新分配到指定的topic的所有parition都移动到新的broker。此选项,仅提供了一个方便的方式来生成特定的topic和目标broker列表的分区重新分配 “计划”。
        --execute: 这个选项命令,是执行你用--generate 生成的分配规则json文件的,(用--reassignment-json-file 选项),可以是自定义的分配计划,也可以是由管理员或通过--generate选项生成的。
         --verify: 这个选项命令,是验证执行--execute重新分配后,列出所有分区的状态,状态可以是成功完成,失败或正在进行中的。

    使用分区重新分配工具将从当前的broker集的一些topic移到新添加的broker。同时扩大现有集群,因为这很容易将整个topic移动到新的broker,而不是每次移动一个parition,你要提供新的broker和新broker的目标列表的topic列表(就是刚才的生成的json文件)。然后工具将根据你提供的列表把topic的所有parition均匀地分布在所有的broker,topic的副本保持不变。
 

例如: 原有节点0,1,2  ,需要扩容两个节点, 对应ID为3,4, 将一个topic(nginx_access_api)进行重新分区,创建一个json文件:

#cat topics-to-move.json
{
    "topics": [
        {"topic": "nginx_access_api"}
    ],
    "version": 1
}

 通过--generate生成规则:

# bin/kafka-reassign-partitions.sh --bootstrap-server logkafka-1:9092 --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2,3,4" --generate

Current partition replica assignment
......
Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"nginx_access_api","partition":9,"replicas":[4,1],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":4,"replicas":[4,0],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":6,"replicas":[1,3],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":14,"replicas":[4,2],"log_dirs":["any","any"]},{"topic":"nginx_access_api","partition":3,"replicas":
......


#注意: 2.2之前需要用--zookeeper 指定zk地址

注意,这个时候,迁移还没有开始,它只是告诉你当前分配和新的分配规则,当前分配规则用来回滚,新的分配规则保存在json文件(例如,保存在 reassignment.json这个文件下)然后,用--execute选项来执行它。

bin/kafka-reassign-partitions.sh --bootstrap-server logkafka-1:9092 --reassignment-json-file reassignment.json --execute

可以通过--verify 指令查看进度。

bin/kafka-reassign-partitions.sh --bootstrap-server logkafka-1:9092 --reassignment-json-file reassignment.json --verify

可以执行验证命令,过滤包含 successfully 的输出,查看进度。

 ----------------------------------------------------------------------------------------------

深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流!

(V: xiaoxiangbj2013 ) !


http://www.kler.cn/a/555748.html

相关文章:

  • import requests Pycharm 报错
  • C++,设计模式,【工厂方法模式】
  • 使用AI创建流程图和图表的 3 种简单方法
  • 【C语言】fgetpos函数用法介绍
  • 【设计模式】【创建型模式】抽象工厂模式(Abstract Factory)
  • 计算机组成原理——输入/输出系统(十七)
  • Windows安装node.js详细教程
  • 基于 PyQt5 实现分组列表滚动吸顶效果
  • 索引有哪些缺点以及具体有哪些索引类型
  • Windows 下 Ollama 安装deepseek本地模型
  • Git中revert和reset区别?
  • 【工具篇】【深度解析 DeepAI 工具:开启 AI 应用新体验】
  • 2025年度福建省职业院校技能大赛高职组“信息安全管理与评估”赛项规程
  • 高防服务器的适用场景有哪些?
  • SQL Server 中行转列
  • 企业内部知识库:安全协作打造企业智慧运营基石
  • Scala基础学习
  • EndNote与Word关联:科研写作的高效助力
  • 【cuda学习】cuda graph文档
  • 10GE 万兆SFP光模块型号(常用光模块收发光功率范围)