想要快速上手了解一个项目, 就需要先把项目跑起来 : p)
flink最新分支版本是release-1.11, 但是此版本还未支持windows启动脚本(原因可能是大佬都用mbp),
所以本次使用支持windows启动的flink release-1.8的分支版本。
不想本地远程调试的直接拉到最后,配置参数启动两个启动类!!!
ps:1.7版本的jdk启动不了flink, 自行cmd, java -version检查本机jdk版本,不是就自行百度配置环境变量。
宇宙最好用的java ide. : )
flink源码去github上拉取, 地址 https://github.com/apache/flink.git
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlOXk4us-1600696644922)(/imgs/flink/flink项目.png)]
使用命令mvn clean install -DskipTests -Dfast
build项目, 需配置maven的环境变量方便全局使用
或者使用idea的maven编译按钮编译项目, 1.11的编译会有报错, 根据提示解决报错, 1.8版本的build时间过长, 大概需要10+分钟。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNSB4CbA-1600696644925)(/imgs/flink/flink编译构建.png)]
buid success
字样出现在console里。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rdyf4Hpg-1600696644928)(/imgs/flink/flink-dist.png)]
SET JVM_REMOTE_JOBMANAGER=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
SET JVM_REMOTE_TASKMANAGER=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006
start java %JVM_ARGS% %JVM_REMOTE_JOBMANAGER% %log_setting_jm% -cp "%FLINK_CLASSPATH%"; org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint --configDir "%FLINK_CONF_DIR%" > "%out_jm%" 2>&1
start java %JVM_ARGS% %JVM_REMOTE_TASKMANAGER% %log_setting_tm% -cp "%FLINK_CLASSPATH%"; org.apache.flink.runtime.taskexecutor.TaskManagerRunner --configDir "%FLINK_CONF_DIR%" > "%out_tm%" 2>&1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1i3l4i3-1600696644930)(/imgs/flink/flink-启动.png)]
可访问本地地址localhost:80801 查看flink-ui, 并可提交examples里的jar包执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1biAIqxq-1600696644931)(/imgs/flink/flink-ui.png)]
在idea的启动栏, add configuration, 找到remote, 创建
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E3xq4wvd-1600696644933)(/imgs/flink/remote-jm.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RhyGmF5-1600696644934)(/imgs/flink/remote-tm.png)]
参考官网的架构图可知,首先由program优化生成streamGraph,
交给client, 由client submit job到jobmanager,
再由jobmanager分发调度submit task, 交给taskmanager执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-220cvv3V-1600696644934)(/imgs/flink/process.png)]
入口类: Dispatcher
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Hy4NKrk-1600696644935)(/imgs/flink/flink-jm-debug.png)]
入口类: TaskExecutor
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCqR5wUA-1600696644936)(/imgs/flink/flink-debug-tm.png)]
这三个组件之间的通信是通过rpc来的, rpc使用了netty, 具体逻辑在handler里.
jobManager和taskManager的日志都在之前创建的log目录里
Q:start-cluster.bat里的两个类是启动类, 但是debug进不去?
org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint
org.apache.flink.runtime.taskexecutor.TaskManagerRunner
A:以上方法其实是本地启动后远程调试,真正的本地启动应该是运行这两个启动类。那么怎么运行呢?
根据启动脚本可知,只需要配置VM OPTIONS和application args就行。运行成功后打开本地localhost:8081,上传一个任务就可以debug进了。
具体看见截图:
VM Options:-Xms1024m -Xmx1024m -cp G:\workspace\github\flink\flink-dist\src\main\flink-bin\lib\*
program Arguments: --configDir G:\workspace\github\flink\flink-dist\src\main\flink-bin\conf > G:\workspace\github\flink\flink-dist\src\main\flink-bin\log\task-log.out 2>&1