1.4 源码阅读顺序

源码已经编辑,且导入idea,后续就可以read it


1. 总体结构

在这里插入图片描述

重点关注的目录:

  • core :Broker 端工程,保存 Broker 代码。
  • clients :Client 端工程,保存所有 Client 代码以及所有代码都会用到的一些公共代码。
  • streams :Streams 端工程,保存 Kafka Streams 代码。
  • connect :Connect 端工程,保存 Kafka Connect 框架代码以及 File Connector 代码。

2. 源码阅读顺序

  1. log 包 : log 包中定义了 Broker 底层消息和索引保存机制以及物理格式。 Log、LogSegment 和 LogManager 这几个类,几乎定义了 Kafka 底层的消息存储机制。

  2. controller 包 : controller 包实现的是 Kafka Controller 的所有功能,KafkaController.scala 文件,它封装了 Controller 的所有事件处理逻辑。如果你想弄明白 Controller 的工作原理,最好多读几遍。

  3. coordinator 包下的 group 包代码 : 当前,coordinator 包有两个子 package:group 和 transaction。前者封装的是 Consumer Group 所用的 Coordinator;后者封装的是支持 Kafka 事务的 Transaction Coordinator。了解下 Broker 端是如何管理 Consumer Group 的。这里比较重要的是 GroupMetadataManager 和 GroupCoordinator 类,它们定义了 Consumer Group 的元数据信息以及管理这些元数据的状态机机制。

  4. network 包代码以及 server 包下的部分代码。

  5. Broker 端顶部的入口类是 KafkaApis.scala。这个类是处理所有入站请求的总入口

  6. clients包:

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

  8. org.apache.kafka.common.network 包。重点关注下 Selector、KafkaChannel 就好了,尤其是前者,它们是实现 Client 和 Broker 之间网络传输的重要机制。如果你完全搞懂了这个包下的 Java 代码,Kafka 的很多网络异常问题也就迎刃而解了。

  9. org.apache.kafka.clients.producer 包。顾名思义,它是 Producer 的代码实现包,里面的 Java 类很多,你可以重点看看 KafkaProducer、Sender 和 RecordAccumulator 这几个类。

  10. org.apache.kafka.clients.consumer 包。它是 Consumer 的代码实现包。同样地,重点阅读 KafkaConsumer、AbstractCoordinator 和 Fetcher 这几个 Java 文件。


3. core模块里的核心包

模块名说明
adminkafka的管理员模块,操作和管理其topic,partition相关,包含创建,删除
api主要负责数据交互,客户端与服务端交互数据的编码与解码。
cluster这里包含多个实体类,有Broker,Cluster,Partition,Replica。其中一个Cluster由多个Broker组成,一个Broker包含多个Partition,一个Topic的所有Partition分布在不同的Broker中,一个Replica包含都个Partition。
common这是一个通用模块,其只包含各种异常类以及错误验证。
consumer消费者处理模块,负责所有的客户端消费者数据和逻辑处理。
controller此模块负责中央控制器的选举,分区的Leader选举,Replica的分配或其重新分配,分区和副本的扩容等。
coordinator负责管理部分consumer group和他们的offset。
log这是一个负责Kafka文件存储模块,负责读写所有的Kafka的Topic消息数据。
message封装多条数据组成一个数据集或者压缩数据集。
metrics负责内部状态的监控模块。
network该模块负责处理和接收客户端连接,处理网络时间模块。
security负责Kafka的安全验证和管理模块。
serializer序列化和反序列化当前消息内容
server该模块涉及的内容较多,有Leader和Offset的checkpoint,动态配置,延时创建和删除Topic,Leader的选举,Admin和Replica的管理,以及各种元数据的缓存等内容。
tools阅读该模块,就是一个工具模块,涉及的内容也比较多。有导出对应consumer的offset值;导出LogSegments信息,以及当前Topic的log写的Location信息;导出Zookeeper上的offset值等内容。
utils各种工具类,比如Json,ZkUtils,线程池工具类,KafkaScheduler公共调度器类,Mx4jLoader监控加载器,ReplicationUtils复制集工具类,CommandLineUtils命令行工具类,以及公共日志类等内容。
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页