# ALM-38021 Kafka不可用Partition总数超过阈值
#### 告警解释
系统每60秒周期性检测Kafka服务不可用的Partition数，当连续3次检测到该数值超出阈值时（默认阈值为0）产生该告警。
本章节仅适用于MRS 3.7.0-LTS及之后版本。
#### 告警属性
| 告警ID        | 告警级别    | 是否可自动清除 |
|:---|:---|:---|
| 38021 | 紧急 | 是  |
   
#### 告警参数
| 类别   | 参数名称     | 参数含义                       |
|:---|:---|:---|
| 定位信息 | 来源  | 产生告警的集群名称。           |
| 定位信息 | 服务名 | 产生告警的服务名称。                 |
| 定位信息 | 角色名  | 产生告警的角色名称。              |
| 附加信息    | 触发条件  | 系统当前指标取值满足自定义的告警设置条件。 |
   
#### 对系统的影响
Kafka存在不可用的Partition时，该Partition的数据将无法被写入和读取，导致相关业务受影响。
#### 可能原因
- Broker节点故障或进程异常退出，导致Partition副本下线。
- Broker端JVM GC停顿过长，导致Broker心跳超时被标记为离线，且无其他可用副本。
- 磁盘空间写满或故障，导致副本数据损坏或无法访问。
- 网络分区导致Controller与Broker之间通信中断，Partition的元数据无法正常同步。
 
#### 处理步骤
**检查Broker实例是否故障。**
1. 登录MRS集群Manager页面，选择"集群 \> 服务 \> Kafka \> 实例"，进入Kafka实例页面。 
   登录集群Manager具体操作，请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 查看是否有故障的Broker实例。
   
   - 是，记录故障节点主机名，执行[步骤 3]。
   
   - 否，执行[步骤 5]。
   
   
   
   
3. 选择"运维 \> 告警 \> 告警"，查看所有告警信息中是否有[步骤 2]中节点主机对应的其他故障告警，根据对应的告警指导进行处理。
4. 选择"集群 \> 服务 \> Kafka \> 实例"，进入Kafka实例页面。
5. 查看所有Broker实例中是否有已停止的实例。
   
   - 是，执行[步骤 6]。
   
   - 否，执行[步骤 8]。
   
   
   
   
6. 勾选所有已停止的Broker实例，单击"启动实例"，等待启动完成。
7. 等待5分钟，观察界面告警是否清除。 
   - 是，处理完毕。
   
   - 否，执行[步骤 8]。
   
   
   
   
**检查Broker GC情况。**
8. 在Manager页面，选择"运维 \> 告警 \> 告警"，查看是否存在"Broker进程垃圾回收（GC）时间超过阈值"告警。
   
   - 是，参考"ALM-38005 Broker进程垃圾回收（GC）时间超过阈值"告警处理步骤进行处理。
   
   - 否，执行[步骤 10]。
   
   
   
   
9. 等待5分钟，观察界面告警是否清除。 
   是，处理完毕。
   否，执行[步骤 10]。
   
   
**检查磁盘状态。**
10. 选择"运维 \> 告警 \> 告警"，查看是否存在"慢盘故障"或"磁盘不可用"或"Kafka磁盘容量不足"告警。
    
    - 是，参考"ALM-12033 慢盘故障"、"ALM-12063 磁盘不可用"、"ALM-38001 Kafka磁盘容量不足"告警处理步骤进行处理。
    
    - 否，执行[步骤 12]。
    
    
    
    
11. 等待5分钟，观察界面告警是否清除。 
    - 是，处理完毕。
    
    - 否，执行[步骤 12]。
    
    
    
    
**检查网络连通性。**
12. 选择"运维 \> 告警 \> 告警"，查看是否存在"节点间网络互通异常"告警。
    
    - 是，参考"ALM-12089 节点间网络互通异常"告警处理步骤进行处理。
    
    - 否，执行[步骤 14]。
    
    
    
    

13. 等待5分钟，观察界面告警是否清除。 
    - 是，处理完毕。
    
    - 否，执行[步骤 14]。
    
    
    
    
**收集故障信息。**
14. 收集不可用分区与Broker信息。
    
    1. 以客户端安装用户，登录已安装Kafka客户端的节点。
    
    2. 切换到Kafka客户端安装目录，例如"/opt/hadoopclient"
       ```
       cd /opt/hadoopclient
       ```
       
    
    3. 执行以下命令，配置环境变量。
       ```
       source bigdata_env
       ```
       
    
    4. 执行以下命令，进行用户认证（普通模式跳过此步骤）。
       ```
       kinit 组件业务用户
       ```
       
    
    5. 执行以下命令，切换到Kafka目录。
       ```
       cd Kafka/kafka
       ```
       
    
    6. 使用"kafka-topics.sh"查询不可用的分区详情并记录。
       ```
       bin/kafka-topics.sh --describe --bootstrap-server <Kafka集群IP:21007> --unavailable-partitions --command-config config/client.properties
       ```
       Kafka集群IP及端口可参考以下操作获取：
       1. 在Manager页面，选择"集群 \> 服务 \> Kafka \> 实例"，查看并记录任意一个Broker角色实例的业务IP地址。
       
       2. 选择"配置 \> 全部配置"，并根据集群模式获取端口号：
          - 集群已启用Kerberos认证（安全模式）：搜索"sasl.port"参数，查看并记录端口号，默认为21007。
          
          - 集群未启用Kerberos认证（普通模式）：搜索"port"参数，查看并记录端口号，默认为9092。
           
         
    
    7. 使用"kafka-broker-info.sh"查询当前集群的Broker信息并记录。
       ```
       bin/kafka-broker-info.sh --zookeeper ZooKeeper的任意一个节点的业务IP:clientPort/kafka
       ```
       ZooKeeper节点业务IP及端口可参考以下操作获取：
       1. 在Manager页面，选择"集群 \> 服务 \> ZooKeeper \> 实例"，查看并记录任意一个ZooKeeper角色实例的业务IP地址。
       
       2. 选择"配置 \> 全部配置"，搜索"clientPort"，查看并记录端口号。 创建LTS版本类型集群时，可以选择"组件端口"为"开源"场景或"定制"场景，选择"开源"时ZooKeeper默认端口为2181，选择"定制"时ZooKeeper默认端口为24002。
          
         
    
    
    
    
15. 在MRS Manager界面，选择"运维 \> 日志 \> 下载"。
16. 在"服务"框中勾选待操作集群的"Kafka"。
17. 单击右上角的时间编辑按钮，设置日志收集的"开始时间"和"结束时间"分别为告警产生时间的前后10分钟，单击"下载"。
18. 请联系运维人员，并发送已收集的客户端查询结果与故障日志信息。
 
#### 告警清除
此告警修复后，系统会自动清除此告警，无需手工清除。
#### 参考信息
不涉及。
