工作内容涉及Kafka的部署、优化、实战,当前集群业务数据规模达到400亿条/天,对Kafka特性有一定了解,想进一步学习Kafka的工作原理则需要系统学习其基础模块,因此想使用IDEA配置Kafka源码分析;
步骤1:安装配置JAVA,JDK版本至少为1.7,最好是1.8及以上,配置环境变量后使用java -version命令来查看当前JDK的版本;
步骤2:配置SCALA,Kafka源码使用SCALA编写,配置同JAVA配置一样,下载地址为:http://www.scala-lang.org/download/all.html,解压后配置SCALA_HOME环境变量即可;
步骤3:配置gradle,下载地址为:https://gradle.org/releases/,一般只需要将下载的包解压,同JAVA配置一样,设置GRADLE_HOME环境变量即可,然后可以使用gradle -v命令来验证Gradle是否已经配置完成;
步骤4:下载Kafka的src包(源码包非二进制包),下载地址为:http://kafka.apache.org/downloads,将下载的压缩包解压,并在Kafka的根目录执行gradle idea命令进行构建,可能出现一下问题:
① scala版本问题:kafka的src包下的gradle.properties文件中指定了scala的版本,请确保指定的版本同下载配置的scala版本一致,不然后续会出现问题;
② maven仓库问题:如果出现类似的报错,说明引入maven包有问题;
修改kafka的路径下的build.gradle文件,修改maven仓库的下载地址即可:
buildscript {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}
步骤5:将Kafka导入到IDEA,project from existing source引入kafka的src包;
模块名 | 说明 |
admin | kafka的管理员模块,操作和管理其topic,partition相关,包含创建,删除topic,或者拓展分区等。 |
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命令行工具类,以及公共日志类等内容。 |