摘要:2019云栖大会大数据 & AI专场,阿里巴巴资深技术专家王峰带来“Ververica Platform-阿里巴巴全新Flink企业版揭秘”的演讲。本文主要从Ververica由来开始谈起,着重讲了Ververica Platform的四个核心插件App Manager、Libra Service、Stream Ledger、Gemini,以及阿里巴巴实时计算云原生版本相关特性及典型应用场景。算法
直播回放请点击数据库
如下是精彩视频内容整理:缓存
随着人工智能时代的降临,数据量的爆发,在典型的大数据业务场景下数据业务最通用的作法是:选用批处理的技术处理全量数据,采用流式计算处理实时增量数据。2017年基于Flink开发的实时计算产品正式服务于阿里巴巴集团内部,并从搜索和推荐两大场景开始应用。目前阿里巴巴及下属全部子公司,都采用实时计算产品来处理全部的实时业务。安全
众所周知,Apache Flink是业界很是流行的流计算引擎,最先诞生于欧洲,是柏林大学的研究型项目。后来由项目的发起人创办了DataArtisans公司并根据该研究项目孵化出 Flink,并于2014年将 Flink 捐赠给 Apache基金会。性能优化
同年,阿里巴巴开始关注Flink。因为搜索有不少业务场景很是依赖大数据和实时数据处理,而Flink在架构设计上,做为全流式的执行引擎,数据处理效率很是高。因而阿里巴巴内部开始着手研究Flink,并看好Flink将会成为新一代计算引擎,加速大数据计算的将来发展。数据结构
通过一年努力,阿里内部对Flink的开源版本作了不少深度优化与改进,使其可以适应阿里巴巴超大规模的业务场景,包括搜索、推荐等核心的业务场景。2016年,第一次将Flink推到双11场景使用,构建了搜索、推荐的全实时链路(包括在线学习、模型预测等),造成了一套完整的闭环。2017年,阿里巴巴全线上线了基于Flink实时计算产品,服务于阿里巴巴的搜索、推荐等核心场景以及广告、数据和全部部门的实时在线业务,好比:阿里巴巴双11全天各类多维的数据统计,交易额大屏幕的全球直播等所有都是由基于Flink的实时计算产品来支持。架构
在此基础之上,2018年,咱们首次在阿里云公有云推出基于Flink的实时计算服务,开始支持各行各业的企业客户。阿里巴巴对Flink的承认度在逐渐增长,Flink也证实了在实时计算的业务中的巨大潜力。自此,阿里巴巴加大了对Flink的投入并加速推动Flink社区的发展。2019年1月,阿里巴巴收购了DataArtisans并建立了新企业品牌Ververica,以上即为Flink的企业品牌Ververica的由来。并发
在开源这块,相信你们都很是了解每一个大的开源项目背后都有一个企业品牌,随着整合的逐步完善,德国的Flink创始团队与中国阿里巴巴的实时计算团队也开始密切合做。与此同时,咱们也在持续推进Flink社区的发展。1月初,阿里巴巴将内部维护的Flink分支Blink贡献给整个Flink开源社区,目前阿里巴巴对Flink社区贡献的代码已超过100万行。而且,两个团队密切配合在商业化上进行联合做战,推出全新的Flink企业版——Ververica Platform。运维
Ververica Platform的技术架构如何,可以解决哪些应用场景,下面将详细讲解。机器学习
Ververica Platform是阿里巴巴推出的全新企业版,它仍然坚持以Apache Flink 的社区版本为内核,同时可以兼容各类企业级插件,在整个基于Flink的实时计算解决方案上对应用性、稳定性、性能、可运维性等方面提供企业级的增值服务。
首先,Ververica Platform是一个企业级的开放软件,支持客户将其部署在生产环境中,对接已有的周边生态系统如日志、Metrics、存储等。最初在设计Ververica Platform时就将其定位为彻底云原生的方案,系统组件和核心组件都以支持微服务方式部署到Kubernetes上,用户能够很是方便的将Ververica Platform和本身的在线服务或其余数据服务作云原生的混布。
Ververica Platform使用Apache Flink做为其核心的计算引擎,保证和社区的彻底兼容。上图为Apache Flink最新演进的架构图。Apache Flink的本质是一款有状态的流式计算引擎,能够链接各类各样的存储,经过ETL计算、数据分析等将数据结果导入到另外的存储中。做为流式计算,Flink的时效性很是好,能够在高吞吐量的同时达到亚秒级延时。Flink不只可以链接消息队列等无限数据流的数据源,也能够链接文件系统、数据库表、KV存储等有限的数据集,因此Flink也在基于流式计算的优点上逐渐朝着批流融合的方向发展,有但愿成为一种新的批流合一的全能计算引擎。
因此Ververica Platform将会依赖社区的力量,采用Flink社区的主流版本做为内核,全部的增值服务、各类优化都会经过嵌入的方式来实现,为用户提供一个开放透明的计算引擎。如下将详细介绍Ververica Platform的核心插件。
Ververica Platform在应用上的企业级插件叫APP Manager,是管理Flink全生命周期的工具。Flink做为计算引擎,在易用性方面能够采用多种优化来帮助用户更高效地使用Flink系统。好比,整个Job生命周期的管理,从Job的开发、配置,到提交上线、中止重启等基本的运维功能能够经过APP Manager封装出一套完整的工具链来完成,同时提供包括日志的采集收集、运行Metrics的收集展示等功能,方便用户对任务进行debug。此外,企业级安全也是很是重要的feature,尤为是企业应用时存在多租户部署的需求,所以APP Manager也提供了Rollbase权限管理、OpenID受权系统。同时,咱们很是注重开放性和被集成的能力,因此APP Manager还提供了完善的API,使用户能很是方便的将Ververica Platform企业级软件集成到本身已有的大数据平台之中。
Libra Service是提供智能运维能力的企业级插件。大数据的系统运行中运维是其中的重要部分,尤为是规模扩大的场景中。常规状况下运行Flink Job,基本上是开发人员写完代码后要配各类各样的参数,对于Flink的运维人员来说,须要知道这个Job是干什么的、支持什么样的业务、峰值是什么状况、大概的数据规模是什么样子,根据本身的经验进行调整,而且通过屡次迭代后才可以将一个任务调好。在任务较少的状况下,还能够经过运维人员人肉维护,但若是出现上千个Job,甚至阿里巴巴内部上万个Flink Job的场景,这是Flink社区版本没法帮助解决的,因此Ververica Platform提供了一套智能运维插件,相似于AI Ops,智能运维插件可以帮助用户推算出一个Job须要多少个TMs,每一个TM须要配置多少个Slots,每一个TM的JVM参数如何配置以及一个Job的并发度如何配置等。
上图为Libra Service的基本设计思路,这是一个很是经典的智能AI Ops设计方案,能够看到用户正常经过APP Manager会提交一个Job,Job在Kubernetes集群启动以后,Libra Service会监控全部在Kubernetes集群上面运行的Flink Job,实时采集全部的Metrics,包括Task的Metrics是否延迟、吞吐、buffer等运行信息,Job Manager和Task Manager的GC状况,JVM各类运行的数据指标等等。至关于自动采集做业的各类指标特征,利用算法推算出如今的Job运行是否健康。好比部分Job在持续地延迟运行或利用了大量资源但实际上是在空跑等不健康状态,当Job处于不健康状态时,经过算法推算出合理的计划,好比延迟了要扩容,浪费资源可能要缩容,而后通知App Manager去修改整个Job的配置,让Job重启适应新的配置来达到稳定高效节省资源的效果,这就是弹性扩缩容插件Libra Service,是智能运维的AI Ops。
Flink提供了很是完整的一致性语义,也支持强一致性的语义,保证数据一条不丢、一条很多,这个是能够支持计费等金融级很是苛刻的条件,但有一个约束即整个正确性只可以保证单条的记录,好比2个帐户要转帐就保证不了,由于只可以保证对A的操做绝对正确,对B的操做绝对正确,可是对A的10块钱转给B,这个完整的事务原生的Flink是没有办法保证的。
所以Ververica Platform提供了一套分布式的跨行跨机器事务解决方案。Stream Ledger是基于Flink Datastream API生态的Library,能够实现高性能的跨行分布式事务处理能力,这套Library彻底基于Flink内部API,没有任何外部依赖,能够与Datastream API和SQL无缝集成,可以兼容Flink已有的全部读写Connectors,因此Steam Ledger是一个轻量的分布式事务处理方案,也是为金融级场景提供的分布式事务处理能力的解决方案。
最后一个插件是状态存储插件。在流式计算中,Flink自然支持内置状态存储管理,不须要依赖外部的存储就能够把实时的数据统计等工做完成。正常作报表统计时都有count、sum、average等参数,这些计数器就是状态数据,随着计算量的增长,状态数据可能会愈来愈大以致于内存可能没法承担,因此须要一套内置的状态存储来存储这些状态。你们都知道在计算系统中,一旦有存储IO访问,性能瓶颈则颇有多是在存储IO上,因此须要优化状态存储的访问。
Flink内置了两种状态存储,一种是基于Java Heap的State Backend状态存储插件,另外一种是基于RocksDB的状态存储插件。基于Java Heap的性能很是好,由于是彻底基于JVM内存的,而且没有序列化反序列化。但它的局限在于Java的方案内存容量会是瓶颈,由于Java对内存的利用率很是低,不如序列化高。通过测试,在物理数据超过几百兆以后,内存的使用率超过几个G就不可以扩大数据量了,因此系统很是不稳定。业界不少公司都是在用RocksDB来作,这是很是优秀的开源KV存储,但由于是基于C++写的,因此和Flink的集成上还有不少不方便的地方,同时RocksDB也不是为Flink设计的,因此Flink在不少状态的数据结构设计上没有办法进行优化。咱们但愿针对Flink的状态存储来作一套本身的存储插件,能够提供更强大的功能,同时也兼容社区的协议,因此Gemini应运而生。Gemini是彻底存储计算分离的设计,它和RocksDB有很大的不一样,同时它也能够利用本地SSD作二级缓存来加速访问,尤为是在Flink出现故障,一个Task失败,从新拉起一个进程时,它能够远程的从HDFS上直接拉起状态,下载时间会大幅下降,提高了整个Flink SLB体验,包括它在设计的时候采用了Java,和Flink系统间的整合也会更好。
这是整个Ververica Platform Gemini Store和RocksDB的Benchmark的性能数据,咱们能够看到Flink在经常使用的KV state、List state、Map state等性能上都有很是明显的提高,具体的数据你们能够自行查看。这个项目也是咱们在整个Ververica Platform作性能优化中效果最明显的插件。
Ververica Platform是企业级的引擎软件,可以部署到任何环境中,自然能够跑在Kubernetes上,因此为了方便提供实时计算的云计算服务,让阿里云的客户都可以方便的使用,咱们已经把它适配到阿里云的云环境之中,和阿里云的系统实现了无缝的集成。将Flink的log放到阿里云的SLS上,能够利用SLS的log技术查询搜索Flink的log,因此咱们将Flink Metrics对接到Prometheus生态中。咱们也将Flink Checkpoint存储的状态数据对接到阿里云的OSS上,让已有的用户可以复用OSS系统。更重要的一点是整个阿里系统都是云原生的,Ververica Platform也彻底运行在阿里云的容器服务平台之上,所以云原生也是Ververica Platform的特色之一。若是用户已经有本身的云原生集群或容器服务,能够尝试半托管模式,用户将提供集群给咱们,咱们就能够把整个软件部署到用户的集群上,包括已经存在的集群或新购买的集群,这种半托管方式可以给用户提供到此种服务,固然咱们也会提供全托管模式,选择上比较灵活,这就是目前已经在公测的Ververica Platform云原生企业版。
Ververica Platform产品可以应用于哪些场景,帮助用户解决哪些问题想必是你们很是关心的,如下将详述。
第一个场景是实时数仓,这也是在阿里巴巴内部用得最多的场景,在云上抽象为如图的模型,用户的数据来自于两处甚至是三处,第一部分来自于ECS日志,第二部分来自于RDS结构化数据,第三部分来自于IOT的设备。经过阿里云的SLS服务或者DataHub数据收集通道来收集用户数据,实时计算的产品能够实时订阅到上述数据,用Flink SQL对以上数据进行多维数据分析,产生实时的数据报表。这个过程当中,除了有单流的数据处理还有多流数据的join,还可能和HBase、Redis、MySQL等数据库的数据有结合,其中能够运行复杂的SQL作经典数仓的处理,把数仓处理的结果实时写到在线的数据库好比HBase中,都是比较经常使用的用法。而后经过在线的数据服务在大屏幕中展示,这个场景在淘宝内部是很是经典的场景,双11的时候能够看到大屏幕上有各类数据的成交、统计、分布、排名等,最典型的就是GMA交易数据,好比今年1000多亿,明年2000多亿等等,数字是实时滚动、全球直播的,也是经过这套Flink的架构来实现的。如今对于云上的不少客户而言,实时数仓也是一个很大的应用场景。
第二个实时场景就是实时监控、异常数据的报警等等。这也是如今很是主流的场景之一,其实数据源和实时数仓很像,基本上仍是基于ECS的日志数据或数据库中的增量数据表的更新数据、IOT的数据等,工业会产生大量的数据,须要监测设备数据的异常。与实时数仓不一样之处在于实时风控并非采用SQL来作统计和分析,基本上会采用复杂时间处理,好比Flink CEP或业务方本身定制的风控库来对实时数据进行监测,这个监测可能基于业务的规则,也可能基于Bigdata on AI的方案。新的研究方向是在异常监测或者风控领域基于模型监控,离线或实时训练并在线加载这些模型进行实时检测,可以实时发现异常的事件,及时进行补救。经过Kafka集群到在线的报警系统来对接各类业务系统去报警,这也是可以秒级实时监测各类异常事件作风险控制的方式之一,在整个安防场景、金融场景都是很是常见的解决方案。
第三个场景是成长最快的在线机器学习。在线机器学习是阿里多年的研究方向之一,也是Flink首先应用在阿里巴巴搜索事业部搜索推荐业务部场景的缘由。在线机器学习是搜索推荐广告中很是火的方向,机器学习不只是离线数据模型来作训练,甚至可以造成一个彻底的实时化闭环方案,经过用户在天猫、淘宝上产生的大量的点击、交易,相关数据都会经过日志系统实时收集,以后传入实时计算中计算,咱们称之为特征工程。对用户的数据如用户的订单等作数据清洗,数据特征的弥补、计算,甚至和离线特征作一些结合。部分数据,如30天销量、用户年龄等数据并不是实时变化,是须要长时间的统计获得,咱们把实时特征、离线特征所有都作了拼接以后就是多维数据的join,最终可以得出实时样本。咱们经过流式获得实时样本以后就可以在后面对接流式来作机器学习的训练,能够经过PAI等相似的机器学习产品来作实时或者准实时的模型训练,训练完以后产生的模型有一套完整的验证机制,验证完整的模型Validation以后才能推上线,再用新模型提供个性化的搜索和推荐,从而驱动用户产生新的点击,再去进行模型的更新,进而造成一套完整的闭环。这是Bigdata+AI的一个典型场景,从数据处理、数据训练,再到数据预测、用户点击造成反馈等,造成完整生产线。这也是Flink作实时计算和在线的流式计算与在线机器学习的训练造成一套完整闭环的经典方案,这套方案也是淘宝天猫真实的在线搜索推荐解决方案。
目前咱们有不少客户都在采用这种新的方案来提高他们的点击,尤为是社交媒体类的公司都在尝试这个新的解决方案。
最后,回到社区,阿里巴巴收购完DataArtisans以后成立了新的企业品牌Ververica,咱们但愿除了商业化品牌的统1、提供的增值服务以外,还但愿可以继续扩大社区规模,服务好更多社区的用户,推进社区繁荣发展。因此阿里巴巴也投入了很大的精力来支持整个 Flink 社区的发展,尤为是在中国,咱们已经在北京、上海、深圳等连续办了很是多的Flnik社区Meetup,包括去年年末举办的首届Flink Forward China大会,今年将继续举办第二届。去年大会的规模是1000人,今年但愿可以达到2000人,但愿中国比较主流的互联网公司都能参与其中,分享他们对Flink应用的经验,咱们也会联合Flink创始团队一块儿,讲Flink的新特性、发布以及方向上的展现。欢迎更多对Flink有兴趣的同窗一块儿来参与大会,交流探讨。
本文为云栖社区原创内容,未经容许不得转载。