
# ALM-38009 Broker磁盘IO繁忙（适用于MRS 3.1.0之后版本）
#### 告警解释
MRS 3.6.0.1及之后版本：
系统每60秒周期性检测Kafka各个磁盘的IO情况，当检测到某个Broker上的Kafka数据目录磁盘IO超出阈值（默认85%）时，产生该告警。
平滑次数为5，当该磁盘IO低于阈值（默认85%）时，告警恢复。
MRS 3.6.0及之前版本：
系统每60秒周期性检测Kafka各个磁盘的IO情况，当检测到某个Broker上的Kafka数据目录磁盘IO超出阈值（默认80%）时，产生该告警。
平滑次数为3，当该磁盘IO低于阈值（默认80%）时，告警恢复。
#### 告警属性
| 告警ID  | 告警级别 | 是否可自动清除 |
|:---|:---|:---|
| 38009 | 重要   | 是       |
   
#### 告警参数
| 类别   | 参数名称   | 参数含义               |
|:---|:---|:---|
| 定位信息 | 来源     | 产生告警的集群名称。         |
| 定位信息 | 服务名    | 产生告警的服务名称。         |
| 定位信息 | 角色名    | 产生告警的角色名称。         |
| 定位信息 | 主机名    | 产生告警的主机名。          |
| 定位信息 | 数据目录名称 | Kafka磁盘IO频繁的数据目录名称 |
   
#### 对系统的影响
Partition所在的磁盘分区IO过于繁忙，产生告警的Kafka Topic上可能无法写入数据。
#### 可能原因
- Topic副本数配置过多。
- 生产者消息批量写入磁盘的参数设置不合理。该Topic承担的业务流量过大，当前Partition的设置不合理。
 
#### 处理步骤
**检查Topic副本数配置。**
1. 在FusionInsight Manager首页，选择"运维 \> 告警 \> 告警"，查看此告警的详细信息，查看定位信息中上报告警的"主机名"。
2. 在FusionInsight Manager首页，选择"集群 \> 服务 \> Kafka \> KafkaTopic监控"，选择按照"副本数量"降序排序，查看是否存在副本数量值大于3且流量较高的Topic。 
   - 是，执行[步骤 3]。
   
   - 否，执行[步骤 5]。
   
   
   
   
3. 如果存在，则单击该Topic名称，确认该Topic所有Partition的所在主机中是否包含告警信息中（通过[步骤 1]中查询）显示的"主机名"对应的IP地址，如果包含则考虑减少该Topic的复制因子（减少为3）。
   
   执行以下操作，在Kafka客户端对Kafka Topic的副本进行重新规划：
   1. 以客户端安装用户，登录Kafka客户端安装节点。
   
   2. 执行以下命令，切换到客户端目录，例如"/opt/client/Kafka/kafka/bin"。
      ```
      cd /opt/client/Kafka/kafka/bin
      ```
      
   
   3. 执行以下命令，配置环境变量。
      ```
      source /opt/client/bigdata_env
      ```
      
   
   4. 执行以下命令，进行用户认证。（普通模式跳过此步骤）
      ```
      kinit 组件业务用户
      ```
      
   
   5. 执行以下命令，对Kafka Topic的副本进行重新规划。
      ```
      kafka-reassign-partitions.sh --bootstrap-server <Kafka集群IP:21007> --command-config ../config/client.properties --reassignment-json-file {manual assignment json file path} --execute
      ```
      Kafka集群IP可以登录Manager页面，选择"集群 \> 服务 \> Kafka \> 实例"，查看并记录任意一个Broker角色实例的业务IP地址。Kafka集群IP端口号，集群已启用Kerberos认证（安全模式）下是21007，集群未启用Kerberos认证（普通模式）下是21005。
      例如：
      ```
      /opt/client/Kafka/kafka/bin/kafka-reassign-partitions.sh --bootstrap-server 192.168.0.90:21007,192.168.0.91:21007,192.168.0.92:21007 --command-config /opt/client/Kafka/kafka/config/client.properties --reassignment-json-file expand-cluster-reassignment.json --execute
      ```
      在"expand-cluster-reassignment.json"文件中描述该Topic的Partition迁移到哪些Broker，json文件中的内容格式为：
      ```
      {"partitions":[{"topic": "topicName","partition": 1,"replicas": [1,2,3] }],"version":1}
      ```
      
   
   
   
   
4. 观察一段时间，检查告警是否清除。 
   - 是，操作结束。
   
   - 否，执行[步骤 5]。
   
   
   
   
**检查Topic的Partition规划设置** **。**
5. 在"KafkaTopic监控"页面单击每一个Topic的"Topic的字节流量 \> Topic输入的字节流量"，统计出"Topic输入的字节流量"值最大的Topic。查看该Topic有哪些Partition以及这些Partition所在的主机信息。
6. 登录到[步骤 5]查询到的主机，执行以下命令查看每个磁盘的最后一个指标"%util"：
   
   ```
   iostat -d -x
   ```
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002707968882.png "点击放大")
   - 各个磁盘的"%util"指标都超出阈值（默认值为80%），则考虑对Kafka磁盘进行扩容，扩容后，参考[步骤 3]，对Topic的Partition重新规划。
   
   - 各个磁盘的"%util"指标差别较大，查看Kafka的磁盘分区配置信息。 例如：${BIGDATA_HOME}/FusionInsight_HD_*\** /*x_x*_Broker/etc/server.properties文件中的log.dirs配置值。
     执行如下命令查看命令输出的Filesystem信息：
     ```
     df -h log.dirs配置值
     ```
     执行结果如下：
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002737609981.png "点击放大")
     
   
   - Filesystem所在的分区与"%util"指标比较高的分区相匹配，则考虑在空闲的磁盘上规划Kafka分区，并将log.dirs设置为空闲磁盘目录，然后参考[步骤 3]，对Topic的Partition重新规划，保证该Topic的Partition均匀分布到各个磁盘。
    
   
   
7. 观察一段时间，检查告警是否清除。 
   - 告警清除，操作结束。
   
   - 告警没有清除，重复执行[步骤 5]\~[步骤 6]三次。重复执行次数达到上限，执行[步骤 8]。
   
   
   
   
8. 观察一段时间，检查告警是否清除。
   
   - 是，操作结束。
   
   - 否，执行[步骤 9]。
   
   
   
   
**收集故障信息。**
9. 在FusionInsight Manager界面，选择"运维 \> 日志 \> 下载"。
10. 在"服务"中勾选待操作集群的"Kafka"。
11. 单击右上角的编辑按钮设置日志收集的"开始时间"和"结束时间"分别为告警产生时间的前后10分钟，单击"下载"。
12. 请联系运维人员，并发送已收集的故障日志信息。
 
#### 告警清除
此告警修复后，系统会自动清除此告警，无需手工清除。
#### 参考信息
不涉及。
