【原创】Kakfa metrics包源代码分析
2024-08-27 11:24:03
这个包主要是与Kafka度量相关的。
一、KafkaTimer.scala
对代码块的运行进行计时。仅提供一个方法: timer——在运行传入函数f的同时为期计时
二、KafkaMetricsConfig.scala
指定reporter类,以逗号分隔的reporter类,比如kafka.metrics.KafkaCSVMetricsReporter,这些类必须要在claasspath中指定。另外指定了度量的轮询间隔,默认是10秒。
三、KafkaMetricsReporter.scala
KafkaMetricsReporterMBean是基本trait。客户如果要自己定制reporter的话除了要实现KafkaMetricsReporter之外还要实现这个MBean以满足标准的MBean规范。该trait定义了3个抽象方法:
1. startReporter: 调用yammer的CsvReporter的start方法开启reporter
2. stopReporter: 调用yammer的CsvReporter的shutdown方法关闭reporter
3. getMBeanName: 获取MBean的名称,格式为:kafka:type=kafka.metrics.KafkaCSVMetricsReporter
该scala文件还提供了第二个trait: KafkaMetricsReporter,该trait只有一个方法init,在KafkaCSVMetricsReporter.scala中实现了该init方法
最后,该scala还有一个object: KafkaMetricsReporter。该object维护了一个AtomicBoolean的ReporterStarted变量,标识该reporter是否已经启动,并在启动reporter的过程中充当锁的作用。该object唯一的方法startReporters就是启动MetricConfig中定义的所有reporter——具体方法是调用Utils.createObject方法通过反射机制创建所有reporter,并初始化每个reporter,最后将reporter注册到MBean中。
四、KafkaCSVMetricsReporter.scala
该scala可以说Kafka默认提供的一个具体reporter。一共提供了两个MBean:KafkaCSVMetricsReporterMBean和KafkaCSVMetricsReporter。我们先说第一个:KafkaCSVMetricsReporterMBean。该trait是一个私有trait,就是简单地继承了KafkaMetricsReporterMBean。
而第二个trait继承了KafkaMetricsMBean和KafkaCSVMetricsReporterMBean,因而实现了前两个trait的4个方法,分别是init, getMBeanName, startReporter和stopReporter。值得一提的是,在init方法中它会创建一个默认为kafka_metrics的子目录,然后判断是否kafka.csv.metrics.reporter.enabled设定为true,如果true的话调用startReporter方法开启report,否则就直接结束。
五、KafkaMetricsGroup.scala
该scala定义了一个trait和一个object。就KafkaMetricsGroup trait而言,顾名思义,这应该是个metric组,定义了很多方法,主要的方法就是newGauge、newMeter、newHistogram和newTimer调用yammer框架的api创建不同的度量元对象。
而该scala的object: KafkaMetricsGroup分别为consumer、server、producer定义了各自的metric列表。当然还提供了remove方法删除给定clientId的metric
最新文章
- 剑指offer题目31-40
- [stm32] 利用uC-BmpCvt软件生成uc-gui可调用的bmp图片
- android自定义弹出框样式实现
- 图文解说:Nginx+tomcat配置集群负载均衡
- 给你完美浪漫的七夕,APICloud送你双人电影票!
- ACM常用算法及练习(2)
- hdu 3886 Final Kichiku “Lanlanshu” 数位DP
- PhotoSwipe简介
- Eclipse打JAR包的使用
- Maven服务器搭建
- 用node搭建简单的静态资源管理器
- 在web工程中设置首页的页面
- 图像处理程序框架—MFC相关知识点
- 解决input框自动填充为黄色的问题
- QT之Http请求
- 4月10日java上机任务
- RocketMQ_问题_启动控制台console报错,connect to <;null>; failed
- HashMap是如何实现快速存取的
- NVMe标准规范
- 判断元素16种方法expected_conditions
热门文章
- EF6(CodeFirst)+MySql开发脱坑指南
- 页面动态加入<;script>;标签并执行代码
- java提高篇(十)-----详解匿名内部类
- CSS media queries
- [翻译]AKKA笔记 - LOGGING与测试ACTORS -2 (一)
- Http Header里的Content-Type
- gulp:更简单的自动化构建工具
- [Java面试八]Hibernate总结以及在面试中的一些问题.
- Linux初学 - 解决chkconfig Segmentation fault(core dumped)
- IOS开发之控件篇UINavigationController第一章 - 介绍