Kafka之源码阅读环境的构建

走近Kafka

走近Kafka之源码阅读环境的构建

  • 2.4版本代码分支为例
  • kafka官方文档为参考

构建准备:

  • [Ubuntu 18 安装] Linux衍生系统
  • [Java 1.8+ 版本安装] Java环境
  • [Gradle 5.6.4 版本安装]
    • Kafka源代码编译构建工具
  • [Git安装] 代码管理
  • [zookeeper 安装] kafka集群构建/调试使用
  • [Scala 2.12.10 安装] 阅读源代码和远程调试使用
  • [IntelliJ Idea安装] 阅读源代码和远程调试使用
    • 安装scala和lombok插件
    • 由于某些网络运营商屏蔽了IntelliJ 系列的dns映射,所以无法下载插件的小伙伴可以到[网盘下载],提取码: 5e52.解压后,将两个文件夹放到对应的InteliJ的插件目录下,比如:/home/${user}/.IdeaIC2019.3/config/plugins目录下,重新启动IntelliJ即可。

开始构建

  • 创建工作目录: mkdir kafka_code_location
    创建一个目录作为Kafka源代码下载目录,比如kafka_code_location

  • [kafka] 项目仓库fork到自己的github

  • 切换到工作目录:cd kafka_code_location,
    从自己的github中pull kafka的源代码,git clone [email protected]:${username}/kafka.git

  • 分支准备:进入kafka代码目录,cd kafka;
    切换到kafka 2.4分支,git checkout 2.4
    从此分支构建自己的分支,git checkout -b your_branch_base_2.4

  • 主要编译命令说明

    • ./gradlew jar构建 jar包并运行

    • ./gradlew srcJar构建源码包

    • ./gradlew aggregatedJavadoc构建javadoc文档

    • ./gradlew clean清理并构建

    • ./gradlew idea构建项目

    • ./gradlew eclipse构建项目

  • 执行 ./gradlew idea

  • 导入项目到 IntelliJ 中

     打开 IntelliJ,选择“打开工程”,选择 kafka 目录即可。
    
    

核心目录:

  • core: Broker工程代码。

  • clients: Client工程代码以及一些公共代码。

  • streams: Streams工程代码。

  • connect: Connect工程框架代码以及FileConnector代码。

推荐的代码模块学习顺序

  • log其中定义了 Broker底层消息和索引保存机制以及物理格式。

    • LogLogSegmentLogManager等几个类,主要定义了Kafka底层的消息存储机制。
  • controller主要实现的是Kafka Controller的所有功能,KafkaController.scala文件,它封装了Controller的所有事件处理逻辑

  • coordinatorgroup包代码,coordinator包有grouptransaction

    • 前者封装的是Consumer Group所用的Coordinator,后者封装的是支持Kafka事务的Transaction Coordinator
      了解Broker是如何管理Consumer Group的。GroupMetadataManagerGroupCoordinator类,它们定义了Consumer Group的元数据信息以及管理这些元数据的状态机机制。
  • network代码和server包下的部分代码。

  • Broker主要看KafkaApis.scala。处理请求的主要功能封装

  • clients:略

  • org.apache.kafka.common.record这个包下面主要是Kafka消息实体类,比如用于在内存中传输的MemoryRecords类以及用于在磁盘上保存的FileRecords类。

  • org.apache.kafka.common.network重点关注Selector、KafkaChannel,建议更加注重Selector,它们是实现Client 和 Broker之间网络传输的重要机制。很多网络异常问题就是这个包中抛出的!

  • org.apache.kafka.clients.producer它是 Producer 的代码实现包,可重点选择几个类学习即可,比如 KafkaProducer、Sender 或者 RecordAccumulator等。

  • org.apache.kafka.clients.consumer它是 Consumer 的代码实现包。同org.apache.kafka.clients.producer,重点阅读KafkaConsumer、AbstractCoordinator 和 Fetcher等类即可。

后续

  • 后续将会使用这个环境对kafka源代码进行学习分享

你可能感兴趣的:(Kafka之源码阅读环境的构建)