前言
阿里云双11领亿元补贴,拼手气抽iPhone 11 Pro、卫衣等好礼,点此参与:http://t.cn/Ai1hLLJT
2019.10.7~9号,随着70周年国庆活动的顺利闭幕,Flink Forward 也照例在他们的发源地柏林举办了第五届大会。虽然还没有拿到具体的数据,不过从培训门票已经在会前销售一空的这样的现象来看,Flink Forward 大会还是继续保持了一个良好的势头。本届大会不管是从参会人数上,提交的议题,以及参加的公司数量来看都继续创了一个新高。当然,这要去掉去年 Flink Forward 北京站的数据 ;-)。阿里巴巴这次共派出了包括笔者在内的3名讲师,总共参加了4场分享和2个问答环节。在这里,我会根据自己参与的议题给大家做一下这次会议整体的一个介绍和个人在这次参会过程里面的感受和思考,希望对感兴趣的同学有所帮助。
Keynote
先说说这两天的 Keynote。第一天的开场 Keynote 还是继续由社区一哥 Stephan Ewen 来给出。他先总结了一下 Flink 项目目前的一些状态,包括:
- Flink 在8月份的 Github star 数超过了1万
- 在所有 Apache 项目中,Flink 排在邮件列表活跃度的 Top 3,并且这个数字在接下来很有可能还会变小
- 8月份发布的 1.9.0 版本是 Flink 目前为止发布的功能最多,修改量最大的一个版本
这张图片很好的概括了 Flink 在过去大半年所侧重的工作:
对于 Flink 未来的一个可能的方向,Stephan 继续表达了他对 Application 这种偏在线服务的场景的兴趣。他先是将我们平时所说的批处理和流计算总结为 Data Processing,同时将消息驱动和数据库之类的应用总结为 Applications,而 Stream Processing 就是连接这两种看起来截然不同的场景的桥梁。我在一开始听到这个的时候也有点一头雾水,不明就里的感觉,经过这几天对这个问题的思考,有了一些自己的理解,我将在文末展开进行解释。提到 Application,就不得不提现在很流行的 FaaS(Function as a Service)。在这个领域,Stephan 觉得大家都忽视了 State 在这里面的重要性。比如一个典型的 Application 场景,一般都会具备以下这些特点:
- 整个 Application 会有一个或者多个入口,计算逻辑由消息来驱动
- 具体的业务逻辑被拆分成粒度较小的几个单元,每个逻辑单元使用一个 Function 来执行具体的逻辑
- Function 之间会互相调用,一般来说我们也会将这些调用设计为异步的模式
- 每个 Function 的计算逻辑可能会需要一些状态,比如可以使用数据库作为状态的存储
- 在完整的计算逻辑完成之后,我们会通过一个统一的出口返回处理的状态
在这个场景里,我们看到了至少三点需求:
- 计算逻辑由消息驱动
- 计算逻辑和互相调用的关系必须可以比较灵活的进行组织
- 计算逻辑需要状态的支持,并且在某些情况下,需要保证 exactly once 的处理语义
这里面属第三点最难做。大家可以想象一下,假如现在我们的 Application 要处理类似电商场景下单这样的过程,同时我们依赖数据库作为这个应用的状态存储。我们有一个专门的库存管理逻辑和一个下单逻辑。在一个完整的购买逻辑里,我们需要先调用库存管理模块,检查下该商品是否有库存,然后将该商品的库存从数据库里减去1。这一步成功之后,我们的服务再继续调用下单逻辑,在数据库里面生成一个新的订单。在一切都正常的时候,这样的逻辑还是比较简单的,但一旦有错误出现就会相当麻烦。比如我们已经将库存减掉,但是在生成订单的过程中发生了错误,这样我们还得想办法让库存进行回滚。一旦类似的业务逻辑单元变多之后,你的应用代码将变得异常复杂。这个问题就是典型的 end-to-end exactly once,我们希望一个错综复杂的计算流程,要么全部一起成功,要么全部失败,就当它完全没发生过一样。
为了解决这样的问题,结合 Flink 目前的一些积累,Stephan 推出了一个全新的项目:statefun.io,即 Stateful Functions。通过结合 Stateful Stream Processing 和 FaaS,来提供一种全新的编写 Stateful Application 的方式。
具体的实现逻辑,我就不再过多介绍,大家可以自行到官网进行查看和学习。
Cloudera
Stephan 给的第一个 Keynote 还是比较的偏技术化,这也符合他的个人风格。在之后的包括第二天的所有 Keynote,基本上都是知名的大公司来给 Flink 站台了。先从 Cloudera 说起,他们表示现在已经收到了越来越多的客户点名要 Flink 的情况,因此就”顺应民意“在他们的数据平台里加入了 Flink 的支持。能在这种商业开源软件提供商中占据一席之地,基本也算是标志在 Flink 已经进入了一个比较成熟的阶段。另外,Cloudera 是玩开源的老大哥级别人物了,当然不会只是简单的提供 Flink 软件这么简单。他们在会上宣布了他们已经组建了一支由两名 Flink PMC 带队的工程团队,并且打算后续在 Flink 社区也投入更多的资源,这无疑是给 Flink 社区的繁荣又注入了一股新鲜又强大的力量。
AWS
AWS 在第二天登场,由他们主管 EMR、Athena、DocumentDB以及区块链的老大 Rahul 给出。他先是回顾了一下流计算相关的产品在 AWS 的发展历程: