摘要:
kafka.cluster包定义了Kafka的基本逻辑概念:broker、cluster、partition和replica——这些是最基本的概念。只有弄懂了这些概念,你才真正地使用kakfa来帮助完成你的需求。因为scala文件不多,还是老规矩,我们一个一个分析。一、Broker.scalabro... 阅读全文
摘要:
八、Log.scala日志类,个人认为是这个包最重要的两个类之一(另一个是LogManager)。以伴生对象的方式提供。先说Log object,既然是object,就定义了一些类级别的变量,比如定义了一个日志文件的后缀名是.log;索引文件的后缀名是.index;要被删除的文件的后缀名是.dele... 阅读全文
摘要:
Kafka日志包是提供的是日志管理系统。主要的类是LogManager——该类负责处理所有的日志,并根据topic/partition分发日志。它还负责flush策略以及日志保存策略。Kafka日志本身是由多个日志段组成(log segment)。一个日志是一个FileMessageSet,它包含了... 阅读全文
摘要:
这个包主要是与Kafka度量相关的。一、KafkaTimer.scala对代码块的运行进行计时。仅提供一个方法: timer——在运行传入函数f的同时为期计时二、KafkaMetricsConfig.scala指定reporter类,以逗号分隔的reporter类,比如kafka.metrics.K... 阅读全文
摘要:
kafka.network包主要为kafka提供网络服务,通常不包含具体的逻辑,都是一些最基本的网络服务组件。其中比较重要的是Receive、Send和Handler。Receive和Send封装了底层的入站(inbound)和出站(outbound)字节传输请求,而Handler在此二者间做了一个... 阅读全文
摘要:
初一看common包的代码吓了一跳,这么多scala文件!后面仔细一看大部分都是Kafka自定义的Exception类,简直可以改称为kafka.exceptions包了。由于那些异常类的名称通常都定义得很直观,笔者就不在一一赘述了。现在我们说说common包中其他的代码。一、AppInfo.sca... 阅读全文
摘要:
这个包很简单,只有两个scala文件: decoder和encoder,就是提供序列化/反序列化的服务。我们一个一个说。一、Decoder.scala首先定义了一个trait: Decoder[T]。在这个trait中定义了一个抽象方法fromBytes,用于将一个字节数组转换成一个类型T的对象。实... 阅读全文
摘要:
Kafka utils包最后一篇~~~十五、ShutdownableThread.scala可关闭的线程抽象类! 继承自Thread同时还接收一个boolean变量isInterruptible表明是否允许中断。既然是可关闭的,因此一定不是守护线程,而是一个用户线程(不会阻塞JVM关闭)。提供的方法... 阅读全文
摘要:
我们继续研究kafka.utils包八、KafkaScheduler.scala首先该文件定义了一个trait:Scheduler——它就是运行任务的一个调度器。任务调度的方式支持重复执行的后台任务或是一次性的延时任务。这个trait定义了三个抽象方法:1. startup:启动调度器,用于接收调度... 阅读全文
摘要:
Kafka.utils,顾名思义,就是一个工具套件包,里面的类封装了很多常见的功能实现——说到这里,笔者有一个感触:当初为了阅读Kafka源代码而学习了Scala语言,本以为Kafka的实现会用到很多函数编程(Functional Programming, FP),结果目前来看,大部分还是很朴素地以... 阅读全文