需求背景: 因为不同Flink版本SQL底层实现不相同,同一个带状态的Flink SQL作业目前跨版本升级社区还不支持。所以如果基于Flink SQL开发实时计算平台的话,平台需要支持不同Flink版本。早期的Flink SQL作业用的是1.11,最新的Flink SQL作业采用的是1.13开发的。
而让平台支持不同Flink版本,我能想到有三种实现方案:
平台直接调用 flink run 或 flink run-application 提交作业 优点:实现简单,每个flink版本都会带这个shell脚本 缺点:受限于脚本提供的功能,像语法检查、格式化sql、获取sql执行计划及sql结构和血缘这些“高级”功能没有在官方脚本中提供(能否完善下呢?),如果要使用的话得自己扩展实现(同样需要自己维护多版本)
平台调用 flink sql gateway 暴露的 restful api 提交作业 优点:实现简单,通过gateway屏蔽上层应用调用多版本flink api问题 缺点:需要额外扩展开发和部署gateway,目前暂不清楚社区对gateway的定位是什么?只是配合flink jdbc driver使用么?这两项目目前活跃度都不高
需要维护多个平台版本,像 flink-sql-connector-hive 支持多版本hive那样 优点:现有平台就是基于特定版本flink api开发的,改动小,需要抽取公用接口 缺点:需要“复制”平台多份实现以支持不同flink版本,开发和维护量比较大
目前,我暂时prefer方案2,可能不对,也可能还有更优的我没想到,欢迎各位大佬们给点建议。*来自志愿者整理的flink邮件归档
另外一个选择是flink on zeppelin,可以调用flink on zeppelin的rest api,把zeppelin当做是flink
job server, zeppelin天然支持flink 1.10之后的所有版本。*来自志愿者整理的FLINK邮件归档
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。