人不能两次踏进同一条河流
—— 赫拉克利特
本文内容取自2019杭州云栖大会《大数据生态专场》。
大数据生态专场的主角其实是开源的流计算引擎Flink,Flink是一个用于实时流式大数据计算的开源项目,为什么大数据处理要做成实时的流式处理?我觉得这个想法可以追溯到云原生12要素的第11条:
XI日志:把日志当作事件流。
过去,日志都是被当作文件来看待和处理,为了处理这些“文件”自然诞生出了一众面向文件的批处理大数据项目,当越来越多的开发人员都将日志看作事件“流”之后,像Flink这样面向实时“流”处理的大数据引擎自然就变得更加重要了。
第一个分享来自pulsar,pulsar是Apache软件基金会的一个孵化器项目,功能上和kafka高度相似,简言之就是用来传递消息的,pulsar设计上采用服务和数据分离的架构,支持多租户,有着资产和命名空间的概念。
Pulsar 提供了对 Schema 的原生支持,在与Flink集成后即可提供对数据的结构化访问,使用Flink SQL 在 Pulsar 中查询数据。借助于Pulsar提供了元数据服务,租户和命名空间被影射为数据库、Topic影射为表,Topic Schema影射为Table Schema,实时的流数据变成了一张实时变化的表。
通过整合Pulsar和Flink可以得到一个实时流数仓:
- 顶层是Flink结构化流处理引擎
- 中层是Pulsar来提供流数据的结构化转换
- 最底层是Flume提供实时日志流输入
下一个和Flink相关的分享是有关K8S的,kubernetes被VMWare 的CEO Pat Gelsinger (前Intel CTO,开发486的功臣)称为是继Java、虚拟机、和云之后最重要的技术。对于这样的技术,阿里自然是坚决的拥抱,阿里云已经在全球的19个地域开通了Kubernetes服务,越来越多的工作负载已经可以运行在阿里云的Kubernetes服务集群之上,Flink自然也不例外。
通过Kubernetes的Helm Chart包管理工具,通过Deployment部署Flink可以实现更高的安全隔离、更好的资源利用率、更便捷的部署。Flink的K8s Operator可以管理多个Flink集群、实现任务的生命周期管理和便捷的弹性伸缩。Flink与K8s结合的案例包括微博机器学习推荐、阿里云数据湖分析、阿里集团业务上云等。
最后一个和Flink相关的分享是有关利用Apache Flink分析多源异构数据的,这里首先澄清了一下有关数据湖的定义,相对于传统的数据仓库,这里讲的实时数据湖主要的特点包括:
- 数据组成、来自IoT设备、网站、移动应用程序、社交媒体的非关系和关系数据。
- 数据质量、要面对未加工数据。
- 主要用户、数据科学家、数据开发人员和业务分析师。
- 分析任务、机器学习、预测分析、数据发现和分析。
一套典型的基于Flink的实时数据湖架构包括以下组件:
- 存储、由消息队列、关系型数据库、结构化或半结构化文件
- 管控、原始数据注册、数据准备和转储、数据Catalog、安全和权限控制
- 执行、数据分析、实时ETL、机器学习
在实际SQL性能上,对比另一个大数据处理引擎Spark,阿里基于Flink优化定制的Blink大概有1-3倍的性能优势。
除了Flink,对于希望使用Hadoop全家桶的用户,阿里云还有一个被称为E-MapReduce的服务,可以提供包括Hive、Spark、Flink、Presto、TensorFlow等计算服务,并且能够可以阿里云的MaxCompute、DataV、QuickBI、DataWorks等大数据服务进行良好整合。
为了能够降低云上大数据的存储成本,阿里云提供了一个名为JindoFS的服务,可以让阿里云上的Hadoop集群以更高的性能实现对OSS的存取,并自动实现冷热数据的分离以降低存储成本。
最后一个登场的是阿里云自研的大数据计算平台MaxCompute有关“生态”的介绍。
在工具层面,阿里云已经获得了全球探索式BI的领头羊Tableau的官方支持,在Tableau 2019.4版本中已经可以使用原生的MaxCompute连接插件了。在Python生态方面,通过开源的MARS程序库,打通了MaxCompute和pyTorch等基于Python的AI引擎。
在数据连接层面,过去MaxCompute只能联合OSS、OTS等自研的数据产品作联合计算,今天已经可以支持包括MangoDB、MySQL、HBase、Redis等广泛的开源生态产品,实现数据不动,计算和调度的下推。
在引擎层面,MaxCompute 目前已经能够支持包括Spark、Flink等主流的开源大数据引擎,Spark2.4/Flink 1.9官方Jar包可以直接在MaxCompute上使用,不用开通E-MapReduce也能直接在MaxCompute上使用Spark。