译(Flink---应用场景)

Google翻译
Flink因为其可扩展的特性集而成为开发和运行多种不同应用的最佳选择。它包含批流处理,复杂的状态处理,事件事件语义,以及状态的确切一致性保证等特性。除此之外,Flink可以运行在多种资源提供者上,例如YARN, Apache Mesos和Kubernetes,也可以以stand-alone集群方式运行在裸机之上。配置为高可用,Flink没有单点故障。Flink已被证明可扩展到数千个核心和太字节的应用程序状态,提供高吞吐量和低延迟,并为世界上一些最苛刻的流处理应用程序提供支持。
下面,我们将探讨由Flink提供支持的最常见类型的应用程序,并指出实际示例

  • 事件驱动型应用
  • 数据分析型应用
  • 数据管道型应用
事件驱动型应用 什么是事件驱动型应用? 事件驱动的应用程序是一个有状态的应用程序,它从一个或多个事件流中提取事件,并通过触发计算,状态更新或外部操作对传入事件做出反应。
事件驱动的应用程序是传统应用程序设计的演变,具有独立的计算和数据存储层。在传统应用的体系结构中,应用程序从远程事务数据库中读取数据并将数据持久化。
相反的,事件驱动型应用基于状态流处理的应用。在这种设计中,数据和计算是共同定位的,这产生了本地(内存或磁盘)数据访问。通过定期将检查点写入远程持久存储来实现容错。下图描绘了传统应用程序体系结构和事件驱动应用程序之间的差异。

译(Flink---应用场景)
文章图片
image 事件驱动型应用的优势 事件驱动型应用在本地访问数据而非查询远程数据库,这在吞吐量和延迟方面的性能更好。定期将检查点异步增量地写入远程持久存储。因此,检查点对常规事件处理的影响非常小。然而,事件驱动型应用设计提供的不仅仅是本地的数据访问。在分层体系结构中,多个应用程序共享同一数据库是很常见的。于是,任何的数据库改变都需要协同,例如因为应用更新或服务扩展而改变数据的布局。由于每个事件驱动的应用程序都负责自己的数据,因此更改数据表示或扩展应用程序需要较少的协调
Flink如何支持事件驱动型应用 事件驱动应用程序的限制由流处理器处理时间和状态的程度来定义。Flink的许多特性以这些概念为中心。Flink提供了一组丰富的状态原语,可以管理非常大的数据量(最多几TB),具有一次性的一致性保证。除此之外,Flink提供事件时间,高定制化的窗口逻辑和ProcessFunction提供的细粒度的时间控制以实现高级的业务逻辑。此外,Flink还提供了一个用于复杂事件处理(CEP)的库,用于检测数据流中的模式。
然而,Flink在事件驱动应用中最出色的特性是保存点。保存点是一致的状态图像,可用作兼容应用程序的起点。给定保存点,可以更新应用程序或调整其规模,或者可以启动应用程序的多个版本以进行A / B测试
典型的事件驱动型应用
  • Fraud detection
  • Anomaly detection
  • Rule-based alerting
  • Business process monitoring
  • Web application (social network)
数据分析型应用 什么是数据分析型应用 分析工作是从原始数据中提取信息和洞察力。传统上,分析在记录事件的有界数据集上作为批量查询或应用程序执行。必须将其添加到分析的数据集中,然后重新运行查询或应用程序。结果将写入存储系统或作为报告发出。
借助先进的流处理引擎,还可以实时地执行分析。流查询和应用程序获取实时的事件流而非读取有限的数据集,随着事件的消费持续产生和更新结果。结果被写入外部数据库或者被内部状态所持有。展示应用从外部数据库读取最新的结果或直接查询应用的内部状态。
如下图所示,Flink支持流式传输和批量分析应用程序

译(Flink---应用场景)
文章图片
image 流式分析应用的优势 与批量分析相比,连续流分析的优势不仅限于因消除定期导入和查询执行而从事件到洞察的低得多的延迟。与批量查询相比,流式查询不必处理输入数据中的人为边界,这些边界是由定期导入和输入的有界性质引起的。
另一方面是更简单的应用程序架构。批处理分析管道由若干独立组件组成,以定期调度数据提取和查询执行。可靠地操作这样的管道并非易事,因为一个组件的故障会影响管道的后续步骤。相比之下,在像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
  • Large-scale graph analysis
数据管道型应用 什么是数据管道 提取 - 转换 - 加载(ETL)是在存储系统之间转换和移动数据的常用方法。通常会定期触发ETL作业,以将数据从事务数据库系统复制到分析数据库或数据仓库。
数据管道与ETL作业具有相似的用途。它们可以转换和丰富数据,并可以将数据从一个存储系统移动到另一个。然而,数据管道在持续的流模式操作而非定期触发。因此,他们从持续产生数据的资源读取记录并以低延时移动到他们的目的地。例如,数据管道可能会监视文件系统目录中的新文件,并将其数据写入事件日志。另一个应用程序可能会将事件流实现到数据库,或者逐步构建和优化搜索索引。
下图描述了定期ETL作业和连续数据管道之间的差异。

译(Flink---应用场景)
文章图片
usecases-datapipelines.png 数据管道的优势 【译(Flink---应用场景)】连续数据流水线优于周期性ETL作业的明显优势是减少了将数据移动到目的地的延迟。此外,数据管道更通用,可用于更多用例,因为它们能够连续消耗和发送数据。
Flink如何支持数据管道 Flink的SQL接口(或表API)可以解决许多常见的数据转换或丰富任务,并支持用户定义的函数。通过使用更通用的DataStream API,可以实现具有更高级要求的数据管道。Flink为各种存储系统提供了丰富的连接器,例如Kafka,Kinesis,Elasticsearch和JDBC数据库系统。它还具有连续的文件系统源,用于监视以时间分区方式写入文件的目录和接收器
典型的数据管道型应用
  • Real-time search index building in e-commerce
  • Continuous ETL in e-commerce

    推荐阅读