最火热的分布式流式处理引擎-Flink入门介绍

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink是目前流行的分布式流式处理引擎,是Apache的顶级项目。Flink支持高吞吐、低延迟、高性能、Exactly-Once语义等特性,同时其基于"批是特殊的流"的理念,既实现了流式处理计算,又实现了批处理计算,达到了真正意义上的批流统一。

一、什么是Flink?

Flink是目前流行的分布式流式处理引擎,是Apache的顶级项目。Flink支持高吞吐、低延迟、高性能、Exactly-Once语义等特性,同时其基于"批是特殊的流"的理念,既实现了流式处理计算,又实现了批处理计算,达到了真正意义上的批流统一。

Flink具备极高的处理能力,集群可达数千服务器的规模。目前在国内已经被广泛接受,一些著名的互联网公司,如阿里巴巴、美团、滴滴、今日头条等,都在大规模使用Flink,其中阿里巴巴还基于Flink进行深度定制,提供了Blink版本,将将其一些新特性贡献给了开源社区。

可以说,Flink是未来流式计算的闪耀之星。

二、Flink应用场景

所有的软件都要有好的应用场景才能够被不断优化,向前发展。既然Flink具备高性能的流式处理能力,那么实际可以应用到哪些方面呢?

在实际的生产应用环境中,涉及到流式的计算实际上是非常多的,因为各个系统都在不断地产生大量数据,例如用户购买数据、用户行为数据、系统运行日志数据、交易统计数据等,这些场景下都会涉及大量的计算工作,传统地处理方式更多是离线批量地处理,实效性上比较差,难以适应现在业务发展的需要,而Flink天生适合这种应用场景。

2.1 实时推荐

收集用户行为数据,进行实时计算,将计算结果更新到推荐模型中,然后反过来对用户的喜爱进行实时预测,然后将推荐数据展示给用户,提高用户对商品的匹配度。用户行为的数据是十分巨大的,而快速计算实时反馈又是十分必要的,因为用户的浏览购买行为是有时间限制的,类似这种场景,高吞吐、高性能的FLink正好排上用场。

2.2 实时反欺诈行为检测

在金融领域中,为保障安全和减少损失,反欺诈系统是必不可少的。传统的反欺诈手段需要较长的时间,大部分只能提供事后的追查,而无法提前规避。使用Flink能够实时完成反欺诈规则的过滤和判断,快速给出结果,提前对信用卡申请欺诈行为、交易欺诈行为等进行防堵。

2.3 实时报表

传统的数据报表都是T+N的模式,例如T+2日出账单,T+1日出结算报表等,整体时效性比较差,用户体验也不够好,在信息化的今天,实时的数据报表已经是十分常见的需求了。使用FLink采集来自多个系统的数据源进行数据的清洗,按照一定的规则实时出数据报表,这是一件很自然的事情。

2.4 实时大屏

实时大屏是目前最广泛的一个应用了,典型的代表就是淘宝双11的监控大屏,据报道其计算性能达到超过30万笔/秒。Flink的高性能适合这种大流量的流失处理场景,并且其提供的Window、Time等功能,能够轻松地应付诸如1分钟内交易笔数、5分钟交易金额这类统计需求。

2.4 系统监控分析

使用Flink流式计算对各类服务、app运行的相关指标数据、用户行为数据进行数据分析,实时提供相关的监控和哦统计数据,为发现服务异常、市场广告决策等提供参考。

以上是一些场景的Flink的应用场景,当然Flink的应用绝不仅仅如此,所有需要高性能的、高吞吐、低延迟的流式计算场景,都可以考虑使用Flink。

三、同类比较

说到流式计算,大家一定会想到Apache Storm、Spark Streaming,这两个也是开源界中流式计算十分热门的产品,那么与Flink有什么异同点呢?在实际技术选型的时候应该选择哪一种呢,下面我们来对这几个流式处理框架进行一下比较。

流计算框架对比.PNG

从以上对比来看,如果应用场景下需要同时支持批处理计算和流处理计算、需要支持Exactly-Once语义或者需要有状态的流计算,那么可以可以排除Storm,选择Flink或者Spark Streaming。

若是只需要进行基于无状态的流式计算,且对吞吐量没有太高要求,并且对于低延迟要求较高,那么可以考虑选择Storm或者Flink,Storm目前成熟度更高,且在行业内应用更加广泛,出现问题更加方便定位。

在Flink和Spark  Streaming的选择上,Flink明显在有状态的计算以及延时方面优于Spark  Streaming,两者对于批和流的理念是完全不一样的,Flink将批当作特殊的流,其对于流的支持的原生的,其延时达到毫秒级,而Spark  Streaming认为流是特殊的批,是将流当作微批来处理,所以在延时上一般是在秒级。

当然目前来看Spark Streaming的成熟度会优于Flink,但是Flink目前发展势头强劲,国内多家互联网巨头已经在尝试往Flink转型,社区的成熟度也越来越高,Flink的发展是势不可挡的。

三、Flink的技术架构

3.1 软件技术栈

Flink的软件技术栈如下图所示,遵循的是分层的架构,从上到下分别是API和Libraries层、Runtime核心层和物理部署层。

1.png

  • API和Libraries层 Flink提供了DataStream API用于支持流式计算,提供了DataSet  API用于支持批处理计算。另外为了方便用户的使用提供更加高层的功能,基于DataStream  API之上构建了CEP(复杂事件处理库)和Table API以及SQL(用于流),基于DataSet  API之上提供了FlinkML机器学习库、Gelly图像处理库、Table API和SQL(用于批)。这里也体现出了Flink  API的完善,为不同的需要提供了不同粒度的API,如Table API和SQL使用简单,但是可定制化弱,功能较单一,DataStream  API以及更加底层的API则提供更加丰富的功能,但是更加复杂。
  • Runtime核心层Runtime核心层是Flink计算框架的核心实现部分,作业提交、任务调度、状态收集、容错恢复等功能都与这一层相关。
  • 物理部署层物理部署层提供了不同形式的部署支持,例如本地单机部署,基于YARN的集群部署,云版本等。

3.2 逻辑架构

Flink逻辑架构如下如所示,Flink采用Master-Slave的架构,JobManager作为Master角色,整个集群中只能有一个活跃的Master(JobManager),TaskManager作为Slave角色(Worker),集群中TaskManager的数量可达数千台。

  • JobMangerJobManager负责整个Flink集群的任务调度和资源管理,负责与TaskManager交互,为应用分配Task   Slot资源,并通知TaskManager启动应用,任务完成以后也会将状态返回给Client。另外JobManager还负责Checkpoint的管理,出发TaskManager执行Checkpoint操作,以便于故障恢复。
  • TaskManagerTaskManager负责具体节点的资源申请和管理,接收JobManager的命令进行相应的任务操作。TaskManager使用心跳机制保持与JobManager的感知,定期汇报资源、状态统计信息到JobManager。当Client提交一个任务时,JobManager根据TaskManager汇报的资源情况选择某一个具体执行任务的TaskManager,将任务分配给它执行。TaskManager之间可以通过数据流的方式进行数据交互。
  • Actor System负责JobManager和TaskManager之间的通讯,Actor是Akka  Framework的一个角色,Akka是一个用 Scala 编写的库,用于简化编写容错的、高可伸缩性的 Java 和 Scala 的  Actor 模型应用,常用于分布式高并发的场景下。
  • Client客户端用于提交任务到Flink集群,其仍然是通过Akka Framework构建网络连接。Flink程序会通过Optimizer和Graph Builder生成JobGraph,通过Client提交到JobManager。

2.png

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
2月前
|
消息中间件 Kafka Apache
Apache Flink 是一个开源的分布式流处理框架
Apache Flink 是一个开源的分布式流处理框架
482 5
|
2月前
|
Java 流计算
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
【极数系列】Flink搭建入门项目Demo & 秒懂Flink开发运行原理(05)
|
16天前
|
Docker 容器 关系型数据库
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
本期课程将于4月11日19:00开始直播,内容包括源码编译基础知识和实践操作,课程目标是使学员掌握源码编译部署技能,为未来发展奠定基础,期待大家在课程中取得丰富的学习成果!
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
|
1天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
2天前
|
存储 NoSQL 分布式数据库
【Flink】Flink分布式快照的原理是什么?
【4月更文挑战第21天】【Flink】Flink分布式快照的原理是什么?
|
1月前
|
分布式计算 监控 API
flink 入门编程day02
flink 入门编程day02
36 5
|
1月前
|
SQL 关系型数据库 MySQL
Flink CDC产品常见问题之读分布式mysql报连接超时如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
1月前
|
SQL 分布式计算 HIVE
基于 Kyuubi 实现分布式 Flink SQL 网关
本文整理自网易互娱资深开发工程师、Apache Kyuubi Committer 林小铂的《基于 Kyuubi 实现分布式 Flink SQL 网关》分享。
104456 64
基于 Kyuubi 实现分布式 Flink SQL 网关
|
2月前
|
消息中间件 监控 安全
【天衍系列 05】Flink集成KafkaSink组件:实现流式数据的可靠传输 & 高效协同
【天衍系列 05】Flink集成KafkaSink组件:实现流式数据的可靠传输 & 高效协同
|
2月前
|
SQL 并行计算 大数据
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)
关于Flink服务的搭建与部署,由于其涉及诸多实战操作而理论部分相对较少,小编打算采用一个独立的版本和环境来进行详尽的实战讲解。考虑到文字描述可能无法充分展现操作的细节和流程,我们决定以视频的形式进行分析和介绍。因此,在本文中,我们将暂时不涉及具体的搭建和部署步骤。
496 3
【大数据技术攻关专题】「Apache-Flink零基础入门」手把手+零基础带你玩转大数据流式处理引擎Flink(基础加强+运行原理)