美文网首页
Kafka之源码阅读环境的构建

Kafka之源码阅读环境的构建

作者: 正东偏西 | 来源:发表于2020-02-13 22:31 被阅读0次
    走近Kafka

    走近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 git@github.com:${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之源码阅读环境的构建

          本文链接:https://www.haomeiwen.com/subject/mgrrfhtx.html