当前位置:   article > 正文

图文解说Flink的应用场景和功能_flink使用场景及案例

flink使用场景及案例

一 Flink是什么

Apache Flink 是一个框架分布式处理引擎,用于在无边界有边界数据流上进行有状态的计算。Flink 能在所有常见的集群环境中运行,并能以内存速度和任意规模进行计算。

图文解说Flink的应用场景和功能

二 为什么要选择Flink

流式处理的特点是无界和实时的,不需要针对整个数据集进行处理,而是对系统传输的每个数据执行操作,因此流数据处理能更真实的反应我们的生活和工作方式;通常用在实时处理方面。

我们工作的目标是低延迟的、高吞吐的、高可用的实时应用。

三 哪些行业需要处理流数据

图文解说Flink的应用场景和功能

电商和市场营销

数据报表、广告投放、业务流程处理

互联网

实时报警、热门事件新闻

银行和金融行业

实时数据结算、实时监测异常数据

四 传统数据处理架构

4.1 事务处理

图文解说Flink的应用场景和功能

4.2 仓库模式

将数据从业务数据库同步到数据仓库,再进行数据分析和查询。

图文解说Flink的应用场景和功能

五 流处理的演变

5.1 Lambda架构

图文解说Flink的应用场景和功能

5.2 Kappa架构

图文解说Flink的应用场景和功能

第一层DWD公共实时明细层

实时订阅业务数据消息队列,然后通过数据清洗、多数据源join、流式数据与离线维度信息等的组合,将一些相同粒度的业务系统、维表中的维度属性全部关联到一起,增加数据易用性和复用性,得到最终的实时明细数据。这部分数据有两个分支,一部分直接落地到ADS,供实时明细查询使用,一部分再发送到消息队列中,供下层计算使用。

第二层DWS公共实时汇总层

以数据主题+业务场景的方式创建公共汇总层,与离线数仓不同的是,这里汇总层分为轻度汇总层和高度汇总层,并同时产出,轻度汇总层写入ADS,用于前端产品复杂的OLAP查询场景,满足自助分析和实时报表数据需求;高度汇总层写入HBase,用于前端比较简单的KV查询场景,提升查询性能,比如实时续班大屏等。

六 Flink的主要特点

  • 支持事件时间(event-time)和处理时间(processing-time)语义。
  • 精确一次(exactly-once)的状态保持一致性。
  • 低延迟,每秒要处理数百万个事件,保证毫秒级延迟。
  • 动态扩展,高可用,保障7*24高可用。

七 Flink应用场景

Flink的功能强大,它的主要特性包括:流批一体化、精确的状态管理、事件时间支持以及精确的状态一次性保证等。Flink不仅仅可以在Yarn、Mesos、Kubernetes上面运行,同时也支持在裸机机器上运行。在启用高可用选项的情况下,并不存在单点失效问题。实践证明,在处理TB级别的数据时,Flink仍然能保持高吞吐、低延迟的特性。

7.1 事件驱动型应用

事件驱动型应用是一类具有状态的应用,从一个或者多个事件流中提取数据,并根据到来的事件触发计算、更新状态或者进行其他计算。事件驱动型应用是从计算存储分离的传统应用基础上演变而来的。在传统的架构中,需要通过读写事务型数据库来完成。

但是,事件驱动型应用是基于状态化流处理来完成;而且数据和计算不会分离,应用只需要访问本地(内存或磁盘)即可获取数据。通过定期持久化的写入checkpoint来进行系统容错。下图描述了传统应用和事件驱动型应用架构的区别。

图文解说Flink的应用场景和功能

7.2 事件驱动型应用的优势

  1. 事件驱动型应用通过本地数据访问(无需查询远程数据库),使得它具有更高的吞吐和更低的延迟。
  2. 因为通过异步、增量式地完成持久化存储checkpoint,这就保证了checkpoint对事件处理的影响很微小。
  3. 传统应用中,通常多个应用会共享一个数据库,因此对数据库的任何修改(调整IP、用户名/密码、扩容、升级)都需要谨慎协调。事件型应用只需要考虑自身数据,就不用考虑这些影响。

7.3 Flink如何支持事件驱动型应用

  1. Flink提供了一系列丰富的状态操作原语,能够保证精确一次的一致性语义处理TB级别的有状态数据。
  2. Flink还支持事件时间,可以自由地定制窗口逻辑。内置的ProcessFunction支持细粒度的时间控制。
  3. Flink具有复杂事件处理(CEP)类库,可以用来检测数据流中的模式。
  4. Flink的突出特点是SavePoint。SavePoint是一个一致性的状态映像,可以做兼容应用程序的起点。在完成一次SavePoint之后,即可进行应用的升级和扩容,还可以启动多个版本的应用来完成A/B测试。

7.4 事件驱动型应用的经典案例

  1. 反欺诈
  2. 异常检测
  3. 基于规则的报警
  4. 业务流程监控
  5. (社交网络)Web应用

7.5 数据分析应用

  1. 数据分析主要是需要从原始数据中提取有价值的数据和维度。传统的数据分析方式通常是利用批处理查询。为了能得到最新的数据分析结果,必须把数据实时加入到数据集市,随后将结果写入OLAP实时数据仓库或者生成数据分析报告。
  2. 借助一些先进的流式处理引擎,进行实时数据分析。和传统模式下读取有限数据集不同的是,流式查询会接入实时流,并随着事件消费持续产生和更新结果。

如下图所示,Flink同时支持流式及批量分析应用

图文解说Flink的应用场景和功能

7.5.1 流式分析应用的优势

  1. 和批量分析相比,由于流式分析省掉了周期性的数据导入和查询过程,因此流式数据分析的延迟更低。
  2. 批量查询必须处理那些有定期导入数据的边界,而流式处理不需要关注这个问题。
  3. 批量数据分析必须由多个独立组件组成,需要周期性地调度读取数据和统计数据。如此复杂的流水线操作起来比较繁琐,一旦某个组件出问题将会影响流水线的下游步骤。而流式分析的应用整体运行在Flink系统之上,涵盖了从数据接入到后续结果计算的所有步骤,Flink本身有故障恢复机制。

7.5.2 Flink如何支持数据分析类应用

Flink对流式数据分析和批量数据分析都提供了很好的支持。它内置了一个符合ANSI标准的SQL接口,能够将流、批查询的语义统一起来。同时,Flink还支持丰富的用户自定义函数,能够在SQL中执行自定义函数。Flink的DataStream API和DataSet API能够进行更底层的控制。而且,Flink的Gelly库为基于批量数据集的大规模高性能图分析提供了算法和构建模块支持。

7.5.3 数据分析应用的经典案例

  • 电信网络质量监控
  • 移动应用中的产品更新和实验评估分析
  • 消费中心的实时数据即席分析
  • 大规模图分析

7.6 数据管道应用

抽取-转换-加载(ETL)是传统数据仓库进行数据转换和迁移的常用方法。ETL通常会周期性的将数据从事务型数据库或者原始日志同步到分析型数据仓库中。

数据管道应用和ETL作业的用途相似,都可以转换、加工数据。并将其从某个存储系统移动到另一个。但数据管道是以持续流模式运行,而非周期性出发。数据管道支持从一个不断生成数据的源头读取记录,并且低延迟的将数据结果加载到终点。

下图描述了周期性ETL作业和持续数据管道的差异。

图文解说Flink的应用场景和功能

7.6.1 数据管道的优势

和周期性ETL作业相比,持续数据管道可以明显降低数据移动到目标端的延迟。

7.6.2 Flink如何支持数据管道应用

很多常见的数据转换和增强操作可以利用Flink的SQL接口(或者Table API)及用户自定义函数解决。如果数据管道有更高级的需求,可以选择更通用的DataStream API来实现。Flink为多种数据存储系统(例如:Kafka、Kinesis、Elasticsearch、JDBC数据库系统等)内置了连接器。它还具有用于文件系统的连续源,这些源监视目录和接收器以时间存储方式写入文件。

7.6.3 数据管道应用的经典案例

  • 电子商务中的实时数据查询索引构建
  • 电子商务中的持续ETL

八 Flink vs SparkStreaming

8.1 流(Stream)和微批处理(micro-streaming)

图文解说Flink的应用场景和功能

8.2 数据模型

  • Flink的基本数据模型是数据流和事件序列。
  • Spark采用的是RDD模型,从本质上说SparkStreaming的DStream实际上是一组一组的小批量数据RDD集合。

8.3 运行时架构

  • Flink是标准的流执行模式,一个事件在一个节点处理完之后,可以直接发往下一个节点进行处理。
  • SparkStreaming是微批计算,将DAG分成一个个不同的Stage,一个完成之后才可以进行下一个。

九 处理无界和有界数据

任何数据都可以形成一种事件流。银行卡(信用卡)交易、传感器测量、机器日志、网站或移动应用程序上的用户交易记录等等,所有这些数据都能形成一种流。

数据可以被作为无界有界流来处理。

  1. 无界流 有定义流的开始,但是没有定义流的结束,会无休止地产生数据。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
  2. 有界流 有定义流的开始,也有定义流的结束。有界流所有数据可以被排序,所以并不需要有序提取。有界流通常被称为批处理。

图文解说Flink的应用场景和功能

Flink擅长处理无界和有界数据集 精确的时间控制和状态化使得Flink的运行时(runtime)能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理。

十 部署到任何地方

Flink是一个分布式系统,它需要计算资源来执行应用程序。Flink集成了所有常见的集群资源管理器,例如Hadoop Yarn、Apache Mesos和Kubernetes,同时也可以作为独立集群运行。

十一 运行任意规模的应用

Flink通常把应用程序并行化数千个任务,这些任务分布在集群中并发执行。因此应用程序能够充分利用无尽的CPU、内存、磁盘和网络IO。Flink能够很方便的对应用程序的状态进行维护。其异步和增量的检查点算法仅仅会对数据延迟产生极小的影响。而且能够保证精确一次状态的一致性。

  • 每天能处理数以万亿的数据
  • 应用维护几TB大小的状态
  • 应用在数千个内核上运行

十二 利用内存进行计算

有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。Flink 通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。

图文解说Flink的应用场景和功能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/891237
推荐阅读
相关标签
  

闽ICP备14008679号