kafka源码解析之一:源代码工程目录介绍

举报
步步清风 发表于 2017/11/09 15:17:48 2017/11/09
【摘要】 对于kafka,我们不仅在单机、集群、参数调优等方面,对kakfa全方位研究,更要在代码层解读,从原理到代码细节一一打开看看。(声明:所有这系列代码分析章节,有些图片/资料整理来自网络公开资料,站在巨人肩膀上二次仔细解读代码总结分享给大家)

以0.8.1版本为例,源码树结构如下图:

image.png

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运行控制的核心入口类,它是采用门面模式设计的。

 image.png

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   中央控制器统计和监控。 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。