阿里新一代计算引擎Blink与SQL和机器学习的二三事

随着大数据技术的不断发展和成熟,无论是传统企业还是互联网公司都已经不再满足于离线批处理,实时流处理的需求和重要性日益增长。

阿里新一代计算引擎Blink与SQL和机器学习的二三事

作者:蔡芳芳

随着大数据技术的不断发展和成熟,无论是传统企业还是互联网公司都已经不再满足于离线批处理,实时流处理的需求和重要性日益增长。

近年来业界一直在探索实时流计算引擎和API,比如这几年火爆的Spark Streaming、Kafka Streaming、Beam和Flink。阿里巴巴自2015年开始改进Flink,并创建了内部分支Blink,目前服务于阿里集团内部搜索、推荐、广告和蚂蚁等大量核心实时业务。其中Blink SQL和Table API(java/Scala版的类SQL API)是一套基于Blink引擎打造的可以同时支持流处理和批处理的统一的 API。与此同时,阿里巴巴还以Blink和分布式存储系统HBase为核心,设计并实现了一个面向算法人员、支持可视化自助开发运维的在线机器学习平台Porsche。

作为Blink研发团队的负责人之一,同时也是本次QCon上海2017“大数据实时流计算与人工智能”专题的出品人,王绍翾与我们分享了他关于实时流计算的看法,并对选择Flink的原因、Blink对Flink所做的改进和优化、流数据SQL查询,以及阿里巴巴自研的基于Blink的在线机器学习平台Porsche等问题进行了解答。

Q:为什么说如今企业对实时流计算的需求已经从nice to have变成must have?

大沙:今天新经济体的崛起主要依托于两个核心技术:大数据计算和人工智能。无论是传统的大数据统计还是新兴的人工智能,实时计算的能力都显得十分重要。如何获取数据、处理数据并从数据中挖掘有价值的信息,是各个新经济体都努力在解决的问题,所以实时计算一直都是nice to have。可惜早期的实时计算是非常昂贵的。

随着软硬件的飞速发展,现在构建一套能够支撑大规模、低延迟的实时计算处理引擎变得相对容易很多(这点非常类似于沉睡多年的deep learning的崛起,没有新一代的软硬件计算的升级,deep learning也只能停留在书本上)。

另外,越来越多的云计算平台开始支持实时计算产品,使得流计算更加触手可及,门槛大大减低,人人都可以花相对合理的价格买到流计算的能力。这样,实时计算就自然而然地变成了must have。因为不使用高性能的实时计算就意味着在商业竞争中有被对手赶超甩开的可能。

Q:您参加了今年9月在柏林召开的Flink Forward大会,能否跟我们分享一下流计算的最新进展?

大沙:我们从2016年开始先后参加了3次Flink Forward大会并做了分享。

9月在柏林的这次会议一个比较明显的感受就是流计算的场景和用户增长十分快速。除了国内外的大公司,一些中小企业也开始尝试用流计算支撑和服务业务。应用场景上,除了常见的实时数据统计和实时监控分析等等之外,还涌现了大量的使用流计算做人工智能的技术和案例,让人十分振奋。

另外在这次大会上,dataArtisans和阿里巴巴都公布将在近期更新升级各自的流计算云平台(dataAtisans的DA,和阿里的streamCompute)。有了这些实时流计算的云平台,可以预见到在未来的一年中,流计算应用和用户还会持续快速增长。

Q:相比Spark Stream、Kafka Stream、Storm等,为什么阿里会选择Flink作为新一代流式计算引擎?前期经过了哪些调研和对比?

大沙:我们是2015年开始调研新一代流计算引擎的。我们当时的目标就是要设计一款低延迟、exactly once、流和批统一的,能够支撑足够大体量的复杂计算的引擎。Spark streaming的本质还是一款基于microbatch计算的引擎。这种引擎一个天生的缺点就是每个microbatch的调度开销比较大,当我们要求越低的延迟时,额外的开销就越大。这就导致了spark streaming实际上不是特别适合于做秒级甚至亚秒级的计算。

Kafka streaming是从一个日志系统做起来的,它的设计目标是足够轻量,足够简洁易用。这一点很难满足我们对大体量的复杂计算的需求。

Storm是一个没有批处理能力的数据流处理器,除此之外Storm只提供了非常底层的API,用户需要自己实现很多复杂的逻辑。另外,Storm在当时不支持exactly once。种种原因,Storm也无法满足我们的需求。

最后,我们发现了Flink,并且惊喜地发现它几乎完美满足了我们所有的需求:

a) 不同于Spark,Flink是一个真正意义上的流计算引擎,和Storm类似,Flink是通过流水线数据传输实现低延迟的流处理;

b) Flink使用了经典的Chandy-Lamport算法,能够在满足低延迟和低failover开销的基础之上,完美地解决exactly once的目标;

c)如果要用一套引擎来统一流处理和批处理,那就必须以流处理引擎为基础。Flink还提供了SQL/tableAPI这两个API,为批和流在query层的统一又铺平了道路。因此Flink是最合适的批和流统一的引擎;

d) 最后,Flink在设计之初就非常在意性能相关的任务状态state和流控等关键技术的设计,这些都使得用Flink执行复杂的大规模任务时性能更胜一筹。

Q:Blink和Flink的主要区别是什么?Blink做了哪些优化和升级?

大沙:简单的说Blink就是阿里巴巴开发的基于开源Flink的enterprise版计算引擎。如前面所说,虽然Flink在理论模型和架构方面有很多创新,但是在工程实现上还有不少问题。这些问题大多都是我们在大规模使用中发现的。阿里的业务场景非常复杂,job的体量都相当大,很多问题在一般的公司、一般的场景是很难接触到的。

从2015到2016年,我们Blink团队主要专注于解决Blink的runtime稳定性和scalability的问题:

a)优化了集群调度策略使得Blink能够更好更合理地利用集群资源;

b)优化了checkpoint机制,使得Blink能够很高效地处理拥有很大状态的job;

c)优化了failover的策略,使得job在异常的时候能够更快恢复,从而对业务延迟造成更少的影响;

d)设计了异步算子,使得Blink能够在即使被读取外部数据阻塞的同时还能继续处理其他event,从而获得整体非常高的吞吐率。

在拥有了稳定的runtime之后,我们开始专注于增强Blink的易用性。所以从2016年底到现在,我们大力开发Blink实时计算SQL,通过SQL作为统一API服务于各种复杂业务。从规范streaming SQL的语义和标准,到实现UDX、join、aggregation、window等一系列SQL最重要的算子,我们几乎一手打造了完整的streaming SQL,并且将这些工作推回了Flink社区。我们的工作也获得了Flink社区的认可。截止今天,Blink团队先后拥有了5位Flink committer。

Q:流数据的SQL查询存在什么难点?Blink SQL/Table API是一套基于Blink引擎打造的可以同时支持流处理和批处理的统一的 API,那么它是否已经可以很好地解决流式数据的SQL查询问题?是怎么做到的?

流计算SQL设计中最大的难点就是Stream SQL的语义和标准。这个事情在Flink和Calcite两个社区一直都在讨论研究中,直到最近我们基本达成了共识,那就是“世界上不存在Stream SQL”。流和批的计算可以自然而然地在传统SQL这一层统一。

流计算所特有的unbounded特性其实本质只是何时观测抽样计算结果,这种属性可以作为一个job的configure来设置而无需去改变用户的business query logic。为了能够使用传统SQL在流计算上执行,我们和Flink社区一起引入了dynamic table的概念。这里不详细展开,感兴趣的可以去看一下我们今年在Flink官方blog上发表的这方面的介绍(“Continuous Queries on Dynamic Tables”, by Fabian Hueske, Shaoxuan Wang, and Xiaowei Jiang)。也可以去听一下我们今年4月和9月在旧金山和柏林分别举办的Flink forward上的分享(在youtube上有视频)。

除了dynamic table之外,我们还提出并解决了流计算撤回(retraction)等其他重要的流计算场景拥有的概念。有了这些语义和功能,使用传统批处理SQL就能写出Blink流式计算的任务,这样就使得使用Blink SQL作为一个支持流处理和批处理的统一的API成为可能。

Q:阿里内部哪些业务和产品用到了Blink SQL?

大沙:我们基于Blink SQL打造了新一代阿里巴巴流计算平台streamCompute。现在整个阿里集团包括搜索、推荐、广告等大部分核心流计算业务都是通过streamCompute平台来提供服务。我们近期还会通过阿里云开放我们的streamCompute平台,使更多的用户享受到Blink实时计算带来的便捷。

Q:实时流式计算对机器学习平台的重要性体现在哪里?随着人工智能技术的发展,对实时流式计算的需求会发生哪些变化?

大沙:早期的机器学习都是通过离线大数据做全量计算提取特征、训练模型,然后再将这些特征和模型应用于系统之中从而影响算法结果。这种离线计算往往需要数小时甚至数天的时间,这就使得本来能够实时采集的数据最终需要经历一个很长的周期才能对算法结果产生影响。在某些极端情况下,这种离线计算产生的模型和特征都不能正确合理地体现算法效果。因此,如何通过实时计算引擎及时地同步数据的变化,从而快速地完成数据处理、特征提取、模型训练等一系列操作,就显得至关重要。

从我们多年在人工智能方面的经验来看,当一个新的人工智能技术在离线建模方面拿到比较好的结果之后,算法工程师们就会自然而然地开始思考如何把离线建模和实时计算使用结合起来,甚至是把离线建模变为实时建模。可惜早期的实时计算非常昂贵,随着软硬件飞速发展,慢慢地有一些公司拥有了一套能够支撑大规模、低延迟、高一致性保障的实时计算处理引擎之后,他们就开始利用机器学习、深度学习等人工智能技术从实时数据中高效地挖掘出有价值的信息。

随着人工智能技术的快速发展,新的人工智能算法和新的计算硬件层出不穷。因此除了要拥有实时计算的能力,计算学习平台往往还需要能够十分方便地集成各种算法和计算硬件。这些往往都是一个好的实时计算学习平台的核心竞争力。

Q:您这次担任出品人的专题中也为大家带了阿里新一代实时机器学习平台Porsche,而Porsche的实时计算部分主要就是基于Blink,请介绍一下Porsche是如何基于Blink实现“在线机器学习”的?

大沙:阿里巴巴是一个非常重视以技术推动商业发展的公司。我们现在的核心电商业务的搜索和推荐后端都大量使用了人工智能技术。为了很好地支撑和接入业务,我们开发了一个面向用户的可视化算法平台,Porsche。

在这个平台上面,用户只需要简单地拖拽机器学习组件,按照需要连接他们,再做一些相应的配置,一个机器学习任务就能够完成。这样一方面使得使用Blink实时计算的门槛变得更低,另一方面又使得一个通用的算法组件能被更多的用户使用,大大降低了开发成本。

Q:未来阿里在机器学习平台、深度学习平台和人工智能生态建设上还有哪些规划?是否会考虑向外界输出实时计算能力或推出开放的机器学习或深度学习平台?

大沙:由于人工智能算法或者模型往往和业务逻辑有着一定的联系,所以不是特别适合开放给外界。但是不排除在不远的将来,我们会将一些通用的人工智能算法通过我们的机器学习平台开放给更多的外部用户使用。

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。

(0)
小胖的头像小胖读者
上一篇 2019-09-23 20:17
下一篇 2019-09-23 20:57

相关文章

关注我们
关注我们
分享本页
返回顶部