虽然我之前写过一篇《Flink 是什么》,但更多是基于外围,第三者的角度去观察 Flink,缺乏当事人的角度,总觉得欠了点什么,后面想了想我觉得主要是缺了 Flink 使用案例,Flink 是如何支撑这些案例,这些知识可以帮助初次接触者更好理解工具的用途。
整体
这张图来自官方首页,这张图非常精致描绘 Flink 的适用场景。上游原始数据,例如事物、日志、IOT、点击业务数据等等,通过队列、数据库等方式作为数据源与 Flink 对接;Flink 有三种处理场景,分别是事件驱动、流管道、和流分析或批分析,将原始数据转换为有价值的数据(业务);最后将数据输出到数据库或者应用中。
下面参考官方文档 Use Cases,详细说明 Flink 提供支持的最常见类型的应用程序,并指出实际示例。
- 事件驱动的应用程序
- 数据分析应用程序
- 数据管道应用程序
体系结构图
我们先来看上述所讲的三种类型的体系结构图:
事件驱动
数据分析
数据管道
三者优点
事件驱动
定义:事件驱动的应用是一个有状态的应用,它从一个或多个事件流中提取事件,并通过触发计算,状态更新或外部操作对传入事件做出反应。
优点:1、本地访问数据,吞度量和延迟方面具备更好的性能;2、检查点对常规事件处理的影响非常小;3、对数据表示的更改或扩展应用程序需要较少的协调。
数据分析
定义:分析工作从原始数据中提取信息和洞察力,传统上,分析在记录事件的有界数据集上作为批量查询或应用程序执行。为了将最新数据合并到分析的数据集中,并重新运行查询或应用程序。结果将写入存储系统或作为报告发出。
优点:1、消除定期导入和从事件到洞察的查询执行低得多的延时;2、流式查询不必处理输入数据中的人为边界;3、flink 复杂流处理引擎具备优秀的故障恢复机制。
数据管道
定义:提取-转换-加载(ETL)是在存储系统之间转换和移动数据的常用方法。通常会定期触发 ETL 作业,会将数据从事务数据库系统复制到分析数据库。
优点:1、相比周期性ETL,减少了将数据移到到目的地的延迟;2、更通用、能够连续消耗以及发送数据。
Flink 支持
事件驱动
1、丰富的状态原语,可以管理非常大的数据量(最多几TB),并且具有一次性的一致性保证;2、支持事件时间、高度可定制的窗口逻辑;3、通过ProcessFunction实现高级业务逻辑提供的细粒度时间控制;4、用于复杂事件处理(CEP)的库,用于检测数据流中的模式。
数据分析
1、连续流式传输和批量分析提供了非常好的支持;2、具有符合ANSI标准的SQL接口,具有用于批处理和流式查询的统一语义;3、支持用户定义函数;4、DataStream API 或 DataSet API 提供更多的低级控制;5、Flink 的 Gelly 库为批量数据集上的大规模和高性能图形分析提供算法和构建块。
数据管道
1、Flink 的 SQL 接口(表接口);2、支持用户定义函数;3、使用DataStream API, 可以实现具有更高级要求的数据管道;4、丰富的连接器、连接的文件系统源以及用于监视以时间分区方式写入文件目录和接收器。
使用场景
事件驱动
1、欺诈识别;2、异常检测;3、用于规则的警告;4、业务流程监控;5、Web 应用程序(SNS)。
数据分析
1、电信网络的质量监控;2、分析移动应用程序中的产品更新和实验评估;3、对消费者技术中的实时数据进行特别分析;4、大规模图分析。
数据管道
1、电子商务中的实时搜索索引构建;2、电子商务中持续的ETL。
Flink应用案例
- 优化电子商务的实时搜索结果:阿里巴巴的所有基础设施团队使用flink实时更新产品细节和库存信息,为用户提供更高的关联性。
- 针对数据分析团队提供实时流处理服务:king通过flink-powered数据分析平台提供实时数据分析,从游戏数据中大幅缩短了观察时间
- 网络/传感器检测和错误检测:Bouygues电信公司,是法国最大的电信供应商之一,使用flink监控其有线和无线网络,实现快速故障响应。
- 商业智能分析ETL:Zalando使用flink转换数据以便于加载到数据仓库,将复杂的转换操作转化为相对简单的并确保分析终端用户可以更快的访问数据。
基于上面的案例分析,Flink 非常适合于:
- 多种数据源(有时不可靠):当数据是由数以百万计的不同用户或设备产生的,它是安全的假设数据会按照事件产生的顺序到达,和在上游数据失败的情况下,一些事件可能会比他们晚几个小时,迟到的数据也需要计算,这样的结果是准确的。
- 应用程序状态管理:当程序变得更加的复杂,比简单的过滤或者增强的数据结构,这个时候管理这些应用的状态将会变得比较难(例如:计数器,过去数据的窗口,状态机,内置数据库)。flink提供了工具,这些状态是有效的,容错的,和可控的,所以你不需要自己构建这些功能。
- 数据的快速处理:有一个焦点在实时或近实时用例场景中,从数据生成的那个时刻,数据就应该是可达的。在必要的时候,flink完全有能力满足这些延迟。
- 海量数据处理:这些程序需要分布在很多节点运行来支持所需的规模。flink可以在大型的集群中无缝运行,就像是在一个小集群一样。
👊 结束。
本文由 Chakhsu Lau 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。