1. 线上kafka与storm的空载情况下负载都比较高, kafka达到122%, storm平均负载达到, 20%, 
    2. 当前是通过Ambari下管理kafka的, 
      a. 先停止s5的kafka进程.
      b. 开启s5 上kafka的jmx远程监控, kafka的启动命令为: source /usr/hdp/current/kafka-broker/config/kafka-env.sh ; /usr/hdp/current/kafka-broker/bin/kafka start , kafka 的shell脚本的调用关系为bin/kafka (支持start, stop, status, clean等操作, 日志输出配置) -->  bin/kafka-server-start.sh(KAFKA_LOG4J_OPTS 日志输出格式, KAFKA_HEAP_OPTS 堆大小调整) --> bin/kafka-run-class.sh (Scala 版本, KAFKA_ENV, CLASSPATH设定, KAFKA_JMX_OPTS 设定, JMX_PORT 设定, KAFKA_OPTS, KAFKA_JVM_PERFORMANCE_OPTS等设定) 
      c. 登录s5, 切换用户到kafka
        sudo su - kafka
        export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false  -Dcom.sun.management.jmxremote.ssl=false "
        export JMX_PORT=9051
      d. 启动 kafka:  source /usr/hdp/current/kafka-broker/config/kafka-env.sh ; /usr/hdp/current/kafka-broker/bin/kafka start
      e. 使用ps -ax | grep kafka 会看到9051的端口号已经设定完成.
    3. 使用java VisualVM 创建jmx连接, 在抽样器中使用cpu抽样, 发现
      a. kafka.network.RequestChannel.receiveRequest() 调用时间与kafka.network.Processor.run() 调用时间最长. 

      b. 通过内存进行抽样, 发现kafka-network-thread-4-1, kafka-network-thread-4-0 线程分配的内存比较多.

      c. 通过线程dump, 来查找kafka-network-thread-4-1, kafka-network-thread-4-0 线程的栈变化, 发现是由Processor.run()方法来触发的, 与cpu消耗时间占比一致.

      d. 查看kafka源码中, Processor.run() while() --> Processor.processNewResponse() --> requestChannel.receiveResponse(id) , 实际上是客户端的请求比较频繁, 搜索相关的bug来说, High CPU Usage on 0.8.2.1也是发现kafka的空载时负载比较高, 而且也同样使用的是storm-kafka 对接, 归到原因是storm 配置中topology.sleep.spout.wait.strategy.time.ms 的参数设置的频率太频繁导致,这个参数用于spout的nextTuple() 没有数据返回时的sleep时间, 为空载时的等待时间, How often is the .nextTuple() method called默认设置为1ms.
      e. Storm进行修改. 
        advance storm-site 修改:
      topology.sleep.spout.wait.strategy.time.ms为500 ms.
      f. 使用ambari 重新启动Nimbus, Supervisor, 也只是对后续的启动的topology产生影响, 要使线上的参数进行更改, 需要将topology重新部署, 或者是一台服务器一台服务器的kill掉work, 因为storm本身保证了topology的高可用, 对线上的服务不会产生影响, 尽量还是在晚上没有什么用户量的情况下实施.
      g. 使用storm 用户kill 掉s1上的所有storm进程后, storm的cpu占用率明显下降:
    4. h.虽然是通过top命令查找进程kill掉一些work, 但是将整个集群进行work kill掉及重启后, kafka与storm的cpu占用率已经下降很多, 说明解析的方式是正确的.

Kafka集群在空载情况下Cpu消耗比较高的问题的更多相关文章

  1. Redis 集群方案什么情况下会导致整个集群不可用?

    有 A,B,C 三个节点的集群,在没有复制模型的情况下,如果节点 B 失败了, 那么整个集群就会以为缺少 5501-11000 这个范围的槽而不可用.

  2. 如何为Kafka集群选择合适的Partitions数量

    转载:http://blog.csdn.net/odailidong/article/details/52571901 这是许多kafka使用者经常会问到的一个问题.本文的目的是介绍与本问题相关的一些 ...

  3. 如何为Kafka集群确定合适的分区数以及分区数过多带来的弊端

    通过之前的文章<Kafka分区分配策略>和<Kafka高性能揭秘>,我们了解到:Kafka高吞吐量的原因之一就是通过partition将topic中的消息保存到Kafka集群中 ...

  4. Docker部署zookeeper集群和kafka集群,实现互联

    本文介绍在单机上通过docker部署zookeeper集群和kafka集群的可操作方案. 0.准备工作 创建zk目录,在该目录下创建生成zookeeper集群和kafka集群的yml文件,以及用于在该 ...

  5. Ubuntu下kafka集群环境搭建及测试

    kafka介绍: Kafka[1是一种高吞吐量[2]  的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能 ...

  6. centos7下kafka集群安装部署

    应用摘要: Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的 分布式发布订阅消息系统,是消息中间件的一种,用于构建实时 ...

  7. win系统下启动linux上的kafka集群及使用

    一.首先在win系统下C:\Windows\System32\drivers\etc文件夹中hosts文件加入例如以下内容: 10.61.6.167 slaves1 10.61.6.168 slave ...

  8. Linux下kafka集群搭建过程记录

    环境准备 zookeeper集群环境kafka是依赖于zookeeper注册中心的一款分布式消息对列,所以需要有zookeeper单机或者集群环境. 三台服务器: 172.16.18.198 k8s- ...

  9. Linux下kafka集群搭建

    环境准备 zookeeper集群环境 kafka是依赖于zookeeper注册中心的一款分布式消息对列,所以需要有zookeeper单机或者集群环境. 三台服务器: 172.16.18.198 k8s ...

随机推荐

  1. Cocos2d-x3.2游戏的核心循环在Application,怎样处理FPS不稳

    今天天气非常阴,立即要下雨了,陈吃早点功夫写点东西, 一场秋雨一场寒,十场秋雨要穿棉,各位从今往后多穿点 int Application::run() { if(!applicationDidFini ...

  2. MiniGUI文档参考手册 基于v1.6.10文本

    MiniGUI各种功能都分布在预先定义宏对每个文档标题.特别不方便查找,这是不利于初学者学习. 有一天,我发现doxygen,因此,使用该工具可以生成一个minigui参考文献 .基于v1.6.10文 ...

  3. 如何对 GIT 分支进行规划? (转)

    项目背景: 该项目是在2011年11月份使用Asp.net三层帮荷兰某个客户开发的机票预定系统 该客户主要是做中国与欧洲的旅行社业务,特别是最近两年由于中国的发展因此客户也越来越重视机票业务 于是他们 ...

  4. SQL Server 2008 R2 性能计数器详细列表(五)

    原文:SQL Server 2008 R2 性能计数器详细列表(五) SQL Server:SQL Statistics 对象: 监视编译和发送到 SQL Server 实例的请求类型 SQL Ser ...

  5. iOS中通讯录电话号码空格问题

    今天在读取通讯录的时候,读取到的手机号码格式为* (***) ***-****的,乍看下,数字中间有空格."-".(.)的非数字字符. 然后我就打算替换这些非数字字符,结果替换完, ...

  6. hdu4570Multi-bit Trie (间隙DP)

    Problem Description IP lookup is one of the key functions of routers for packets forwarding and clas ...

  7. 关于int全区变量读写的原子性

    关于int全区变量读写的原子性     关于int变量的读写是否原子性网上有非常多讨论,貌似不同平台不同,这里自己做实如今arm9平台測试.这里要注意原子性并不是指一条汇编才原子,实际上即使一次赋值编 ...

  8. .NET(C#):浅谈程序集清单资源和RESX资源

    原文:.NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  9. redis和redis php扩展安装(转)

    redis是一个内存数据库,比memcache支持更丰富的value类型,新浪微博就使用redis来做缓存. redis的源码安装 wget http://download.redis.io/redi ...

  10. Android AIDL使用特定的解释

    1.什么是aidl:aidl这是 Android Interface definition language缩写,认清,这是android进程间通信接口的叙事语言描述.通过它我们可以定义进程间通信接口 ...