Kafka集群在空载情况下Cpu消耗比较高的问题

时间:2022-09-18 19:25:21
    1. 线上kafka与storm的空载情况下负载都比较高, kafka达到122%, storm平均负载达到, 20%, 
      Kafka集群在空载情况下Cpu消耗比较高的问题
    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() 调用时间最长. 
      Kafka集群在空载情况下Cpu消耗比较高的问题
      b. 通过内存进行抽样, 发现kafka-network-thread-4-1, kafka-network-thread-4-0 线程分配的内存比较多.
      Kafka集群在空载情况下Cpu消耗比较高的问题
      c. 通过线程dump, 来查找kafka-network-thread-4-1, kafka-network-thread-4-0 线程的栈变化, 发现是由Processor.run()方法来触发的, 与cpu消耗时间占比一致.
      Kafka集群在空载情况下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占用率明显下降:
      Kafka集群在空载情况下Cpu消耗比较高的问题
    4. h.虽然是通过top命令查找进程kill掉一些work, 但是将整个集群进行work kill掉及重启后, kafka与storm的cpu占用率已经下降很多, 说明解析的方式是正确的.
      Kafka集群在空载情况下Cpu消耗比较高的问题

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

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

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

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

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

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

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

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

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

  5. centos7下kafka集群安装部署

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

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

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

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

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

  8. Linux下kafka集群搭建

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

  9. Linux下kafka集群的搭建

    上一篇日志已经搭建好了zookeeper集群,详细请查看:http://www.cnblogs.com/lianliang/p/6533670.html,接下来继续搭建kafka的集群 1.首先下载k ...

随机推荐

  1. Use Visual studio 2010 build Python2&period;7&period;10

    http://p-nand-q.com/python/building-python-27-with-vs2010.html

  2. JSP网站开发基础总结《六》

    对于本篇需要总结的内容,量估计有点大,大家好好看哈,绝对全是干货,代码的已经运行测试,不存在问题,大家可以参考学习,下面开始本篇的内容. 1.添加数据到数据库: 如何用户在JSP页面的填写的信息输入到 ...

  3. 漫谈C&num;之关键字

    每一种语言都有非常多的关键字,而且这些关键字也都大同小异,不过毕竟还是有些许的不一样.有些关键字大家碰到的多了,自然就熟悉了,但是有些关键字用得不大多,或者是新引入的,所以就不大熟悉了.我平常在用的时 ...

  4. DBLookupCombobox实现下拉联动

    这次用DBLookupCombobox实现省份-城市-地区的下拉联动,用以学习DBLookupCombobox的一些用法 效果图: 首先建立数据表(数据表形式可以多种多样:数据库表.文本.xml等,最 ...

  5. Linux运行模式

    查看运行模式 cat /etc/inittab 0.表示关机模式,不要把默认模式设置成0 1.表示单用户模式 2.表示多用户模式 3.表示命令行模式 4.表示暂未被使用的模式,以后有可能会被使用 5. ...

  6. Facebook广告API系列 1

    Facebook广告API系列 1 前言 最近遇到大坑了,居然要去对接facebook的广告API,之前以为是跟鹅厂一样的API体系,看了半天Facebook的文档,冷汗直冒.... 这得一点一点的讲 ...

  7. java面试④数据库部分

    2.3.1 数据库的分类及常用的数据库 数据库分为:关系型数据库和非关系型数据库 关系数据库:mysql,oracle,sqlServer 非关系型:redis,mongoDB 2.3.2 简单介绍一 ...

  8. vijos 1894 二分

    题意:在 Ninian 的花园里,有许多琼花,环绕着中间的凉亭.有 N 片琼花,组成一个环.Ninian 想在凉亭中发动 [セチの祈り] , 需要划分出三个区域的琼花,为了平均,要最大化面积最小的区域 ...

  9. pycharm中在andconda环境中配置pyqt环境

    一般在andconda环境中,自带pyqt5 在pip install pyqt5之后,需要安装pyqt5_tools. 对于pycharm需要配置pyqt Designer和pyqt UIC. De ...

  10. AutoHotKey 快速入门

    AutoHotKey 是一个免费的键盘宏程序,可以用于配置键盘快捷键.鼠标事件 以及摇杆事件,还可以在输入文本的时候对文本进行扩展(自动补全) 第一个脚本 新建文件test.ahk并输入以下内容: ^ ...