kafka源码解析之一:源代码工程目录介绍
以0.8.1版本为例,源码树结构如下图:
Core目录为源码实现,其他都是测试类或java客户端代码,不做说明:
admin --管理员模块,操作和管理topic,paritions相关,包含create,delete topic,扩展patitions.
Api --该模块主要负责交互数据的组装,客户端与服务端交互数据编解码.
client --该模块比较简单,就一个类,Producer读取kafka broker元数据信息,topic和partitions,以及leader.
cluster -- 该模块包含几个实体类,Broker,Cluster,Partition,Replica,解释他们之间关系:Cluster由多个broker组成,一个Broker包含多个partition,一个topic的所有partitions分布在不同broker的中,一个Replica包含多个Partition。
common --通用模块,只包含异常类和错误验证
consumer --consumer处理模块,负责所有客户端消费者数据和逻辑处理
contoroller --负责中央控制器选举,partition的leader选举,副本分配,副本重新分配,partition和replica扩容。
javaapi --提供java的producer和consumer接口api
log --Kafka文件存储模块,负责读写所有kafka的topic消息数据。
message --封装多个消息组成一个“消息集”或压缩消息集。
metrics --内部状态的监控模块
network --网络事件处理模块,负责处理和接收客户端连接
producer --producer实现模块,包括同步和异步发送消息。
serializer --序列化或反序列化当前消息
kafka --kafka门面入口类,副本管理,topic配置管理,leader选举实现(由contoroller模块调用)。
utils --Json工具类,Zkutils工具类,Utils创建线程工具类,KafkaScheduler公共调度器类,公共日志类等等。
tools --一看这就是工具模块,包含内容比较多:
导出对应consumer的offset值.
导出LogSegments信息,当前topic的log写的位置信息.
导出zk上所有consumer的offset值.
修改注册在zk的consumer的offset值.
producer和consumer的使用例子.
kafka启动类:kafka.scala
kafka为kafka broker的main启动类,其主要作用为加载配置,启动report服务(内部状态的监控),注册释放资源的钩子,以及门面入口类。
KafkaServerStartble类包装了KafkaSever类,其实啥都没有做。只是调用包装类而已。
KafkaSever类是kafka broker运行控制的核心入口类,它是采用门面模式设计的。
kafka中KafkaServer类,采用门面模式,是网络处理,io处理等的入口。
ReplicaManager 副本管理。
KafkaApis 处理所有request的Proxy类,根据requestKey决定调?用具体的handler。
KafkaRequestHandlerPool 处理request的线程池,请求处理池 <-- num.io.threads io线程数量。
LogManager kafka文件存储系统管理,负责处理和存储所有Kafka的topic的partiton数据。
TopicConfigManager 监听此zk节点的子节点/config/changes/,通过LogManager更新topic的配置信息,topic粒度配置管理,具体请查看topic级别配置。
KafkaHealthcheck 监听zk session expire,在zk上创建broker信息,便于其他broker和consumer获取其信息。
KafkaController kafka集群中央控制器选举,leader选举,副本分配。
KafkaScheduler 负责副本管理和日志管理调度等等。
ZkClient 负责注册zk相关信息.。
BrokerTopicStats topic信息统计和监控。
ControllerStats 中央控制器统计和监控。
- 点赞
- 收藏
- 关注作者
评论(0)