
# ALM-38001 Kafka磁盘容量不足
#### 告警解释
系统按60秒周期检测Kafka磁盘空间使用率，并把实际磁盘使用率和阈值相比较。磁盘使用率默认提供一个阈值范围。当检测到磁盘使用率高于阈值时产生该告警。
用户可通过"运维 \> 告警 \> 阈值设置"，在服务列表下面，选择"Kafka \> 磁盘 \> Broker磁盘使用率 (Broker)"修改阈值。
平滑次数为1，Kafka磁盘使用率小于或等于阈值时，告警恢复；平滑次数大于1，Kafka磁盘使用率小于或等于阈值的80%时，告警恢复。
#### 告警属性
| 告警ID  | 告警级别                                              | 是否自动清除 |
|:---|:---|:---|
| 38001 | 重要（默认为85%） 紧急（默认为90%） | 是      |
   
#### 告警参数
| 参数名称              | 参数含义                  |
|:---|:---|
| 来源                | 产生告警的集群名称。            |
| 服务名               | 产生告警的服务名称。            |
| 角色名               | 产生告警的角色名称。            |
| 主机名               | 产生告警的主机名。             |
| 设备分区名             | 产生告警的磁盘分区。            |
| Trigger Condition | 系统当前指标取值满足自定义的告警设置条件。 |
   
#### 对系统的影响
磁盘容量不足会导致Kafka写入数据失败。
#### 可能原因
- 用于存储Kafka数据的磁盘配置（如磁盘数目、磁盘大小等），无法满足当前业务数据流量，导致磁盘使用率达到上限。
- 数据保存时间配置过长，数据累积达到磁盘使用率上限。
- 业务规划不合理，导致数据分配不均，使部分磁盘达到使用率上限。
 
#### 处理步骤
**检查Kafka数据的磁盘配置。**
1. 登录MRS集群Manager管理界面，选择"运维 \> 告警 \> 告警"。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 在告警列表中查看该告警详细信息，获取上报告警的主机名和设备分区名。
3. 在Manager界面选择"主机"，单击[步骤 2]中获取的主机名称。
4. 检查"磁盘"区域中是否包含该告警上报的磁盘分区名称。 
   - 是，执行[步骤 5]。
   
   - 否，在告警列表中，单击该告警操作列的"清除"，手动清除该告警，操作结束。
   
   
   
   
5. 检查"磁盘"区域中包含该告警中的磁盘分区使用率是否达到百分之百。
   
   - 是，参考[参考信息]进行处理。
   
   - 否，执行[步骤 6]。
   
   
   
   
**检查Kafka数据保存时间配置。**
6. 选择"集群 \> 服务 \> Kafka \> 配置 \> 全部配置"。
7. 搜索并查看"disk.adapter.enable"参数是否配置为"true"。 
   "disk.adapter.enable"参数表示是否开启控制磁盘自适应调整功能，默认值为"false"。
   - 是，执行[步骤 9]。
   
   - 否，执行[步骤 8]。
   
   
   
   
8. 将"disk.adapter.enable"配置为"true"，开启该功能。然后搜索并查看"adapter.topic.min.retention.hours"所配置的数据最短保存周期是否合理。
   
   - 是，执行[步骤 9]。
   
   - 否，根据业务需求合理调整数据保存周期。
   
   
   ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/caution_3.0-zh-cn.png)
   启用磁盘自适应功能可能导致Topic的历史数据被清除，如果有个别Topic不能做保存周期调整，请搜索"disk.adapter.topic.blacklist"参数，将Topic配置在参数值中。该参数表示设置执行磁盘自适应调整时，不做处理的Topic列表。
   
   
9. 等待10分钟，查看故障磁盘的使用率是否有减少。
   
   - 是，继续等待直到告警消除。
   
   - 否，执行[步骤 10]。
   
   
   
   
**检查Kafka数据规划。**
10. 选择"集群 \> 服务 \> Kafka \> 实例"，单击上报告警实例主机名对应的"Broker"角色。单击图表区域右上角的下拉菜单，选择"定制"。
11. 在弹出的"定制"对话框中，选择"磁盘 \> Broker磁盘使用率"，并单击"确定"。
    
    关于Kafka磁盘使用情况信息会被显示。
    图1Broker磁盘使用率   
    ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001209908357.png "点击放大")
    
    
12. 根据[步骤 11]的显示信息，查看是否只有[步骤 2]中上报告警的磁盘分区。
    
    - 是，执行[步骤 14]。
    
    - 否，执行[步骤 15]。
    
    
    
    
13. 重新进行磁盘规划，参考[Kafka业务规格说明](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1036.html)挂载新的磁盘。
14. 在Manager界面选择"集群 \> 服务 \> Kafka \> 实例"，单击上报告警实例主机名对应的"Broker"角色，选择"实例配置"，搜索并重新配置"log.dirs"参数，增加其他磁盘相应路径，并保存配置。
    
    在Kafka组件"实例"页面，勾选上报告警实例主机名对应的"Broker"角色，选择"更多 \> 滚动重启实例"，根据界面提示重启当前Kafka实例。
    ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
    如果当前为滚动重启且当前Topic存在多副本，则对业务无影响。否则重启期间会导致Kafka服务不可用，依赖该服务的上层服务也将受到影响。
    
    
15. 在Manager界面，选择"集群 \> 服务 \> Kafka \> 配置 \> 全部配置"，搜索"log.retention.hours"参数，查看Kafka配置的数据保存时间配置，根据业务需求和业务量权衡，考虑是否需要调小数据保存时间。
    
    - 是，执行[步骤 16]。
    
    - 否，执行[步骤 17]。
    
    
    
    
16. 根据实际情况调小"log.retention.hours"参数值。
    
    ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
    - "log.retention.hours"参数值为Topic默认的数据保存时间。
    
    - 对于单独配置数据保存时间的Topic，修改Kafka服务配置页面上配置的数据保存时间不生效。
    
    
    
    - 如果需要对某个Topic单独配置，可以使用Kafka客户端命令行，来单独配置该Topic。例如：
      ```
      kafka-topics.sh --zookeeper ZooKeeper地址:2181/kafka --alter --topic Topic名称 --config retention.ms=保存时间
      ```
      
     
    
    
17. 确认是否由于某些Topic的Partition配置不合理导致部分磁盘使用率达到上限（例如：数据量非常大的Topic的Partition数目小于配置的磁盘个数，导致各磁盘上数据分配无法均匀，进而部分磁盘达到使用率上限）。
    
    ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
    如果不清楚哪些Topic业务数据量较大，可以参考如下步骤查询：
    1. 根据[步骤 2]中获取到的主机节点信息，登录实例节点。
       登录集群内节点具体操作，请参考[登录MRS集群节点](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0083.html)。
       
    
    2. 进入对应的数据目录（即[步骤 14]中"log.dirs"修改之前的配置路径）。
    
    3. 执行以下命令查看该目录下哪些Topic的Partition目录占用的磁盘空间比较大。 **du -h --max-depth=1 ./**
       
     
    - 是，执行[步骤 18]。
    
    - 否，执行[步骤 19]。
    
    
    
    
18. 通过Kafka客户端对Topic的Partition进行扩展。
    
    1. 以客户端安装用户，登录安装客户端的节点。
    
    2. 执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，具体以实际替换。
       ```
       cd /opt/client
       ```
       
    
    3. 执行以下命令配置环境变量。
       ```
       source bigdata_env
       ```
       
    
    4. 执行以下命令，进行用户认证。（集群未启用Kerberos认证（普通模式）时跳过此步骤）
       ```
       kinit 组件业务用户
       ```
       
    
    5. 执行以下命令进入Kafka客户端"bin"目录。
       ```
       cd Kafka/kafka/bin
       ```
       
    
    6. 执行以下命令对Topic的Partition进行扩展。
       ```
       kafka-topics.sh --zookeeper ZooKeeper地址:2181/kafka --alter --topic Topic名称 --partitions=新Partition数目
       ```
       
    
    
    ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/note_3.0-zh-cn.png)
    - 新Partition数目：建议配置为Kafka数据磁盘数量的倍数。
    
    - 获取ZooKeeper节点业务IP及端口。
      1. 选择"集群 \> 服务 \> ZooKeeper \> 实例"，查看并记录任意一个ZooKeeper角色实例的业务IP地址。
      
      2. 选择"配置 \> 全部配置"，搜索"clientPort"，查看并记录端口号。 创建LTS版本类型集群时，可以选择"组件端口"为"开源"场景或"定制"场景，选择"开源"时ZooKeeper默认端口为2181，选择"定制"时ZooKeeper默认端口为24002。
         
       
    
    - 当前步骤修改可能不会很快解决当前告警，需要结合[步骤 10]中的数据保存时间逐渐均衡数据。
     
    
    
19. 根据实际情况考虑是否需要扩容磁盘。
    
    建议当前Kafka磁盘使用率超过80%时，需要进行扩容。
    - 是，执行[步骤 20]。
    
    - 否，执行[步骤 21]。
    
    
    
    
20. 联系运维人员扩展磁盘容量，扩展后检查告警是否消失。
    
    - 是，操作结束。
    
    - 否，执行[步骤 22]。
    
    
    
    
21. 检查告警是否清除。
    
    - 是，操作结束。
    
    - 否，执行[步骤 22]。
    
    
    
    
**收集故障信息。**
22. 在FusionInsight Manager界面，选择"运维 \> 日志 \> 下载"。
23. 在"服务"中勾选待操作集群的"Kafka"。
24. 单击右上角的![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0263895823.png)设置日志收集的"开始时间"和"结束时间"分别为告警产生时间的前后10分钟，单击"下载"。
25. 请联系运维人员，并发送已收集的故障日志信息。
 
#### 告警清除
此告警修复后，系统会自动清除此告警，无需手工清除。
 #### 参考信息
1. 登录MRS集群Manager，选择"集群 \> 服务 \> Kafka \> 实例"，勾选运行状态为"正在恢复"的Broker实例，选择"更多 \> 停止实例"，并记录实例所在节点的管理IP地址。单击该Broker角色名称，在"实例配置"页面中选择"全部配置"，搜索"broker.id"参数并记录取值。
2. 以**root** 用户登录记录的管理IP地址，并执行**df -lh** 命令，查看磁盘占用率为100%的挂载目录。登录集群内节点具体操作，请参考[登录MRS集群节点](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0083.html)。
   
   ```
   df -lh
   ```
   例如占用率为100%的挂载目录为"${BIGDATA_DATA_HOME}/kafka/data1"。
   
   
3. 执行以下命令进入该目录，查看该目录下各文件夹的大小。 
   ```
   cd 挂载目录
   ```
   ```
   du -sh *
   ```
   查看是否存在除"kafka-logs"目录外的其他文件，并判断是否可以删除或者迁移。
   - 是，删除或者迁移相关数据，然后执行[步骤 8]。
   
   - 否，执行[步骤 4]。
   
   
   
   
4. 执行以下命令进入"kafka-logs"目录，并查看各文件夹的大小。
   
   ```
   cd 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文件夹移动到目的目录下，移动完成后执行以下命令修改Partition目录属组。 
   ```
   chown omm:wheel -R Partition目录
   ```
   
   
8. 登录MRS集群Manager，选择"集群 \> 服务 \> Kafka \> 实例"，勾选已停止的Broker实例，单击"启动实例"启动停止的Broker实例。
9. 等待5至10分钟后查看Broker实例的运行状态是否为"良好"。 
   - 是，修复完成后按照[ALM-38001 Kafka磁盘容量不足](https://support.huaweicloud.com/usermanual-mrs/ALM-38001.html)告警指导彻底解决磁盘容量不足问题。
   
   - 否，联系运维人员。
   
   
   
   
 
