分析flink源码,第一步从flink源码编译开始。
环境:
scala 2.12
java 1.8
flink 1.17.0
maven 3.6.8
nodejs(这个去官网下载安装一下就好,npm -v 显示成功就好)
1、首先在flink 官网下载最新的源码
下载链接: https://flink.apache.org/zh/downloads/
2、下载完成后,解压,将源码导入idea
下面附上我的maven setting文件配置:
<?xml version="1.0" encoding="utf-8"?>
<settings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<!--本地仓库路径-->
<localRepository>/maven-repository</localRepository>
<!--注意:mirrorOf千万别为*,建议为profile的id-->
<mirrors>
<mirror>
<id>aliyun-nexus</id>
<name>aliyun-nexus</name>
<mirrorOf>aliyun</mirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<mirror>
<id>huawei-nexus</id>
<name>huawei-nexus</name>
<mirrorOf>huawei</mirrorOf>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
<mirror>
<id>confluent-nexus</id>
<name>confluent-nexus</name>
<mirrorOf>confluent</mirrorOf>
<url>https://packages.confluent.io/maven/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>aliyun</id>
<repositories>
<repository>
<id>aliyun-nexus</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun-nexus</id>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>huawei</id>
<repositories>
<repository>
<id>huawei-nexus</id>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>huawei-nexus</id>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>confluent</id>
<repositories>
<repository>
<id>confluent-nexus</id>
<url>https://packages.confluent.io/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>confluent-nexus</id>
<url>https://packages.confluent.io/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>cdh</id>
<repositories>
<repository>
<id>cdh-nexus</id>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<name>Cloudera Repositories</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>cdh-nexus</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<profile>
<id>apache</id>
<repositories>
<repository>
<id>apache-nexus</id>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</snapshots>
<name>apache Repositories</name>
<url>https://repository.apache.org/content/repositories/snapshots/</url>
<layout>default</layout>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>apache-nexus</id>
<url>https://repository.apache.org/content/repositories/snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<!--设置默认配置文件-->
<activeProfiles>
<activeProfile>aliyun</activeProfile>
</activeProfiles>
</settings>
3、编译打包
编译时,跳过测试,如果有无法下载的jar, 可以本地单独下载,使用maven命令安装到本地仓库。
mvn install -Drat.skip=true -DskipTests -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Dfast -T 4 -Dmaven.compile.fork=true
大概30min左右,出现build success, 即编译完成
4、测试运行
执行该wordcount程序,出现如下结果:
在测试过程中可能会有问题,经常出现的一个问题是akka抛错,可以根据后面的提示进行解决,如下:
mvn clean package -pl flink-rpc/flink-rpc-akka,flink-rpc/flink-rpc-akka-loader -DskipTests
自此源码编译完毕,接下来就可以针对源码的各个模块进行相应的分析了。