文档首页/
    
      
      MapReduce服务 MRS/
      
      
        
        
        用户指南(安卡拉区域)/
        
        
        故障排除/
        
        
        使用Kafka/
        
      
      Producer偶现发送数据失败,日志提示Too many open files in system
    
  
  
    
        更新时间:2025-09-30 GMT+08:00
        
          
          
        
      
      
      
      
      
      
      
      
  
      
      
      
        
Producer偶现发送数据失败,日志提示Too many open files in system
问题背景与现象
在使用Producer向Kafka发送数据功能时,发现客户端发送失败。
  图1 Producer发送数据失败
  
 
 
 可能原因
- Kafka服务异常。
 - 网络异常。
 - Kafka Topic异常。
 
原因分析
- 
    
    
- MRS Manager界面操作:登录MRS Manager,依次选择 "服务管理 > Kafka ,查看当前Kafka状态,发现状态为良好,且监控指标内容显示正确。
 - FusionInsight Manager界面操作:登录FusionInsight Manager,选择“集群 > 待操作集群的名称 > 服务 > Kafka,
      
查看当前Kafka状态,发现状态为良好,且监控指标内容显示正确。
 
 - 查看SparkStreaming日志中提示错误的Topic信息。
    
执行Kafka相关命令,获取Topic分布信息和副本同步信息,观察返回结果。
kafka-topics.sh --describe --zookeeper <zk_host:port/chroot>
如图2所示,发现对应Topic状态正常。所有Partition均存在正常Leader信息。
 - 通过telnet命令,查看是否可以连接Kafka。
    
    
如果无法telnet成功,请检查网络安全组与ACL。
 - 通过SSH登录Kafka Broker。
    
通过cd /var/log/Bigdata/kafka/broker命令进入日志目录。
查看server.log发现如下日志抛出java.io.IOException: Too many open files in system。
图3 日志异常
     - 通过lsof命令查看当前节点Kafka进程句柄使用情况,发现占用的句柄数达到了47万。
    图4 句柄数
     - 排查业务代码,不停地new新的producer对象,未正常关闭。
 
解决办法
- 停止当前应用,保证服务端句柄不再疯狂增加影响服务正常运行。
 - 优化应用代码,解决句柄泄露问题。
    
    
建议:全局尽量使用一个Producer对象,在使用完成之后主动调用close接口进行句柄关闭。
 
   父主题: 使用Kafka
  
 
    
      