Apache Flink-用户场景

   Apache Flink在需要运行各种类型的应用程序方面是个不错的选择,因为其具有丰富的特征集。Flink的特征包含了处理流和批处理,复杂的状态管理,事件时间处理语义和对状态的"正好一次"一致性保证。而且,Flink可以部署在不同的资源管理器之上,如YARN,Apache Mesos,和k8s,但是也可以在裸机上单独的集群上运行。当配置高可用后,Flink就不存在单点故障。Flink已经被证明可以规模化到上千核和TB级的应用状态,拥有高吞吐量和低延迟,并强力支撑当前世界最高要求的流处理应用。

下面,我们探索由Flink技术支撑的最常用的应用程序并且给出真实的实例。

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

事件驱动应用程序

什么是事件驱动应用程序?
    一个事件驱动式的应用程序是一个从一个或多个事件流摄入事件并触发计算,状态更新,和外部动作。
   事件驱动应用程序是对传统设计的计算和数据存储分层分离的革命,在这样的架构中,应用程序从远端事务数据库读取数据或进行持久化。
   相反,事件驱动应用程序基于状态流处理应用。在这样的设计中,数据和计算本地协作,数据本地访问(内存和磁盘)。通过周期写检查点到远端持久化存储已达到容错。下面的图片描述了传统的架构和事件驱动架构的区别。

事件驱动应用程序的优势在哪里?

   和查询远程数据库不同,事件驱动应用程序访问其本地的数据因此性能优越,包括吞吐量和延迟。可以异步和增量的周期性的把检查点持久化到远程存储。因此检出检查点的动作对常规的计算影响很小。然而,事件驱动应用程序设计提供更多好处而不仅仅是本地数据访问。在分层的架构中,多个应用程序共享相同的数据库是常见的。因此,数据库中的任何改变,例如数据布局的改变会导致应用程序更新或服务扩展都需要重新协调。而每个事件驱动应用程序只负责自己的数据,数据表示和应用程序的更改需要较少的协调成本。

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

   事件驱动应用程序的限制是由流处理器如何处理时间和状态决定的,Flink许多优秀的功能都是围绕这些概念展开的。Flink提供了丰富的状态体可以管理超大数据量(达到几TB)并保证"正好一次"一致性。而且,Flink支持事件时间,高度自定义的窗口逻辑,和ProcessFunction提供的精细的时间控制,用以实现高级的业务逻辑。而且,Flink为复杂的事件处理中侦测数据流中的模型提供了库。

事件驱动应用程序的典型应用有哪些?
欺诈侦测
异常侦测
基于规则的报警
业务处理监控
web应用程序(社交网络)

数据分析应用程序

什么是数据分析应用程序?
数据分析型的job从原始数据获取信息。传统上,分析工作以批量查询的分析进行或者基于事件记录的有界数据集上的应用。为了把最新的数据合并到分析的结果中,不得不增加到已经分析的数据集之上并且重新查询或者重跑应用,结果写入存储系统或生成报告。

在有一个复杂的流处理引擎后,数据分析也可以以实时的方式执行。不同于读取有限的数据集,流查询或应用摄入实时事件流,在事件被消费时持续生成和更新结果。结果要么写入外部存储要么作为内部状态维护,外部应用可以从外部数据库读取最新结果或直接查询应用的内部状态。

Apache Flink支持流和批处理分析应用程序,如下所示:


流分析应用程序的优势在哪里?
   持续流分析和批量分析相比的优势在于不只是局限于更低的延迟,还在于流处理不需要周期性的导入和查询。和批量查询相反,流处理不需要处理因周期性导入和输入数据的人工边界。另一个方面是更简单的应用架构。一个批处理管道由不同的独立组件构成以周期性的规划数据摄入和查询执行。可靠的操作如管道是非常重要的,因为一个组件的失败影响管道接下来的步骤。相反,流分析应用程序运行在复杂精细的流处理器上如flink从数据摄入到结果持续计算集成了所有步骤。因此,它可以依赖引擎的失败恢复机制。

Flink如何支持数据分析应用程序?
   Flink为批量分析和持续流处理提供了很好的支持。特别地,它提供ANSI兼容SQL接口以统一的语义进行批处理和流查询。SQL查询计算相同结果,不管它们是运行在静态数据上还是实时事件流上。对用户自定义函数的丰富的支持保证自定义的代码可以在SQL查询上执行。如果需要更多的自定义逻辑,Flink的 DataStream API 或DataSet API提供很多低级别的控制。更多地,Flink的 gelly库提供算法和为在批量数据集上进行大规模和高性能图分析构建块。

数据分析应用程序的典型应用有哪些?
电话网络的质量监控
产品更新分析&手机应用的实验评估
消费数据实时分析
大规模图分析
数据管道应用程序

数据管道应用程序

什么是数据管道应用程序?
   提取-转换-加载(ETL)是在存储系统之间转换和移动数据通常的步骤,通常ETL任务周期性触发以把数据从事务数据库拷贝到数据分析数据库或数据仓库中。数据管道服务和ETL任务目的一样。对数据转换和丰富并可以从一个存储系统转移到另一个。然而,它是以一种持续的流模式操作而不是周期性触发。因此能够持续的
从源头读取记录产生数据并且以低延迟移动到目的地。例如,一个数据管道应用程序可以监控一个文件系统目录,一有新文件就把数据写入到事件日志。另一个例子是应用程序可能会将事件流变成数据库,或者增量地构建和优化搜索索引。

下图描述了周期性ETL作业和连续数据管道之间的区别。

数据管道的优质在哪里?
   连续的数据管道在周期性ETL作业上的明显优势是将数据移动到其目的地的延迟。此外,数据管道更加通用,可以用于更多的用例,因为它们能够持续地消耗和释放数据。

Flink如何支持数据管道?

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

数据管道有哪些典型应用?

电商中的实时搜索索引构建

电商中的持续ETL

猜你喜欢

转载自blog.csdn.net/javajxz008/article/details/83001946