当前位置: 首页 > news >正文

Flink 2.0前瞻!关于技术栈的重新思考与批流融合

作者:vinoyang

来源:Flink

今天我们来解读一下Flink未来的方向:批流融合。这份PPT来自Flink Forward SF 2019。我在之前的一篇推文:Flink Forward 2019 旧金山之行 中曾说有时间会解读一下的,没想到会拖到现在。

这份PPT的演讲者是Flink的PMC Aljoscha,他在社区主要就是负责API、Connector、Scala语言的API的方向。

随着时间的推移,PPT中提到的一些设计可能会产生变化,但是大的方向已经明确了。希望看完这份解读后你依然坚信Flink一直在计算引擎上不断探索,在流计算领域里继续领跑其他框架。

老图了:以流为基础抽象,有界流(批)是无界流上的特例。

数据和查询哪个变化得更快?

对于批而言:很多场景下数据的变化要比查询(通常也理解为业务逻辑)慢。例如ad-hoc,在批的场景下,我们会经常进行各种交互式查询,查询本身可能变得比数据更快;

对于流而言:数据的变化可能要比应用程序的业务逻辑(查询)更快,比如模式检测,很多时候模式没变,只是数据不断地参与模式匹配。

更容易的理解方式:

  • 在批中查询跑在Data上;

  • 在流中Data跑在查询上;

老掉牙的比喻:星球大战系列的上映时间遵循Processing-Time,但剧情时间(EventTime)相比上映时间却是乱序的。

两个时间存在Skew,理想上应该是一致。

接上图,延迟vs完整性

其实之前在Flink里时间的语义只适用于流,但现在为了实现流批统一的概念,需要将这些概念都适配到流和批上去。

所以,这里进行了分别说明,批场景中延迟和完整性天然没有问题。

这幅图的意思是,如果你将这边方框和箭头组成的图整体看作是Workflow,那么批可以一步一步地阶段式进行,而流则必须每个步骤都一直在线。

这解释了现在拥有两套割裂且完全不一样的API的原因。

现状,对于用Table/SQL的人而言,好像本身批流就是统一的。但在下面,他们在生成物理计划时还是被映射到了不同的底层API上,这一点直接使用底层API的人也同样面临应对两套API的困扰。

现状有哪些可提升的地方?(缺点)

说白了就是割裂,代码重复、冗余,维护成本很高。

这给用户带来的困扰,不难理解。

OK,终于到未来的打算了。

如果批是流的子集的话,是不是可以废掉DataSet API,而只存在一套DataStream API呢?

统一批和流API,其实准确地说应该是放弃DataSet API,在DataStream API中引入一些新的概念来适配针对批的抽象。

这里引入的就是BoundedStream,让它使语义更自然,它将没有processing-time的定时器,Watermark也将从负无穷在处理结束后跳到正无穷。

DataStream的翻译以及运行时算子需要增强来支持优化。Source也需要统一。

一个常见的批流混合的例子:在流中广播状态。这里状态视为有界的数据集,那么在这个DAG里,浅色的部分将会先执行,然后再执行深色部分的“流”式子图。

接下来展示的DAG层面以及算子/Task层面为了融合批所要进行的改进。

DAG这部分基本上从翻译、调度、部署、内存管理、网络栈、图等等都必须提供对有界流的增强。而真正包含用户业务逻辑的算子以及执行时表示的Task也需要提供对批模式的支持。

网络层可选择性的推模型,

批采用拉模型(等到上游中间结果集(IR)数据准备完成,下游去拉);

流采用推模型(上游一有数据可供消费,就建立连接,上游将数据推向下游)

当前,跟批流有两套API一样,他们也有两套不同的Source 接口。

批是通过JM分配split,然后task去请求split来进行数据消费。

流里的source function完全是自实现的,目前甚至是需要自己hold主while(true)循环。

所以还需要一个新的统一的source设计:

很明显这部分的设计需要向之前的批的Source倾斜一些,需要引入Split的概念,之前流里的Source太过于自由,完全是没有约束与限制的,但在批里有些设计是无法回避的。

这里会有几个组件:Split, SplitReader, SplitEnumerator

检查点触发相关的逻辑示意:

对Table/SQL API的影响:

这是未来新的技术栈,最上层只有DataStream/Table&SQL API,下面是统一以流为基础抽象的DAG与算子层,再往下是运行时。

总结

推荐阅读

《Flink原理、实战与性能优化》

点击上图了解及购买

推荐语:Flink流式计算领域先驱和布道者,从功能、原理、实战、调优4个维度带你从入门到进阶。


你与世界

只差一个

公众号

相关文章:

  • 什么是IPFS?与区块链又是怎样的关系
  • 新书推荐 |《Python网络编程(原书第2版)》
  • Python传奇:30年崛起之路
  • 新书推荐 |《IPFS原理与实践》
  • 微服务架构之「 下一代微服务 Service Mesh 」
  • 新书推荐 |《OpenCV 4计算机视觉项目实战(原书第2版)》
  • 一文看懂用R语言读取Excel、PDF和JSON文件(附代码)
  • 新书推荐 |《好设计,有方法:我们在搜狐做产品体验设计》
  • 新书推荐 |《广告数据定量分析:如何成为一位厉害的广告优化师》
  • 用Python给女友准备个绝对甜蜜的七夕礼物
  • 新书推荐 |《机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序》...
  • 搞定这个月薪50K的AI热门领域,看这9本书就够了
  • 新书推荐 |《强化学习:原理与Python实现》
  • 智能生产之路(一):从计算机集成制造到精益生产再到工业 4.0
  • 这是一份所有人都适用的DevOps书单
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 08.Android之View事件问题
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Apache的基本使用
  • Django 博客开发教程 8 - 博客文章详情页
  • gf框架之分页模块(五) - 自定义分页
  • JavaScript设计模式系列一:工厂模式
  • Laravel5.4 Queues队列学习
  • pdf文件如何在线转换为jpg图片
  • React-flux杂记
  • Redis 懒删除(lazy free)简史
  • session共享问题解决方案
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Unix命令
  • Vue2.0 实现互斥
  • 二维平面内的碰撞检测【一】
  • 服务器之间,相同帐号,实现免密钥登录
  • 构建二叉树进行数值数组的去重及优化
  • 面试总结JavaScript篇
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 硬币翻转问题,区间操作
  • 找一份好的前端工作,起点很重要
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • MyCAT水平分库
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #考研#计算机文化知识1(局域网及网络互联)
  • (1)(1.13) SiK无线电高级配置(五)
  • (13):Silverlight 2 数据与通信之WebRequest
  • (3)nginx 配置(nginx.conf)
  • (C语言)fgets与fputs函数详解
  • (Oracle)SQL优化技巧(一):分页查询
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (ZT)出版业改革:该死的死,该生的生
  • (备忘)Java Map 遍历
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (算法二)滑动窗口
  • (太强大了) - Linux 性能监控、测试、优化工具