(点击上方公众号,可快速关注)
来源:刘正阳 ,
liuzhengyang.github.io/2017/12/31/kafka-source-1-architecture/
背景
从kafka也算有两年了,用它做了不少项目,但是之前对它的认识也仅仅停留在一些从其他地方听到的概念和官方文档的documentation上在遇到一些问题时往往不知道其原理只能按照道听途说的概念来理解。既然kafka能够成为这么多公司的选择肯定有很不错的实现,所以还是要翻阅代码一看究竟,一来学习别人的代码二来能够对kafka有更深入的了解。当前版本是0.11.0。
环境搭建
git clone https://github.com/apache/kafka
cd kafka
./gradlew idea
然后用idea导入就可以了。
打开后可以看到很多module,不过server的实现是在core模块里,这也是需要着重了解的地方。
debug
研究工程代码还是从debug开始比较好,kafka很友好的最外层放了一个Kafka.scala文件,main方法就在里面,不过在开始之前需要给main配置debug configuration。
把server.properties的路经加到program arguments,以及在enviroment里添加一个log4j.properties配置,这里我是从test里copy了一个到score/src/resources目录下,建立了resources目录。
cd到bin目录, 创建一个zookeeper server
./zookeeper-server-start.sh ../config/zookeeper.properties
然后就可以愉快的打断点debug了。
在启动过程完成后,可以用bin里的producer、consumer example来触发生产消费的逻辑。
目录介绍
clients模块是用于Java应用的生产者、消费者的客户端代码
core模块是kafka server也就是kafka cluster的代码
core module里分了一些package,我们可以从它们的名字和里面的package.html(如果有的话)大概看出这个package的用途。
admin 提供管理功能
api
cluster 集群相关的代码,里面包括了Partition、Replica等
common 一些常用的公共类,又不好起包名字的:)
consumer 消费者代码,已经deprecated,并且挪到clients模块里了
controller
coordinator
javaapi
log log管理模块, log是kafka中存储消息的方式,可以参考The log这边文章查看更多
message 定义了Message,也就是message queue中的message…,还有压缩
metrics kafka监控统计
network 网络层的处理,nio的一层封装
producer 生产者api,也已经迁移到clients module了。
security 权限管理
serializer 定义Encoder和Decoer接口和一些基础的如String、Long的实现
server kafka server的主要实现逻辑
tools 各种可以独立运行的工具,
utils 各种工具类
整体思路
整体思路上来讲,我们按照服务端和客户端来分别讲。希望读者不被绕晕
推荐的书/资源
https://kafka.apache.org/documentation/
kafka-definitive-guide-complete
看完本文有收获?请转发分享给更多人
关注「ImportNew」,提升Java技能