大数据系列教程(2)Flink 应用场景

应用场景

Apache Flink 是开发和运行许多不同类型的应用程序的绝佳选择,因为它具有广泛的功能集。Flink 的功能包括支持流和批处理、复杂的状态管理、事件时间处理语义以及状态的一次性一致性保证。

下面,我们将探讨由 Flink 提供支持的最常见的应用程序类型,并为现实世界的示例提供指导。

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

事件驱动的应用程序

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

事件驱动应用程序是一种有状态的应用程序,它从一个或多个事件流中提取事件,并通过触发计算、状态更新或外部操作对传入事件做出反应。

事件驱动应用程序是传统应用程序设计的演变,具有分离的计算和数据存储层。在此架构中,应用程序从远程事务数据库读取数据并将数据持久保存到远程事务数据库。

相比之下,事件驱动的应用程序基于有状态的流处理应用程序。在此设计中,数据和计算位于同一位置,从而产生本地(内存或磁盘)数据访问。容错是通过定期将检查点写入远程持久存储来实现的。下图描绘了传统应用架构与事件驱动应用的区别。

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

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

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

事件驱动应用程序的限制取决于流处理器处理时间和状态的能力。Flink 的许多出色功能都围绕这些概念展开。Flink 提供了一组丰富的状态原语,可以管理非常大的数据量(高达数 TB),并保证一次性一致性。此外,Flink 对事件时间的支持、高度可定制的窗口逻辑以及对时间的细粒度控制,ProcessFunction使高级业务逻辑的实现成为可能。此外,Flink 还提供了一个用于复杂事件处理(CEP)的库来检测数据流中的模式。

但是,Flink 对于事件驱动应用程序的突出特点是保存点。保存点是一致的状态图像,可用作兼容应用程序的起点。给定一个保存点,可以更新应用程序或调整其规模,或者可以启动应用程序的多个版本进行 A/B 测试。

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

  • 欺诈识别
  • 异常检测
  • 基于规则的警报
  • 业务流程监控
  • 网络应用程序(社交网络)

数据分析应用

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

分析工作从原始数据中提取信息和洞察力。传统上,分析是作为批处理查询或应用程序对记录事件的有界数据集执行的。为了将最新数据合并到分析结果中,必须将其添加到分析的数据集中并重新运行查询或应用程序。结果被写入存储系统或作为报告发出。

借助复杂的流处理引擎,还可以实时执行分析。流式查询或应用程序不是读取有限的数据集,而是摄取实时事件流,并随着事件的消耗不断产生和更新结果。结果要么写入外部数据库,要么作为内部状态进行维护。Dashboard 应用程序可以从外部数据库读取最新结果或直接查询应用程序的内部状态。

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

与批处理分析相比,连续流分析的优势不仅限于由于消除了定期导入和查询执行,从事件到洞察的延迟要低得多。与批处理查询相比,流式查询不必处理输入数据中由周期性导入和输入的有界性质引起的人为边界。

另一方面是更简单的应用程序架构。批处理分析管道由几个独立的组件组成,用于定期安排数据摄取和查询执行。可靠地操作这样的管道并非易事,因为一个组件的故障会影响管道的后续步骤。相比之下,在 Flink 等复杂流处理器上运行的流分析应用程序整合了从数据摄取到连续结果计算的所有步骤。因此,它可以依靠引擎的故障恢复机制。

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

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

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

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

数据管道应用

什么是数据管道?

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

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

数据管道的优势是什么?

与周期性 ETL 作业相比,连续数据管道的明显优势是减少了将数据移动到其目的地的延迟。此外,数据管道更加通用,可以用于更多用例,因为它们能够持续使用和发出数据。

Flink 如何支持数据管道?

Flink 的 SQL 接口(或 Table API)及其对用户定义函数的支持可以解决许多常见的数据转换或丰富任务。使用更通用的 DataStream API 可以实现更高要求的数据管道。Flink 为各种存储系统提供了丰富的连接器集,例如 Kafka、Kinesis、Elasticsearch 和 JDBC 数据库系统。它还具有用于文件系统的连续源,用于监视以分时方式写入文件的目录和接收器。

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

  • 电子商务[的实时搜索索引构建
  • 电子商务中的持续 ETL

你可能感兴趣的:(大数据,big,data,flink,数据库)