Apache Flink®生态所面临的机遇与挑战

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 作者:简锋 引言 在谈生态之前,我们来聊聊什么是生态。生态是指在某个特定领域,以某个组件为核心衍生出来其他多个组件,这些组件可以间接或者直接用到这个核心组件,然后辅助这个核心组件共同完成一个更大或者更特殊的任务。

作者:简锋

引言

在谈生态之前,我们来聊聊什么是生态。生态是指在某个特定领域,以某个组件为核心衍生出来其他多个组件,这些组件可以间接或者直接用到这个核心组件,然后辅助这个核心组件共同完成一个更大或者更特殊的任务。Flink生态圈就是指以Flink为核心的生态圈,Flink属于大数据生态里的计算环节,只做计算,不做存储。但是在实际工作当中,你会发现往往单独用Flink是不够的。比如你的数据是从哪里读出来,Flink计算完之后数据又将存到哪里,又怎么消费这些数据。如何利用Flink来完成某个垂直领域的特殊任务等等。这些涉及到上下游,或者更高抽象的任务都需要一个强大的生态圈来完成。

Flink生态的现状

在讲清楚了什么是生态之后,我们来聊聊目前Flink生态的现状。整体而言Flink生态还处于相对初级的阶段。Flink生态目前主要侧重于各种上下游的connector和对各种集群的支持。

截至目前Flink支持的connector有:Kafka,Cassandra,Elasticsearch,Kinesis,RabbitMQ,JDBC,HDFS等等,基本支持所有主流数据源。在集群支持方面,目前Flink支持Standalone和YARN。基于目前生态的状况,Flink仍然主要应用于流数据的计算。如果要用Flink要做其他一些场景(机器学习,交互式分析)就会比较复杂,用户体验上还有很大的提升空间。这也正是Flink生态所面临的挑战和机遇。

Flink生态的挑战和机遇

Flink致力于作为一个批流统一的大数据计算平台,还有很多潜力没有发挥出来,要完全发挥出它的潜力,就需要一个强大的生态系统。总的来说我们可以从2个维度来看这个生态系统:

  1. 横向维度。 横向维度的生态主要是为构建一个端到端的解决方案。比如连接上下游数据源的各种connector,与下游机器学习框架的整合,与下游BI工具的整合,方便提交和运维Flink Job的工具,提供更好交互式分析体验的Notebook。

  2. 纵向维度。纵向维度是指更加抽象化Flink的计算引擎以适应各种计算场景。比如批流计算的统一,更高计算抽象层Table API,复杂事件处理引擎(CEP),更高机器学习计算框架(Flink ML),对各种集群框架的适配等等。

下图是对整个Flink生态在横向和纵向2个维度的描述。

接下来我会对几个主要的生态点进行逐个阐述

Flink对Hive的集成和支持

Apache Hive是一个有将近10年历史的Apache顶级项目。项目最初在MapReduce引擎的基础上封装了SQL,用户不再需要写复杂的MapReduce Job,而只需写简单熟悉的SQL语句,用户的SQL会被翻译成一个或多个MapReduce Job。随着项目的不断演进,Hive的计算引擎发展成可以插拔式,比如,现在Hive就支持MR, Tez, Spark 3种计算引擎。Apache Hive现在已经成为Hadoop生态圈中事实上数据仓库的标准,很多公司的数据仓库系统已经在Hive上运转了很多年。

Flink作为一个批流统一的计算框架,与Hive的集成就变得很自然了。比如通过Flink来做实时ETL,构建实时数据仓库,然后用Hive SQL做实时数据的查询。

Flink社区已经创建了 FLINK-10556 来对Hive更好的集成和支持。主要实现的功能有以下几点:

  • 允许Flink访问Hive的元数据

  • 允许Flink访问Hive的表数据

  • Flink兼容Hive的数据类型

  • Flink可以使用Hive UDF

  • 可以在Flink里使用Hive SQL(包括DML和DDL)

Flink社区正在逐渐实现以上功能。如果你想提前体验以上功能,可以试用阿里巴巴开源的Blink。开源的Blink已经在元数据(meta data)和数据层将Flink和Hive对接和打通, 用户可以直接用Flink SQL去查询Hive的数据,真正能够做到在Hive引擎和Flink引擎之间的自由切换。为了打通元数据,Blink重构了Flink catalog的实现,并且增加了两种catalog,一个是基于内存存储的FlinkInMemoryCatalog,另外一个是能够桥接Hive MetaStore的HiveCatalog。有了这个HiveCatalog,Flink作业就能读取Hive的MetaData。为了打通数据,Blink实现了HiveTableSource,使得Flink job可以直接读取Hive中普通表和分区表的数据。因此,通过这个版本,用户可以使用Flink SQL读取已有的Hive meta和data,做数据处理。未来阿里巴巴将在Flink上继续加大对Hive兼容性的支持,包括支持Hive特有的query,data type,和Hive UDF等等,这些改进都会陆续回馈到Flink社区。

Flink对交互式分析的支持

批处理是流处理之外另一个更大的应用场景。而交互式分析又是批处理的一个大类,特别对于数据分析师和数据科学家,交互式分析尤为重要。

对于交互式分析,Flink本身需要做进一步的改进,以提高Flink在交互式分析方面的性能要求。比如 FLINK-11199,现在在同一个Flink App中的多个Job之间是没法共享数据的,每个Job的DAG是独立的,FLINK-11199 就是要解决这个问题,从而对交互式分析提供更友好的支持。

此外,我们需要提供一个交互式分析的平台让数据分析师/数据科学家更高效得使用Flink。在这方面Apache Zeppelin已经做了很多工作。 Apache Zeppelin也是Apache的顶级项目,Zeppelin提供一个交互式开发环境,支持Scala,Python,SQL等多种语言,此外Zeppelin天然具有极强的可扩展性,支持多种大数据引擎,比如Spark,Hive,Pig等等。阿里巴巴做了大量的工作让Zeppelin能够更好的支持Flink。用户可以直接在Zeppelin里面写Flink代码(Scala或者SQL),而不用在本地打包,然后用bin/flink脚本来手动提交Job,在Zeppelin里你可以直接提交Job,然后看到Job的结果,Job结果既可以是文本形式,也可以是可视化出来,特别对于SQL的结果,可视化尤为显得重要。下面这些是Zeppelin对Flink支持的一些要点:

  • 支持3种运行模式:Local, Remote和Yarn

  • 支持运行Scala,Batch Sql和Stream Sql

  • 支持可视化静态table和动态table

  • 自动关联Job URL

  • 支持Cancel Job

  • 支持Flink job的savepoint

  • 支持ZeppelinContext的高级功能,比如创建控件

  • 提供3个tutorial notes: Streaming ETL, Flink Batch Tutorial, Flink Stream Tutorial

这些改动有些是在Flink上的,有些是在Zeppelin上的。在这些改动全部推回Flink和Zeppelin社区之前,大家可以使用这个Zeppelin Docker Image (Blink开源文档里的examples中有具体如何下载安装的细节)来测试和使用这些功能。为了方便用户试用,我们在这一版zeppelin中提供3个built-in的Flink tutorial的例子: 一个是做Streaming ETL的例子, 另外两个分别是做Flink Batch, Flink Stream的基础样例。具体如何使用,可以参考以下2个链接

Flink对机器学习的支持

Flink作为一个大数据架构中最重要的计算引擎组件,目前主要的应用场景还是在做传统的数据计算和处理,也就是传统的BI(比如实时数据仓库,实时统计报表等等)。而21世纪将是一个AI爆发的世纪,越来越多的企业和行业开始启用AI技术来重新革命自己的行业。Flink作为一个大数据计算引擎在这一革命中不可或缺。虽然Flink并不是为机器学习而生的,但是在机器学习中也将扮演不可或缺的角色。未来Flink在机器学习领域主要有3件大事可以做

  • 机器学习Pipeline的构建

  • 传统机器学习算法的支持

  • 与其他深度学习框架的整合

机器学习主要分2个阶段:Training和Predication。但Training和Predication只是做机器学习的一小部分,在Training之前要做数据的清洗,转换以及Normalization等等,Training之后要做Model的Evaluation。Predication阶段也是如此。对于一个复杂的机器学习系统,如何将每个步骤很好的整合起来对于一个系统的健壮性和可扩展性显得尤为重要。FLINK-11095 就是社区为此正在做的努力。

目前Flink有个flink-ml的模块实现了一些传统的机器学习方法,但是仍然需要进一步的改进。

对于深度学习的支持,Flink社区也在这个领域也在积极努力。阿里巴巴内部有TensorFlow on Flink的项目,用户可以在Flink Job中运行Tensorflow,Flink做数据处理,然后将处理完之后的数据发送给Tensorflow的Python进程做深度学习训练。在语言层面,Flink正在做对Python的支持。目前Flink只支持Java和Scala的API。这2种语言都是基于JVM的语言,比较适合做系统的大数据工程师,而不适合做数据分析的Data Analyst和做机器学习的Data Scientist。做数据分析和机器学习的人一般会比较喜欢用Python和R等这类更高级的语言。目前Flink社区也在这方面努力,首先Flink会支持Python, 社区已经在这块开始讨论,因为Python在近几年发展的特别快,这主要得益于AI和Deep Learning的发展。目前流行的Deep Learning的library都提供Python的API,比如TensorFlow,Pytorch,Keras等等。通过对Python语言的支持,用户可以用一种语言将整个机器学习的Pipeline串接起来,从而提高开发的效率。

Flink Job的提交和运维

在开发环境里,一般是通过执行shell 命令 bin/flink run 来提交Flink Job。但在真正生产环境里面,这种方式就会有很多问题。比如如何跟踪管理Job的状态,在Job失败的情况下如何重试,如何并发启动多个Flink Job,如何方便修改提交Job的参数等等。这些问题虽然可以通过人工干预来解决,但在生产环境里人工干预是最危险的,能自动化的操作我们都要将其自动化。在Flink生态圈里目前的确缺少这样一个工具。阿里巴巴内部已经有了这样一个工具,而且在生产环境里稳定运行了很长时间,已经被实践证明是一个可靠稳定的提交和运维Flink Job的工具。目前阿里巴巴正在准备开源这个项目,剥离一些阿里巴巴内部依赖的组件,预计2019年上半年会开源。

总的来说,Flink生态目前问题很多,机会也很多。Apache Flink社区在不断努力去构建一个更加强大的Flink生态来发挥其强大的计算引擎能力,希望有志参与其中的人可以积极参与,让我们一起努力来构建一个健康强大的Flink生态圈。

更多资讯请访问 Apache Flink 中文社区网站

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
1月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
652 13
Apache Flink 2.0-preview released
|
1月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
73 3
|
2月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
2月前
|
消息中间件 资源调度 API
Apache Flink 流批融合技术介绍
本文源自阿里云高级研发工程师周云峰在Apache Asia Community OverCode 2024的分享,内容涵盖从“流批一体”到“流批融合”的演进、技术解决方案及社区进展。流批一体已在API、算子和引擎层面实现统一,但用户仍需手动配置作业模式。流批融合旨在通过动态调整优化策略,自动适应不同场景需求。文章详细介绍了如何通过量化指标(如isProcessingBacklog和isInsertOnly)实现这一目标,并展示了针对不同场景的具体优化措施。此外,还概述了社区当前进展及未来规划,包括将优化方案推向Flink社区、动态调整算子流程结构等。
405 31
Apache Flink 流批融合技术介绍
|
1月前
|
分布式计算 监控 大数据
大数据-148 Apache Kudu 从 Flink 下沉数据到 Kudu
大数据-148 Apache Kudu 从 Flink 下沉数据到 Kudu
58 1
|
1月前
|
数据挖掘 物联网 数据处理
深入探讨Apache Flink:实时数据流处理的强大框架
在数据驱动时代,企业需高效处理实时数据流。Apache Flink作为开源流处理框架,以其高性能和灵活性成为首选平台。本文详细介绍Flink的核心特性和应用场景,包括实时流处理、强大的状态管理、灵活的窗口机制及批处理兼容性。无论在实时数据分析、金融服务、物联网还是广告技术领域,Flink均展现出巨大潜力,是企业实时数据处理的理想选择。随着大数据需求增长,Flink将继续在数据处理领域发挥重要作用。
|
1月前
|
消息中间件 druid Kafka
从Apache Flink到Kafka再到Druid的实时数据传输,用于分析/决策
从Apache Flink到Kafka再到Druid的实时数据传输,用于分析/决策
78 0
|
SQL 架构师 API
《Apache Flink 知其然,知其所以然》系列视频课程
# 课程简介 目前在我的公众号新推出了《Apache Flink 知其然,知其所以然》的系列视频课程。在内容上会先对Flink整体架构和所适用的场景做一个基础介绍,让你对Flink有一个整体的认识!然后对核心概念进行详细介绍,让你深入了解流计算中一些核心术语的含义,然后对Flink 各个层面的API,如 SQL/Table&DataStreamAPI/PythonAPI 进行详细的介绍,以及
1364 0
《Apache Flink 知其然,知其所以然》系列视频课程
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
46 1
|
3月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
241 2

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面