更新时间:2024-07-24 GMT+08:00

配置Kafka数据均衡工具

操作场景

该任务指导管理员根据业务需求,在客户端中执行Kafka均衡工具来均衡Kafka集群的负载,一般用于节点的退服、入服以及负载均衡的场景。

本章节内容适用于MRS 3.x及后续版本。3.x之前版本请参考均衡Kafka扩容节点后数据

前提条件

  • MRS集群管理员已明确业务需求,并准备一个Kafka管理员用户(属于kafkaadmin组,普通模式不需要)。
  • 已安装Kafka客户端。

操作步骤

  1. 以客户端安装用户,登录已安装Kafka客户端的节点。
  2. 切换到Kafka客户端安装目录,例如“/opt/client”。

    cd /opt/client

  3. 执行以下命令,配置环境变量。

    source bigdata_env

  4. 执行以下命令,进行用户认证(普通模式跳过此步骤)。

    kinit 组件业务用户

  5. 执行以下命令,切换到Kafka客户端安装目录。

    cd Kafka/kafka

  6. 使用“kafka-balancer.sh”进行用户集群均衡,常用命令如下:

    • 使用--run命令执行集群均衡:

      ./bin/kafka-balancer.sh --run --zookeeper <ZooKeeper的任意一个节点的业务IP:zkPort/kafka>--bootstrap-server<Kafka集群IP: port> --throttle 10000000 --consumer-config config/consumer.properties --enable-az-aware --show-details

      该命令包含均衡方案的生成和执行两部分,其中--show-details为可选参数,表示是否打印方案明细,--throttle表示均衡方案执行时的带宽限制,单位:bytes/sec, --enable-az-aware为可选参数,表明生成均衡方案时,开启跨AZ特性,使用此参数时,请务必保证集群已开启跨AZ特性。

    • 使用--run命令执行节点退服:

      ./bin/kafka-balancer.sh --run --zookeeper <ZooKeeper的任意一个节点的业务IP:zkPort/kafka>--bootstrap-server<Kafka集群IP: port>--throttle 10000000 --consumer-config config/consumer.properties --remove-brokers<BrokerId列表> --enable-az-aware --force

      其中--remove-brokers表示要删除的BrokerId列表,多个间用逗号分隔,--force参数为可选参数,表示忽略磁盘使用率告警,强制生成迁移方案, -enable-az-aware为可选参数,表明生成均衡方案时,开启跨AZ特性,使用此参数时,请务必保证集群已开启跨AZ特性。

      此退服命令会将待退服Broker节点上的数据迁移至其他Broker节点。

    • 查看执行状态:

      ./bin/kafka-balancer.sh --status --zookeeper <ZooKeeper的任意一个节点的业务IP:zkPort/kafka>

    • 生成均衡方案:

      ./bin/kafka-balancer.sh --generate --zookeeper <ZooKeeper的任意一个节点的业务IP:zkPort/kafka>--bootstrap-server<Kafka集群IP:port> --consumer-config config/consumer.properties --enable-az-aware

      该命令仅根据集群当前状态生成迁移方案,并打印到控制台, 其中--enable-az-aware为可选参数,表明生成迁移方案时,开启跨AZ特性,使用此参数时,请务必保证集群已开启跨AZ特性。

    • 清理中间状态

      ./bin/kafka-balancer.sh --clean --zookeeper <ZooKeeper的任意一个节点的业务IP:zkPort/kafka>

      一般在迁移没有正常执行完成时用来清理ZooKeeper上的中间状态信息。

      Kafka集群IP端口号安全模式下是21007,普通模式下是9092。

异常情况处理

在使用Kafka均衡工具进行Partition迁移的过程中,如果出现集群中Broker故障导致均衡工具的执行进度阻塞,这时需要人工介入来恢复,分为以下几种场景:

  • 存在Broker因为磁盘占有率达到100%导致Broker故障的情况。
    1. 登录FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > Kafka > 实例”,将运行状态为“正在恢复”的Broker实例停止并记录实例所在节点的管理IP地址以及对应的“broker.id”,该值可通过单击角色名称,在“实例配置”页面中选择“全部配置”,搜索“broker.id”参数获取。
    2. root用户登录记录的管理IP地址,并执行df -lh命令,查看磁盘占用率为100%的挂载目录,例如“${BIGDATA_DATA_HOME}/kafka/data1”
    3. 进入该目录,执行du -sh *命令,查看该目录下各文件夹的大小。查看是否存在除“kafka-logs”目录外的其他文件,并判断是否可以删除或者迁移。
      • 是,删除或者迁移相关数据,然后执行8
      • 否,执行4
    4. 进入“kafka-logs”目录,执行du -sh *命令,选择一个待移动的Partition文件夹,其名称命名规则为“Topic名称-Partition标识”,记录Topic及Partition。
    5. 修改“kafka-logs”目录下的“recovery-point-offset-checkpoint”“replication-offset-checkpoint”文件(两个文件做同样的修改)。
      1. 减少文件中第二行的数字(若移出多个目录,则减少的数字为移出的目录个数)。
      2. 删除待移出的Partition所在的行(行结构为“Topic名称 Partition标识 Offset”,删除前先将该行数据保存,后续此内容还要添加到目的目录下的同名文件中)。
    6. 修改目的数据目录下(例如:“${BIGDATA_DATA_HOME}/kafka/data2/kafka-logs”)的“recovery-point-offset-checkpoint”“replication-offset-checkpoint”文件(两个文件做同样的修改)。
      • 增加文件中第二行的数字(若移入多个Partition目录,则增加的数字为移入的Partition目录个数)。
      • 添加待移入的Partition行到文件末尾(行结构为“Topic名称 Partition标识 Offset”,直接复制5中保存的行数据即可)。
    7. 移动数据,将待移动的Partition文件夹移动到目的目录下,移动完成后执行chown omm:wheel -R Partition目录命令修改Partition目录属组。
    8. 登录FusionInsight Manager,选择“集群 > 服务 > Kafka > 实例”,启动停止的Broker实例。
    9. 等待5至10分钟后查看Broker实例的运行状态是否为“良好”
      • 是,修复完成后按照“ALM-38001 Kafka磁盘容量不足”告警指导彻底解决磁盘容量不足问题。
      • 否,联系运维人员。

    按照上述步骤将故障Broker进行恢复后,阻塞的均衡任务会继续执行,可使用--status命令来查看任务的执行进度。

  • 存在由其他原因导致的Broker故障,且问题场景单一明确,短时间内可以恢复Broker的情况。
    1. 根据问题根因指定恢复方案,恢复故障Broker。
    2. 故障Broker恢复后,阻塞的均衡任务会继续执行,可使用--status命令来查看任务的执行进度。
  • 存在由其他原因导致的Broker故障,且问题场景复杂,短时间内无法恢复Broker的情况。
    1. 执行kinit Kafka管理员用户。(普通模式跳过此步骤)
    2. 使用zkCli.sh -server <ZooKeeper集群业务IP:zkPort/kafka>登录ZooKeeper Shell。
    3. 执行addauth krbgroup。(普通模式跳过此步骤)
    4. 删除“/admin/reassign_partitions”目录和“/controller”目录。
    5. 通过以上步骤强行终止迁移,待集群恢复后使用kafka-reassign-partitions.sh命令手动将中间过程中导致的多余的副本删除。