扩容 Kafka 集群

Kafka 在蓝鲸架构中,用于数据上报通道的队列缓存。在数据链路中,生产者是 GSE 组件的 gse_data 进程,将 agent 上报的监控时序数据或者日志采集数据 写入到 kafka 集群。消费者是监控后台的 transfer 进程,将队列中的数据消费,清洗,并入库到相应存储中。

本教程描述了如何在蓝鲸社区版中扩容 Kafka 集群。

  • 要使一个副本集能提供足够的冗余,至少需要部署三个 Broker ,所以新增节点数必须为偶数,至少增加两台机器。
  • 官方的扩容指引:https://kafka.apache.org/0100/documentation.html#basic_ops_cluster_expansion
  • Kafka 扩容集群很简单,只需要分配一个唯一的 Broke id 即可加入集群
  • 扩容完成后,新的 Broker 中如果没有新增 Topic,这个节点是不会承载任何数据,所以需要用户手动迁移老的数据到新的 broker,以达到集群内均匀的负载分布。具体操作参考官方文档说明:https://kafka.apache.org/0100/documentation.html#basic_ops_cluster_expansion
  • 单机版部署的蓝鲸只有单 Kafka 集群,建议扩容至 3 个 Broker,实现容错和高可用性

1. Kafka 扩容

1.1. 使用标准运维流程扩容

1.1.1. 前置准备

  1. 机器准备
  1. 实现免密
    开始部署前,请确保新增主机跟中控机已实现免密。

    1
    ssh-copy-id <ip>
  2. 请先前往节点管理,对新增主机进行 agent 安装

  3. 将需要部署产品的标准运维流程模版导入至标准运维
    标准运维流程模版 下载
    详细步骤: 打开标准运维 -> 流程 -> 项目流程 -> 导入YAML -> 点击上传 -> 导入

1.1.2. 执行扩容操作

  1. 选择流程 “[ce][scale]kafka” 流程模版进行新建任务,根据提示填写相关信息。确认填写信息无误后,开始执行任务。
  2. 点击下一步进入到“参数信息”填写页,按需填入参数

1.2. 手动单步扩容

  1. 机器准备

1.2.1. 准备机器:新增并初始化机器

以下初始化步骤以单个机器为例,如有多台扩容机器,请多次重复执行,注意替换机器 IP

以下操作在中控机执行,默认在 /data/install 下执行

  1. 配置新机器免密

    1
    ssh-copy-id <ip>
  2. 同步蓝鲸的 yum repo

    1
    rsync -av /etc/yum.repos.d/Blueking.repo root@<ip>:/etc/yum.repos.d/
  3. 在 install.config 中增加扩容的机器和模块定义

    1
    2
    3
    cat >> install.config <<EOF
    <ip> kafka(config)
    EOF
  4. 执行蓝鲸的机器初始化操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 同步脚本至新机器
    ./bkcli sync common

    # 执行初始化脚本
    pcmd -H <ip> '/data/install/bin/init_new_node.sh'

    # 确认新机器成功加入了 consul 集群,如果没有输出,可以再次重试
    consul members | grep "<ip>:"

    # 同步 java8 安装包
    ./sync.sh zk /data/src/java8.tgz /data/src

1.2.2. 执行扩容操作

如有多台扩容机器,一下操作请多次重复执行,注意替换机器 IP
以下操作在新增机器上执行,默认在 /data/install 下执行

  1. 登陆新增机器

    1
    ssh <ip>
  2. 安装 JAVA

    1
    /data/install/bin/install_java.sh -p /data/install -f /data/src/java8.tgz
  3. 安装 Kafka 并配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 默认数据目录
    DATA_DIR="/data/bkce/public/kafka"

    # 安装 Kafka
    if ! rpm -ql kafka &>/dev/null; then
    yum -y install kafka
    fi

    # 创建目录并配置权限
    install -d -o kafka -g kafka "$DATA_DIR"

    # 选取一台现有 Broker,拷贝配置至新增节点
    rsync -av <现有Broker的ip>:/etc/kafka/server.properties /etc/kafka/server.properties

    # 获取最后一个 broker.id
    zookeepercli -servers <zk-ip:2181> -c ls /common_kafka/brokers/ids | sort -n | tail -1

    # 修改配置中 broker.id 定义,id 在 kafka 集群中必须保持唯一
    sed -i -r "/^broker.id=/s/[0-9]+/<broker.id>/" /etc/kafka/server.properties

    # 修改配置中内网 ip 地址
    sed -i -r "/^listeners=/s/([0-9]+\.){3}[0-9]+/<新机器的ip>/" /etc/kafka/server.properties
  4. 启动新增 Broker 的 Kafka 服务

    1
    2
    3
    4
    systemctl enable --now kafka

    # 确认服务状态
    systemctl status kafka

1.2.3. 注册 consul:kafka.service.consul

1
2
3
4
5
6
cd /data/install ; source utils.fc; source tools.sh
reg_consul_svc kafka 9092 "${BK_KAFKA_IP_COMMA}"

# 检查
dig +short kafka.service.consul
## 预期输出所有部署了 kafka 机器的 ip

1.2.4. 完成扩容,验证产品功能

1.2.5 注册蓝鲸业务拓扑

以 “Kafka” 为例:

  1. 打开“配置平台” > “蓝鲸” 业务 > 选中新增的机器 > 点击“追加至” > “业务模块”
  2. 选择“公共组件” > “kafka” > “下一步”
  3. 确认变更内容 > “确认追加”
作者

Sony Dog

发布于

2023-04-13

更新于

2023-12-26

许可协议

CC BY-NC-SA 4.0