这个包主要是与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

【原创】Kakfa metrics包源代码分析的更多相关文章

  1. 【原创】Kakfa cluster包源代码分析

    kafka.cluster包定义了Kafka的基本逻辑概念:broker.cluster.partition和replica——这些是最基本的概念.只有弄懂了这些概念,你才真正地使用kakfa来帮助完 ...

  2. 【原创】Kakfa common包源代码分析

    初一看common包的代码吓了一跳,这么多scala文件!后面仔细一看大部分都是Kafka自定义的Exception类,简直可以改称为kafka.exceptions包了.由于那些异常类的名称通常都定 ...

  3. 【原创】Kakfa log包源代码分析(二)

    八.Log.scala 日志类,个人认为是这个包最重要的两个类之一(另一个是LogManager).以伴生对象的方式提供.先说Log object,既然是object,就定义了一些类级别的变量,比如定 ...

  4. 【原创】Kakfa log包源代码分析(一)

    Kafka日志包是提供的是日志管理系统.主要的类是LogManager——该类负责处理所有的日志,并根据topic/partition分发日志.它还负责flush策略以及日志保存策略.Kafka日志本 ...

  5. 【原创】Kakfa network包源代码分析

    kafka.network包主要为kafka提供网络服务,通常不包含具体的逻辑,都是一些最基本的网络服务组件.其中比较重要的是Receive.Send和Handler.Receive和Send封装了底 ...

  6. 【原创】Kakfa message包源代码分析

    笔者最近在研究Kafka的message包代码,有了一些心得,特此记录一下.其实研究的目的从来都不是只是看源代码,更多地是想借这个机会思考几个问题:为什么是这么实现的?你自己实现方式是什么?比起人家的 ...

  7. 【原创】Kakfa api包源代码分析

    既然包名是api,说明里面肯定都是一些常用的Kafka API了. 一.ApiUtils.scala 顾名思义,就是一些常见的api辅助类,定义的方法包括: 1. readShortString: 从 ...

  8. 【原创】Kakfa serializer包源代码分析

    这个包很简单,只有两个scala文件: decoder和encoder,就是提供序列化/反序列化的服务.我们一个一个说. 一.Decoder.scala 首先定义了一个trait: Decoder[T ...

  9. 【原创】kafka producer源代码分析

        Kafka 0.8.2引入了一个用Java写的producer.下一个版本还会引入一个对等的Java版本的consumer.新的API旨在取代老的使用Scala编写的客户端API,但为了兼容性 ...

随机推荐

  1. 3D banner(CSS3+HTML5)

    1.这是一篇 3Dbanner制作的简易流程,支持高版本的chrome和firefox浏览器,俩浏览器显示可能会有些差异 2.没有兼容性代码,因为仅仅只是熟悉流程,希望小伙伴们自己改善哈(>﹏& ...

  2. js中arguments的用法

    了解这个对象之前先来认识一下javascript的一些功能: 其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载.Javascrip中国每个函数都会有一个Argume ...

  3. CocoaPods安装以及相关问题解决

    Mac OS X上安装 Ruby环境 安装RVM $ curl -L https://get.rvm.io | bash -s stable 关闭终端,新开另外一个终端(新打开的终端会自动载入RVM环 ...

  4. 在Python命令行和VIM中自动补全

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1. VIM下的配置: wget https://github.com/rkulla/pydiction/arc ...

  5. 向Word模板中填充数据

    现在有这样的需求,给Word文档的指定位置填充上特定数据,例如我们有一个终端,用来打印员工的薪资证明,对于一个公司来说,他的薪资证明模板是固定的,变化的地方是员工姓名,部门,职位等.我们只需要将这些指 ...

  6. 论元数据和API管理工具

    公司里面的很多部门都在广泛的采用元数据管理,也采用了公司内部开发的元数据管理工具,有些部门的实施效果一直非常好,而有些部门的效果则差强人意.这个问题,其实和软件系统开发完成进入维护阶段后成本居高不下的 ...

  7. 第10章 系统级I/O

    第10章 系统级I/O 10.1 Unix I/O 一个Unix文件就是一个m个字节的序列:B0,B1,…,BK,…,Bm-1 Unix I/O:一种将设备优雅地映射为文件的方式,允许Unix内核引出 ...

  8. 20145215《Java程序设计》第5周学习总结

    20145215<Java程序设计>第五周学习总结 教材学习内容总结 异常处理 语法与继承架构 异常就是程序在运行时出现不正常情况,异常的由来是因为Java把出现的问题封装成了对象,换句话 ...

  9. Hadoop配置文件

    部分内容参考:http://www.linuxqq.net/archives/964.html  http://slaytanic.blog.51cto.com/2057708/1100974/ ht ...

  10. ctypes 模块

    ctypes赋予了python类似于C语言一样的底层操作能力,通过ctypes模块可以调用动态链接库中的导出函数.构建复杂的c数据类型. ctypes提供了三种不同的动态链接库加载方式:cdll(), ...