这个包主要是与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. centos7安装python3

    下载python3.5.2 wget http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tgz 如果提示错误可能是wget没有安装,用yun -y i ...

  2. [Unity] 3D数学基础 - 2D旋转矩阵

    2D矩阵的旋转: NewX = X * Cos(α) - Y * Sin(α) NewY = X * Sin(α) + Y * Cos(α) 一般在三角函数中使用的是弧度,我们可以通过下面的公式将角度 ...

  3. ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用

    做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...

  4. C# SQLite编程总结

    1.如果自己手动创建了数据库和字段,则不需要再创建table,基本流程: 1)SQLiteConnectionStringBuilder sb = new SQLiteConnectionString ...

  5. Log4Net简单使用

    一. Log4net是什么.优点 用来记录程序日志,优点:1.提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug:2.日志信息可以输出到不同的地方(数据库,文件,邮箱等). 二. L ...

  6. 使用Unity3D的50个技巧:Unity3D最佳实践

    翻译故事 原文:http://devmag.org.za/2012/07/12/50-tips-for-working-with-unity-best-practices/ 这篇技巧,我自己也在翻译, ...

  7. InnoDB主键设计

    InnoDB是clustered-index table,因此对于InnoDB而言,主键具有特殊意义. 可以通过主键直接定位到对应的某一数据行记录的物理位置,主键索引指向对应行记录,其他索引则都指向主 ...

  8. postgres-toolkit (A Victorinox for PostgreSQL DBA )

    postgres-toolkit A collection of scripts and utilities to manage PostgreSQL servers. Allows DBA to p ...

  9. Spring XML配置实现AOP

    1:  首先我们要定义 配置成切面的类 package cn.gbx.example; import org.aspectj.lang.ProceedingJoinPoint; import org. ...

  10. DOM系列---进阶篇【转】

    内容提纲: 1.DOM类型 2.DOM扩展 3.DOM操作内容 一.DOM类型 DOM基础篇中,我们了解了DOM的节点并且了解怎样查询和操作节点,而本身这些不同的节点,又有着不同的类型.   DOM类 ...