http://blog.csdn.net/eric_sunah/article/details/44980385?utm_source=tuicool

使用JMX监控Kafka

标签: KafkaJMX监控
2015-04-10 15:43 2952人阅读 评论(3) 收藏 举报

 分类:
Kafka(8) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

Kafka可以配置使用JMX进行运行状态的监控,既可以通过JDK自带Jconsole来观察结果,也可以通过Java API的方式来.
关于监控指标的描述,可以参考:http://kafka.apache.org/documentation.html#monitoring

开启JMX端口

修改bin/kafka-server-start.sh,添加JMX_PORT参数,添加后样子如下
[html] view plaincopy print?
  1. if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
  2. export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
  3. export JMX_PORT="9999"
  4. fi

通过Jconsole测试时候可以连接


通过JavaAPI来访问

通过以下方法获取目标值
[java] view plaincopy print?
  1. public class KafkaDataProvider{
  2. protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
  3. private static final String MESSAGE_IN_PER_SEC = "kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec";
  4. private static final String BYTES_IN_PER_SEC = "kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec";
  5. private static final String BYTES_OUT_PER_SEC = "kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec";
  6. private static final String PRODUCE_REQUEST_PER_SEC = "kafka.network:type=RequestMetrics,name=RequestsPerSec,request=Produce";
  7. private static final String CONSUMER_REQUEST_PER_SEC = "kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchConsumer";
  8. private static final String FLOWER_REQUEST_PER_SEC = "kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchFollower";
  9. private static final String ACTIVE_CONTROLLER_COUNT = "kafka.controller:type=KafkaController,name=ActiveControllerCount";
  10. private static final String PART_COUNT = "kafka.server:type=ReplicaManager,name=PartitionCount";
  11. public String extractMonitorData() {
  12. //TODO 通过调用API获得IP以及参数
  13. KafkaRoleInfo monitorDataPoint = new KafkaRoleInfo();
  14. String jmxURL = "service:jmx:rmi:///jndi/rmi://192.168.40.242:9999/jmxrmi";
  15. try {
  16. MBeanServerConnection jmxConnection = MetricDataUtils.getMBeanServerConnection(jmxURL);
  17. ObjectName messageCountObj = new ObjectName(MESSAGE_IN_PER_SEC);
  18. ObjectName bytesInPerSecObj = new ObjectName(BYTES_IN_PER_SEC);
  19. ObjectName bytesOutPerSecObj = new ObjectName(BYTES_OUT_PER_SEC);
  20. ObjectName produceRequestsPerSecObj = new ObjectName(PRODUCE_REQUEST_PER_SEC);
  21. ObjectName consumerRequestsPerSecObj = new ObjectName(CONSUMER_REQUEST_PER_SEC);
  22. ObjectName flowerRequestsPerSecObj = new ObjectName(FLOWER_REQUEST_PER_SEC);
  23. ObjectName activeControllerCountObj = new ObjectName(ACTIVE_CONTROLLER_COUNT);
  24. ObjectName partCountObj = new ObjectName(PART_COUNT);
  25. Long messagesInPerSec = (Long) jmxConnection.getAttribute(messageCountObj, "Count");
  26. Long bytesInPerSec = (Long) jmxConnection.getAttribute(bytesInPerSecObj, "Count");
  27. Long bytesOutPerSec = (Long) jmxConnection.getAttribute(bytesOutPerSecObj, "Count");
  28. Long produceRequestCountPerSec = (Long) jmxConnection.getAttribute(produceRequestsPerSecObj, "Count");
  29. Long consumerRequestCountPerSec = (Long) jmxConnection.getAttribute(consumerRequestsPerSecObj, "Count");
  30. Long flowerRequestCountPerSec = (Long) jmxConnection.getAttribute(flowerRequestsPerSecObj, "Count");
  31. Integer activeControllerCount = (Integer) jmxConnection.getAttribute(activeControllerCountObj, "Value");
  32. Integer partCount = (Integer) jmxConnection.getAttribute(partCountObj, "Value");
  33. monitorDataPoint.setMessagesInPerSec(messagesInPerSec);
  34. monitorDataPoint.setBytesInPerSec(bytesInPerSec);
  35. monitorDataPoint.setBytesOutPerSec(bytesOutPerSec);
  36. monitorDataPoint.setProduceRequestCountPerSec(produceRequestCountPerSec);
  37. monitorDataPoint.setConsumerRequestCountPerSec(consumerRequestCountPerSec);
  38. monitorDataPoint.setFlowerRequestCountPerSec(flowerRequestCountPerSec);
  39. monitorDataPoint.setActiveControllerCount(activeControllerCount);
  40. monitorDataPoint.setPartCount(partCount);
  41. } catch (IOException e) {
  42. e.printStackTrace();
  43. } catch (MalformedObjectNameException e) {
  44. e.printStackTrace();
  45. } catch (AttributeNotFoundException e) {
  46. e.printStackTrace();
  47. } catch (MBeanException e) {
  48. e.printStackTrace();
  49. } catch (ReflectionException e) {
  50. e.printStackTrace();
  51. } catch (InstanceNotFoundException e) {
  52. e.printStackTrace();
  53. }
  54. return monitorDataPoint.toString();
  55. }
  56. public static void main(String[] args) {
  57. System.out.println(new KafkaDataProvider().extractMonitorData());
  58. }
  59. /**
  60. * 获得MBeanServer 的连接
  61. *
  62. * @param jmxUrl
  63. * @return
  64. * @throws IOException
  65. */
  66. public MBeanServerConnection getMBeanServerConnection(String jmxUrl) throws IOException {
  67. JMXServiceURL url = new JMXServiceURL(jmxUrl);
  68. JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
  69. MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
  70. return mbsc;
  71. }
  72. }

其他工具

除了自己编写定制化的监控程序外

kafka-web-console

https://github.com/claudemamo/kafka-web-console
部署sbt:
http://www.scala-sbt.org/0.13/tutorial/Manual-Installation.html
http://www.scala-sbt.org/release/tutorial/zh-cn/Installing-sbt-on-Linux.html

KafkaOffsetMonitor

https://github.com/quantifind/KafkaOffsetMonitor/releases/tag/v0.2.0
java -cp KafkaOffsetMonitor-assembly-0.2.0.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk localhost:12181 --port 8080 --refresh 5.minutes --retain 1.day

Mx4jLoader

使用JMX监控Kafka相关推荐

  1. 【kafka】JMX 监控kafka FINER RMI TCP getConnectionId IOException

    1.背景 使用Jmx监控kafka相关信息,但是运行的时候报错如下 我的代码大致逻辑是 JMXServiceUrl jmx = new JMXServiceUrl(url) JMXConnector ...

  2. 【kafka】JMX 监控kafka kafka rmi NoSuchObjectException no such object in table

    1.背景 使用Jmx监控kafka相关信息,但是运行的时候报错如下 我的代码大致逻辑是 JMXServiceUrl jmx = new JMXServiceUrl(url) JMXConnector ...

  3. 【kafka】java使用jmx 监控Kafka

    1.概述 想使用java jmx监控kafka,关于jmx相关的概念请参考 [Java]java jmx 入门案例 进阶版参考:[Spring]SpringBoot 如何使用JMX 2.kafkal开 ...

  4. 如何使用JMX监控Kafka

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  5. Kafka JMX 监控 之 jmxtrans + influxdb + grafana

    目录 效果图 环境准备 安装 influxdb 安装我们刚刚下载 influxdb rpm文件 查看默认配置 修改参数 启动 influxdb 查看启动状态 设置基本配置 influxdb 其他命令扩 ...

  6. 【Kafka】Window下kafka开启JMX监控

    1.概述 因为需要,需要在windows下开启kafka,然后kafka开启JMX监控 同样是修改kafka-server-start文件,但是修改的是kafka-server-start.bat I ...

  7. gc日志怎么看_你应该怎么监控Kafka?

    监控 Kafka,历来都是个老大难的问题.无论是在我维护的微信公众号,还是 Kafka QQ群里面,大家问得最多的问题,一定是 Kafka 的监控.大家提问的内容看似五花八门,但真正想了解的,其实都是 ...

  8. Prometheus监控Kafka集群

    prometheus监控kafka常见的有两种开源方案,一种是传统的部署exporter的方式,一种是通过jmx配置监控,本文将采用第二种方式进行配置. 项目地址: kafka_exporter:ht ...

  9. 10 Confluent_Kafka权威指南 第十章:监控kafka

    文章目录 CHAPTER 10 Monitoring Kafka 监控kafka Metric Basics 度量基础 Where Are the Metrics? 度量标准在哪? Internal ...

最新文章

  1. CKEditor的安装与基本使用(JSP)
  2. Ethernet/IP 学习笔记二
  3. 一些Xcode快捷键,给新手
  4. GM6 frontend Shell._resolveHashFragment when tile is clicked
  5. code point,code unit
  6. 系统防止绕过程序直接数据库修改数据(金额等敏感数据)
  7. hdu4410(Boomerang)(计算几何)
  8. 看看如何有效地在你的设计工作中使用霓虹色?
  9. LinkButton中添加删除确认框
  10. 360 绑架浏览器首页的解决方法
  11. 基于python的OCR中文识别教程
  12. 图像预处理——对数变换
  13. 无法听到计算机发出的声音怎么办,qq语音听不到对方的声音怎么办_电脑qq语音我听不到对方声音修复方法-win7之家...
  14. 计量模型 | 时间固定效应与时间趋势项
  15. E9000刀片服务器维护记录
  16. LoadRunner-登陆web tours订票网站,预订一张机票后退出-1
  17. 不谋全局者 , 不足以谋一域 : 不谋万世者 , 不足以谋一时
  18. 17种Vue适用于移动端的ui框架
  19. 谈谈我对京东的认识(2):商业价值和前景分析
  20. USACO Farmer_John收苹果 (dp)

热门文章

  1. H3CTE京东翰林讲师分享实验2 网络设备基本调试
  2. apache workprefork
  3. ASP.NET AJAX 1.0 发布
  4. TVM: Deep Learning模型的优化编译器(强烈推荐, 附踩坑记录)
  5. 每日一淘完成1.3亿美元融资,元生资本、DCM领投,SIG联合投资
  6. 分布式通信框架 - rmi
  7. 看完让你彻底搞懂Websocket原理
  8. Oracle 10g RAC修改IP/VIP地址示例
  9. 有了jsRender,妈妈再也不用担心我用jq拼接DOM拼接的一团糟了、页面整齐了、其他伙伴读代码也不那么费劲了...
  10. 零距离感受2015年安全***大赛:静动之美 ***兼备