本篇介绍一下flink在我司的平台化实践,讲个大概,不能讲太详细。
AthenaX介绍
uber AthenaX https://athenax.readthedocs.io/en/latest/, 这个项目就不详细介绍了,官网写的比较详细,核心功能就是封装flink sql 转换为 JobGraph,然后提交到yarn集群运行。
转换过程及源码
AthenaX源码中最核心的代码就是JobCompiler的生成JobGraph这个方法
JobGraph getJobGraph() throws IOException {
StreamExecutionEnvironment exeEnv = env.execEnv();
exeEnv.setParallelism(job.parallelism());
this
.registerUdfs()
.registerInputCatalogs();
Table table = env.sqlQuery(job.sql());
for (String t : job.outputs().listTables()) {
table.writeToSink(getOutputTable(job.outputs().getTable(t)));
}
StreamGraph streamGraph = exeEnv.getStreamGraph();
return streamGraph.getJobGraph();
}
env是一个 private final StreamTableEnvironment env;
这里巧妙的将StreamTableEnvironment转为StreamExecutionEnvironment。我们可以在StreamExecutionEnvironment上设置并发度,checkpoint,backend等等一些属性。底层还是利用了flink的Table api,封装为Table对象去执行。还有就是注册source, udf, sink,sideoutput等。从而封装了一个完整的flink任务,构建为JobGraph。
我司在这里进行了一些改造,借鉴了AthenaX的思想,主要是为这个任务构造了更多的设置,这些都是配置前端后传到后台来的,有setCheckpointingMode,setCheckpointInterval,enableExternalizedCheckpoints,restartAttempts,delayBetweenAttempts,retentionTime,setRestartStrategy。等等,
还有就是丰富了 source(目前还是kafka一种)