1. 引言
笔者早年间有很长一段时间都在阿里云DataWorks上带着团队进行数据开发,后来因为一个契机自己搞起了大数据平台XSailboat。刚开始开发平台的主要的数据开发能力是基于DAG图的可视化离线分析开发和运维。后来手头有一个项目需要使用流式计算功能,所以就想把Flink也引入到XSailboat。
引入进来以后,它应该至少起以下作用:
- 降低Flink计算任务开发的门槛。因为现在小公司做服务型项目,波动性比较大、利润也不高,人员变动大,如果不降低门槛,让新人很快能够入手做一些开发,那么项目是很难做的。
- 提升开发的便捷性。做服务型项目基本都是客场作战,要在用户的环境和网络条件下开展工作,再加上安全限制要求,如果没有一个平台支撑,单纯在IDE中写代码开发,是做不到的。
- 提升开发的规范性,尽力避免事故。
- 降低维护和部署的劳动强度。
- 提升实时计算任务的可靠性和可用性。
首先确立了以下2个主要目标:
a. 像离线分析一样,支持基于DAG的可视化开发;
b. 在平台里应该有开发和生产两套环境;
平台要支持Flink基于DAG可视化开发,不像离线分析,有阿里云DataWorks的样板可以参考。DataWorks当时在实时计算这一块也仅支持实时同步。所以这件工作刚开始完全是一个摸着石头过河,心里没底的事情,只能怀着一定有一条路的信念摸索着干下去。经过将近大半年在实际项目中的实践探索,已经找到了一条可行之路,并且已经相对成熟,正在不断完善辅助支撑功能。
2. 我们的做法
离线分析之所以适合用DAG进行开发,是因为它的主要逻辑表达语言工具是SQL,再辅以循环、分支、归并等结构,更复杂的情况可以用MR和Python节点解决,这样几乎能完全适应所有离线分析的场景。而Flink虽然支持FlinkQL,但是它在实际工作场景下的适用性太弱了,关键的原因就在于离线分析是属于统计,而流式计算式是计算。SQL擅长统计,但并不适合计算(离线分析中复杂点的计算也基本用UDF来做)。
Flink之所以难以用DAG可视化开发,关键的问题就是它的算子只定义了基本特性,内部的逻辑完全自由。这种自由定义,对纯代码开发来说是可以的且强大的,但却对可视化开发不友好。如果可视化仅仅是拖出一个节点来,然后在里面用Java/Scala实现特定的方法,那这就不是可视化开发了,而是另一种Flink专用IDE了。