【阿里在线技术峰会】蒋晓伟:Blink计算引擎

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 在首届阿里巴巴在线峰会上,阿里资深搜索专家蒋晓伟为大家带来了题为《Blink计算引擎》的分享,相比于Flink,在上层,Blink具有批和流一体化的完备Table API,使得其能够支撑各类业务需求;在底层,Blink重新开发了兼容Flink以及生态的Runtime,实现了流处理和批处理完美的统一。

本文根据阿里资深搜索专家蒋晓伟在首届阿里巴巴在线峰会上的分享整理而成。 此次分享的重点是Blink计算引擎,它是阿里巴巴搜索的流计算和批处理引擎。相比于Flink,在上层,Blink具有批和流一体化的完备Table API,使得其能够支撑各类业务需求;在底层,Blink重新开发了兼容Flink以及生态的Runtime,实现了流处理和批处理完美的统一。


直播视频:


7dee38c6bee3c76d84e6ce6acbf9b9a1e951227b

(点击图片查看视频)


幻灯片下载:点此进入

以下为整理内容。


搜索文档的创建和更新

90fcaad17cccbeccca8025dd54d5b8b69538bc0b

要建立一个搜索系统,首先需要创建搜索文档,具体的创建过程分为三个步骤:第一步,将分散在各地的数据同步到HBase上,数据同步之后,HBase中就包含了创建文档所需的全部数据;第二步,将HBase中的数据进行汇总,经过业务逻辑的处理后,将产生的需要搜索的文档存在结果表当中;第三步,将HBase中的结果表导出到搜索引擎中,即完成了搜索文档的创建。值得注意的是:上述每一步骤都包括全量和增量两个流程。

物化视图

ecd9b5d076a2be55edf9ab1cc46d3163a3927c2d

结果表可以当做是物化视图,物化视图是一种延伸数据,类似于索引。数据库可以确保物化视图和其对应的表的一致性。从物化视图的观点出发,可以对全量和增量进行重新解释,所谓的全量,是相当于索引的创建和重建的流程;而增量则意味着索引的维护。通过物化视图,仅使用同一句SQL语句即可同时解决增量和全量的问题。

流和表的对偶性

25c34be97d162942c817a61feaebf3cb848d7b67

要在大数据内实现增量和全量的统一处理,首先我们需要了解几个概念。

第一个概念是流和表的对偶性。上图的左半部分是一个流,它包括word和 count两列,记载了每一词的出现次数;右边是一张历史表,同样包含word和count两列,但是word列是具有对应主键的。如果利用左边的流更新右边的历史表,就会由原来的五条记录缩减到三条记录。通过物化操作,可以把一个流转化为历史表;当历史表存在时,我们可以通过查看、导出历史表的修改日志,恢复原来的流。在某种意义上,流和历史表所包含的信息量是相同的。流和表的对偶性,意味着我们可以将流计算和批处理结合起来。有一点需要注意的是,这里表是指动态的表,里面的内容是不断修改的。

第二个概念是流的等价性,两个流当且仅当它们产生相同的正则历史表时,两个流等价。如果有两个流用来更新同一个历史表,假设在不同的时间点,它们都能得到相同的历史表,则这两个流就是等价的。流的等价性给流处理带来了很大的灵活性,正是这种灵活性使得我们可以在Blink中完美地结合流处理和批处理。


什么是Blink?

13c1cc3cda01eefe7d80fa5e8d0ce1d206f68dfd

Blink是阿里巴巴搜索团队基于Flink开发的计算引擎,其目的是为了支撑阿里巴巴大规模的计算需求。Blink实现了流处理和批处理完美的统一。相比于Flink,在上层,Blink具有批和流一体化的完备Table API,使得其能够支撑各类业务需求;在底层,Blink重新开发了兼容Flink以及生态的Runtime。

Blink的Table API

d6326f8b986b6eb84b504031203508fb5ef26cb6

Blink的Table API的设计原则是实现流和批的一体化处理。秉着该原则,Blink开发了一系列的功能,包括:

  • UDF/UDTF/UDAGG,用户可以利用这些函数轻松实现业务逻辑的表达;
  • 双流Join;
  • Aggregation(min、max、avg、sum、count、distinct_count);
  • Windowing;
  • Retraction撤回机制。

Blink的Runtime

841f6d135a6e92eafbef81ac08c68cbd73922406

Blink在Runtime上也做了很多改进。首先Blink实现与YARN的原生态整合;其次对Checkpoint和状态管理进行了优化,使其能够真正用于生产环境中;同时,Blink在容错性、高可用性、稳定性和可运维性等方面都有很大的改进;此外,Blink还支持动态伸缩。


Flink On YARN

 

110b1bde794673977a92acbb84cc15fdfd1b497b

上图展示的是Flink在YARN上的架构,YARN是Hadoop内的调度系统。Flink与YARN整合的思路十分简单:在运行Flink之前,首先需要启动Flink集群,该集群需要实现配置好;集群启用之后,Flink集群就可以接收用户提交的工作;Flink集群接收到用户提供的工作之后,通过JobManger将从YARN处获取的资源分配给不同的Job。在每个YARN Node上存在一个YARN NodeManager,它用来调用不同的Container。该架构存在几个明显缺陷:第一,不同的Flink Job的任务可能会运行在同一Flink TaskManager中,即不同Job的任务可能运行在同一个进程内,其中一个Job的任务失败可能会杀死整个进程,隔离性较差;第二点,由于Flink集群需要事先配置,一旦资源被Flink占用后,YARN就无法再将这些资源分配给其他的集群,这样就有可能导致一定程度的资源浪费,同时如果事先配置的资源不足,Flink集群是无法简单地扩容;第三点,由于管理全部Job的Flink JobManager进程运行在一个独立的container,当Job急剧增加时,Flink JobManager就成了整个架构可伸缩性的瓶颈。

Blink YARN的原生态整合

ef3c4805aa4fb83bef80419d29030cb6cdb37e84

在Blink YARN的原生态整合中,去掉了单点的JobManager。当用户提交Job时,YARN ResourceManager会启用一个Job Master,两者一一对应,当Job内的Task需要资源时,再通过Job Master向YARN申请资源,实现资源的动态分配;同时,不同的Job处于不同的Container中,确保Job之间的隔离。

Blink的失败处理机制

b82d45e1925a0057c9bdec0e23aca06ea1bcdce6

在分布式系统中,失败是不可避免的。面对机器挂掉、进程崩溃时,如何保证系统的一致性是一个很大的挑战。一致性主要包括至少一次和恰好一次两个语义。至少一次是说,流来的每个消息能够保证至少处理一次,不会丢失消息。至少一次相对而言比较容易实现,只需要记录哪些消息成功处理过了,即使某个消息处理失败,也只需要从最后一条成功处理的消息之后重新开始处理即可。

恰好一次是指处理过的消息与状态的一致性。如何实现恰好一次这种逻辑呢?在分布式系统中,我们可以通过Chandy-Lamport算法实现恰好一次的逻辑。在流的源头上,当需要做Checkpoint时,插入名为Barrier的特别消息即可。它的作用是将state 获取快照之前的消息和之后的消息区分开来。Barrier同其他消息一样,同样会流入每一个operator中。

Blink Worker的错误恢复

5d30764265e6b37525f6128412495b981f73db4f

Blink Worker的错误恢复分为两种情形:第一种是At Least Once,如果一个节点Fail了,我们只需要重启该节点,然后找到影响该节点的源头,再将源头进行回放即可,无需重启整个Job;第二种是Exactly Once,如果有一个节点Fail,我们需要找到该节点的连通图,将该节点重启,然后将连通图回退到上次checkpoint的位置进行回放即可。

Blink Master的高可用性

c2e0a70c157f59dbb20178b7e2f44bf7f1129d3d

当Blink的JobMaster失败之后,YARN会重新启动该JobMaster,但是此时JobMaster已经丢失了原来的状态。为了保证JobMaster不丢失原来的状态,我们将JobMaster内的代码写成了状态机,每次状态修改之前都需要Log到HDFS;在新的JobMaster启动之前,通过HDFS的回放得到其原有状态,从而保障了Blink Master的高可用性。

Blink的动态伸缩

922c7a92a9f8fdb8ae5adcf2283eccc48c6ae382

在流计算中,实验和真正上线使用时是存在偏差的,而且随着业务的增加,流量也会随之改变。通过引入bucket,动态支持Blink的伸缩。此外,在Blink中,我们添加了多个监控指标,用于观测Job性能。


现状与计划

9c3af79cb71c226fea53dd1d9c1597d27f60744e

目前Blink在阿里已经实现上千台机器规模的集群上线,用于支撑搜索和推荐的核心业务。同时,集团内外对Blink表现出了浓厚的兴趣,包括Uber、FaceBook等在内的企业都在考虑使用Blink。

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
3月前
|
大数据 流计算
掌阅科技基于阿里云实时计算Flink构建数据基建平台
掌阅科技专注于数字阅读,是全球领先的数字阅读平台之一。基于数字阅读平台的海量用户,掌阅通过阿里云实时计算Flink等大数据计算和分析服务,搭建商业化、用户增长、推荐服务等数据基建平台,实现商业化增值与用户阅读体验的结合。
329 0
|
流计算
《阿里新一代实时计算引擎 Blink技术解密》电子版地址
阿里新一代实时计算引擎 Blink技术解密
66 0
《阿里新一代实时计算引擎 Blink技术解密》电子版地址
|
流计算
《阿里新一代实时计算引擎Blink技术解密》电子版地址
阿里新一代实时计算引擎Blink技术解密
48 0
《阿里新一代实时计算引擎Blink技术解密》电子版地址
|
消息中间件 SQL 大数据
37手游云平台基于Flink+Hologres大数据建设实践
本文介绍37手游云平台基于Flink+Hologres大数据建设实践
2427 1
37手游云平台基于Flink+Hologres大数据建设实践
|
SQL 消息中间件 存储
美团基于 Flink 的实时数仓平台建设新进展
美团实时数仓平台负责人姚冬阳在 FFA 2021 的演讲。
美团基于 Flink 的实时数仓平台建设新进展
|
存储 运维 监控
实时数仓Hologres首次走进阿里淘特双11
这是淘特在阿里巴巴参与的第二个双11大促,大促期间累计超过上千万消费者在此买到心仪的商品,数百万家商家因为淘特而变得不同,未来,淘特也将会继续更好的服务于下沉市场,让惠民走近千万家。
590 0
实时数仓Hologres首次走进阿里淘特双11
|
存储 消息中间件 搜索推荐
FFA 2021 专场解读 - 开源解决方案 / 流批一体
关注 FFA 2021,一起探讨当下大数据的发展趋势与未来动向吧~
FFA 2021 专场解读 - 开源解决方案 / 流批一体
|
SQL 存储 消息中间件
汽车之家:基于 Flink + Iceberg 的湖仓一体架构实践
由汽车之家实时计算平台负责人邸星星在 4 月 17 日上海站 Meetup 分享的,基于 Flink + Iceberg 的湖仓一体架构实践。
汽车之家:基于 Flink + Iceberg 的湖仓一体架构实践
|
机器学习/深度学习 监控 搜索推荐
【行业应用】阿里云实时计算 Flink 版广告行业解决方案
互联网广告领域经过长期发展,分工逐渐精细化,除了各种代理商之外,还出现了 ADN、SSP、ADX、DSP 等各种平台,市场结构极为复杂,形成了一个巨大的生态。
【行业应用】阿里云实时计算 Flink 版广告行业解决方案
|
机器学习/深度学习 SQL 人工智能
【行业应用】阿里云实时计算 Flink 版游戏行业解决方案
游戏作为新兴崛起的娱乐产业,当下发展得如火如荼,其吸金能力和趣味性也吸引更多企业与人才投入其中。游戏行业公司主要分为发行和制作两类,游戏的类型可细分为手游、页游和端游三种,随着移动端设备的更新发展以及 5G 时代的降临,手游将迎来绝佳的发展时机。
【行业应用】阿里云实时计算 Flink 版游戏行业解决方案