Kafka均衡工具使用说明
操作场景
该任务指导管理员根据业务需求,在客户端中执行Kafka均衡工具来均衡Kafka集群的负载,一般用于节点的退服、入服以及负载均衡的场景。
前提条件
- 系统管理员已明确业务需求,并准备一个Kafka管理员用户(属于kafkaadmin组,普通模式不需要)。
- 已安装Kafka客户端。
操作步骤
- 以客户端安装用户,登录已安装Kafka客户端的节点。
- 切换到Kafka客户端安装目录,例如“/opt/kafkaclient”。
- 执行以下命令,配置环境变量。
source bigdata_env
- 执行以下命令,进行用户认证(普通模式跳过此步骤)。
kinit 组件业务用户
- 执行以下命令,切换到Kafka客户端安装目录。
cd Kafka/kafka
- 使用“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 --show-details
该命令包含均衡方案的生成和执行两部分,其中--show-details为可选参数,表示是否打印方案明细,--throttle表示均衡方案执行时的带宽限制,单位:bytes/sec。
- 使用--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列表> --force
其中--remove-brokers表示要删除的BrokerId列表,多个间用逗号分隔,--force参数为可选参数,表示忽略磁盘使用率告警,强制生成迁移方案。
- 查看执行状态:
./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
该命令仅根据集群当前状态生成迁移方案,并打印到控制台。
- 清理中间状态
./bin/kafka-balancer.sh --clean --zookeeper <ZooKeeper的任意一个节点的业务IP:zkPort/kafka>
一般在迁移没有正常执行完成时用来清理ZooKeeper上的中间状态信息。
Kafka集群IP端口号安全模式下是21007,普通模式下是9092。
- 使用--run命令执行集群均衡:
异常情况处理
在使用Kafka均衡工具进行Partition迁移的过程中,如果出现集群中Broker故障导致均衡工具的执行进度阻塞,这时需要人工介入来恢复,分为以下几种场景:
- 存在Broker因为磁盘占有率达到100%导致Broker故障的情况。
- 登录FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > Kafka > 实例”,将运行状态为“正在恢复”的Broker实例停止并记录实例所在节点的管理IP地址以及对应的“broker.id”,该值可通过单击角色名称,在“实例配置”页面中选择“全部配置”,搜索“broker.id”参数获取。
- 以root用户登录记录的管理IP地址,并执行df -lh命令,查看磁盘占用率为100%的挂载目录,例如“${BIGDATA_DATA_HOME}/kafka/data1”。
- 进入该目录,执行du -sh *命令,查看该目录下各文件夹的大小。查看是否存在除“kafka-logs”目录外的其他文件,并判断是否可以删除或者迁移。
- 进入“kafka-logs”目录,执行du -sh *命令,选择一个待移动的Partition文件夹,其名称命名规则为“Topic名称-Partition标识”,记录Topic及Partition。
- 修改“kafka-logs”目录下的“recovery-point-offset-checkpoint”和“replication-offset-checkpoint”文件(两个文件做同样的修改)。
- 减少文件中第二行的数字(若移出多个目录,则减少的数字为移出的目录个数)。
- 删除待移出的Partition所在的行(行结构为“Topic名称 Partition标识 Offset”,删除前先将该行数据保存,后续此内容还要添加到目的目录下的同名文件中)。
- 修改目的数据目录下(例如:“${BIGDATA_DATA_HOME}/kafka/data2/kafka-logs”)的“recovery-point-offset-checkpoint”和“replication-offset-checkpoint”文件(两个文件做同样的修改)。
- 增加文件中第二行的数字(若移入多个Partition目录,则增加的数字为移入的Partition目录个数)。
- 添加待移入的Partition行到文件末尾(行结构为“Topic名称 Partition标识 Offset”,直接复制5中保存的行数据即可)。
- 移动数据,将待移动的Partition文件夹移动到目的目录下,移动完成后执行chown omm:wheel -R Partition目录命令修改Partition目录属组。
- 登录FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > Kafka > 实例”,启动停止的Broker实例。
- 等待5至10分钟后查看Broker实例的运行状态是否为“良好”。
- 是,修复完成后按照“ALM-38001 Kafka磁盘容量不足”告警指导彻底解决磁盘容量不足问题。
- 否,联系运维人员。
按照上述步骤将故障Broker进行恢复后,阻塞的均衡任务会继续执行,可使用--status命令来查看任务的执行进度。
- 存在由其他原因导致的Broker故障,且问题场景单一明确,短时间内可以恢复Broker的情况。
- 根据问题根因指定恢复方案,恢复故障Broker。
- 故障Broker恢复后,阻塞的均衡任务会继续执行,可使用--status命令来查看任务的执行进度。
- 存在由其他原因导致的Broker故障,且问题场景复杂,短时间内无法恢复Broker的情况。
- 执行kinit Kafka管理员用户。(普通模式跳过此步骤)
- 使用zkCli.sh -server <ZooKeeper集群业务IP:zkPort/kafka>登录ZooKeeper Shell。
- 执行addauth krbgroup。(普通模式跳过此步骤)
- 删除“/admin/reassign_partitions”目录和“/controller”目录。
- 通过以上步骤强行终止迁移,待集群恢复后使用kafka-reassign-partitions.sh命令手动将中间过程中导致的多余的副本删除。