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. poj 1274The Perfect Stall

    第一次接触二分图匹配. 这题是一个匈牙利算法的模板题直接套即可. 题意是  给你奶牛和谷仓的个数a和b,接下来a行是奶牛喜欢去的谷仓.第一个是谷仓个数,接下来是谷仓编号. 这里我们把行当奶牛,列当谷仓 ...

  2. web自定义炫酷字体

    电脑有已经安装好的字体,但是如果你有特殊需要而要选择其他字体,则需要以下几个步骤 1.寻找适合你的字体 有下面几个站点提供字体下载: www.theleagueofmoveabletype.com w ...

  3. SQL Server 2005------函数

    原文:SQL Server 2005------函数 SQL Server 2005支持用户自定义函数和内置系统函数,根据返回值类型又分为标量函数和表值函数. 1.标量函数标量函数:返回单个数据值,返 ...

  4. Struts2+Spring+Hibernate step by step 11 ssh拦截验证用户登录到集成

    注意:该系列文章从教师王健写了一部分ssh集成开发指南 引言: 之前没有引入拦截器之前,我们使用Filter过滤器验证用户是否登录,在使用struts2之后,全然能够使用拦截器,验证用户是否已经登录, ...

  5. 原子操作(atomic operation)

    深入分析Volatile的实现原理 引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共 ...

  6. Linux解析内核源代码——传输控制块诞生

    原创文章是freas_1990,转载请注明出处:http://blog.csdn.net/freas_1990/article/details/23795587 在Linux 2.6一旦(不包含2.6 ...

  7. 把自解压的RAR压缩包解压到指定的软件安装目录

    原文 把自解压的RAR压缩包解压到指定的软件安装目录 今天千里独行同学给轻狂来信问了一个问题:如何把一个自解压的RAR压缩包解压到我们指定的软件安装目录.   其实,在NSIS中,我们可以灵活运用相关 ...

  8. BMP文件格式及读写

    转 http://blog.csdn.net/pkueecser/article/details/5579604 http://blog.csdn.net/pkueecser/article/deta ...

  9. 微软自家Dism的妙用

    很多人应该都听说过Dism,是微软自带的工具,其实自从Win8发布以来Dism的功能就大幅度增强了,大家都知道系统里面有个打开关闭Windows功能,  但是在这里你只能关闭这些功能,却不能删除他们. ...

  10. P90

    #include<stdio.h> #define N 4 int fun(int a[][N]) { int i,j,max=a[0][0]; for(i=0;i<2;i++) f ...