暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kafka 源码分析1 : 基础搭建和项目结构介绍

ImportNew 2018-05-19
652

(点击上方公众号,可快速关注)


来源:刘正阳 ,

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技能

文章转载自ImportNew,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论