Flink1.8探索系列~使用场景

在深入学习任何一门开源框架之前,我们都需要了解它的使用场景。

针对本文,就是Flink能干什么,不能干什么,因为所有框架的应用都是为了解决业务需求。

下面是Flink官方对使用场景的说明。

Apache Flink因其丰富的功能而逐渐成为开发和运行多种不同类型应用程序的绝佳选择.

Flink的功能包括:

  • 流处理和批处理
  • 复杂的状态管理
  • 事件时间处理语义
  • exactly-once consistency状态保证

此外,Flink还可部署在各种资源提供商(如YARN,Apache Mesos和Kubernetes)上,也可作为裸机硬件上的独立集群。 其设计目标为高可用性,因此Flink不存在单点故障。

Flink已被证明可扩展到数千个核心和TB字节的应用场景,提供高吞吐量和低延迟,并为世界上最苛刻的流处理应用程序提供支持。

下面,我们将探讨Flink支持的常见用例:

  • 事件驱动应用程序
  • 数据分析应用程序
  • 数据管道应用程序

事件驱动应用程序

什么是事件驱动应用程序?

事件驱动应用程序是一个有状态应用程序,它能从1个或多个事件流中提取事件,并通过触发计算,状态更新或外部动作来对输入事件做出相应的反应.

事件驱动应用程序是基于传统应用程序设计的演变,具有独立的计算和数据存储层。 在该体系结构中,应用程序从远程事务数据库读取数据并将数据持久化。相反,事件驱动应用程序基于有状态流处理应用程序。 在这种设计中,数据和计算是共同定位的,这就产生了本地(内存或磁盘)数据访问。 它通过定期将检查点(checkpoints)写入远程持久存储来实现容错。

下图描绘了传统应用程序体系结构和事件驱动应用程序之间的差异。

Flink1.8探索系列~使用场景

事件驱动应用程序有何优势?

事件驱动应用程序只会访问本地数据(不查询远程数据库),从而在吞吐量和延迟方面能产生更好的性能。定期检查点的远程持久存储可通过异步和递增方式来完成。 因此,检查点对常规事件处理的影响非常小。 但事件驱动应用程序的设计不局限于本地数据访问。 在分层体系结构中,多个应用程序共享同一数据库是很常见的。 因此,需要协调数据库的任何更改,例如由于应用程序更新或服务扩张而更改数据布局。 由于每个事件驱动应用程序都负责自己的数据,因此更改数据表示或扩展应用程序需要的协调非常少。

Flink是如何支持事件驱动应用程序的?

事件驱动应用程序的限制由流处理器处理时间和状态程度来定义。Flink的很多特色功能都围绕了这个概念.

Flink提供了一组丰富的状态原语,可以管理非常大的数据量(最多几TB),并且具有 exactly-once的一致性保证。 此外,Flink对事件时间,高度可定制的窗口逻辑,以及ProcessFunction提供的细粒度时间控制的支持使得它能够实现很多高级业务逻辑。 此外,为了检测数据流中的模式,Flink还提供了一个用于复杂事件处理(CEP)的库。

然而,Flink在事件驱动应用程序方面的出色功能是savepoint。 savepoint是一致的状态镜像,可用作兼容应用程序的起点。 只要给定了savepoint,我们就可以更新应用程序或调整其规模,或者可以启动应用程序的多个版本来执行A/B测试。

什么是典型的事件驱动应用程序?

  • Fraud detection(欺诈检测)
  • Anomaly detection(异常检测)
  • Rule-based alerting(规则报警)
  • Business process monitoring(业务流程监控)
  • Web application (social network)(社交网络)

数据分析应用程序

什么是数据分析应用程序?

分析工作会提取原始数据并进行分析操作. 传统的分析操作会在记录事件的有界数据集上执行批量查询(或执行某类应用程序)。 为了将最新数据合并到分析结果中,必须将其添加到分析的数据集中,并重新运行查询或应用程序。 最后再将结果写入存储系统或作为报告发出。

借助先进的流处理引擎,我们还可以实时地对数据进行分析。 流式查询或应用程序不是读取有限数据集,而是摄取实时事件流,并在消费事件时不断地生成和更新结果。最后,我们可以选择将结果写入外部数据库,也可以选择将其保持为内部状态。

仪表板应用程序(Dashboard application)可以从外部数据库读取最新结果或直接查询应用程序的内部状态。

Apache Flink支持流式和批量分析应用程序,如下图所示。

Flink1.8探索系列~使用场景

流式分析应用程序有哪些优势?

与批量分析相比,持续流分析可以降低定期导入和查询所带来的延迟。 与批量查询相比,流式查询不必处理输入数据中的人为边界,这些边界是由定期导入和输入的有界性质所决定的。

另一优势是应用程序架构更简单。 批处理分析管道由若干独立组件组成,这些组件会定期调度数据提取和查询任务。 要可靠地操作这样的管道并非易事,因为一个组件的故障会影响管道的后续步骤。 相比之下,在像Flink这样的复杂流处理器上运行的流分析应用程序包含从数据摄取到连续结果计算的所有步骤。 因此,可依赖于引擎的故障恢复机制来实现容错。

Flink如何支持数据分析应用程序?

Flink为连续流式传输和批量分析均提供了非常好的支持。 具体来说,它具有符合ANSI标准的SQL接口,具有用于批处理和流式查询的统一语义。 无论是在记录事件的静态数据集上还是在实时事件流上运行,SQL查询都会计算出相同的结果。 对用户定义函数的丰富支持可确保在SQL查询中执行自定义代码。 如果需要更多的自定义逻辑,则可使用Flink的DataStream API或DataSet API来精确控制。 此外,Flink的Gelly库为批量数据集上的大规模和高性能图形分析提供算法和构建块。

什么是典型的数据分析应用程序?

  • Quality monitoring of Telco networks(电信网络的质量监控)
  • Analysis of product updates & experiment evaluation in mobile applications(分析移动应用程序中的产品更新和实验评估)
  • Ad-hoc analysis of live data in consumer technology(对消费者的实时数据进行特别分析)
  • 大规模图分析

数据管道应用程序

什么是数据管道?

Extract-transform-load (ETL) 是存储系统之间常用的转换和移动数据方法. 通常它会定期触发ETL作业,以便将数据从事务数据库系统复制到分析数据库或数据仓库。

数据管道与ETL作业具有相似的用途。 它们可以转换和丰富数据,并可以将数据从一个存储系统移动到另一个存存储系统。 但是,它们以连续流模式运行,而非定期触发。 因此,他们能够从连续生成数据的源中读取记录,并以低延迟将其移动到目的地。 例如,数据管道可能会监视文件系统目录中的新文件,并将其数据写入事件日志。 另一个应用程序可能会将事件流写入数据库,或者逐步构建和优化搜索索引。

下图描述了定期ETL作业和连续数据管道之间的差异。

Flink1.8探索系列~使用场景

数据管道有哪些优势?

连续数据管道优于周期性ETL作业的明显优势是减少了将数据移动到目的地的延迟。 此外,数据管道更通用(可用于更多用例),因为它们能够连续消费和发送数据。

Flink如何支持数据管道?

Flink的SQL接口(或Table API)可以完成常见的数据转换或丰富任务,并支持用户定义的函数。

通过使用更通用的DataStream API,可以实现具有更高要求的数据管道。

Flink为各种存储系统(如Kafka,Kinesis,Elasticsearch和JDBC数据库系统)提供了丰富的连接器。 它还具有连续的文件系统源,用于监视以时间分区方式写入文件的目录和接收器。

什么是典型的数据管道应用?

  • Real-time search index building in e-commerce(电子商务中的实时搜索索引构建)
  • Continuous ETL in e-commerce(电子商务中持续的ETL)


分享到:


相關文章: