一、Flink的用武之地
Flink的口号是实时即未来。
在底层平台建设、实时数仓、实时推荐、实时分析、实时大屏、风控、数据湖等场景中,都可以考虑使用Flink解决实时计算的需求
二、应用场景
1.事件驱动型应用
事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。
事件驱动型应用是基于状态化流处理来完成。在该设计中,数据和计算不会分离,应用只需访问本地(内存或磁盘)即可获取数据。系统容错性的实现依赖于定期向远程持久化存储写入 checkpoint
Flink 提供了一系列丰富的状态操作原语,允许以精确一次的一致性语义合并海量规模(TB 级别)的状态数据。
Flink 还支持事件时间和自由度极高的定制化窗口逻辑,而且它内置的 ProcessFunction 支持细粒度时间控制,方便实现一些高级业务逻辑。
Flink 还拥有一个复杂事件处理(CEP)类库,可以用来检测数据流中的模式。
Flink 中针对事件驱动应用的明星特性当属 savepoint。Savepoint 是一个一致性的状态映像,它可以用来初始化任意状态兼容的应用。在完成一次 savepoint 后,即可放心对应用升级或扩容,还可以启动多个版本的应用来完成 A/B 测试
典型的事件驱动型应用实例
反欺诈
异常检测
基于规则的报警
业务流程监控
(社交网络)Web 应用
2.数据分析应用
流式查询或应用会接入实时事件流,并随着事件消费持续产生和更新结果。这些结果数据可能会写入外部数据库系统或以内部状态的形式维护。仪表展示应用可以相应地从外部数据库读取数据或直接查询应用的内部状态。
和批量分析相比,流式分析省掉了周期性的数据导入和查询过程,因此从事件中获取指标的延迟更低
流式分析会简化应用抽象。流式分析应用涵盖了从数据接入到连续结果计算的所有步骤,因此可以依赖底层引擎提供的故障恢复机制
Flink 为持续流式分析和批量分析都提供了良好的支持。
Flink 内置了一个符合 ANSI 标准的 SQL 接口,将批、流查询的语义统一起来
Flink 还支持丰富的用户自定义函数,允许在 SQL 中执行定制化代码。
可以利用 Flink DataStream API 和 DataSet API 进行更低层次的控制。
Flink 的 Gelly 库为基于批量数据集的大规模高性能图分析提供了算法和构建模块支持。
典型的数据分析应用实例
电信网络质量监控
移动应用中的产品更新及实验评估分析
消费者技术中的实时数据即席分析
大规模图分析
3.数据管道应用
数据管道和 ETL 作业的用途相似,都可以转换、丰富数据,并将其从某个存储系统移动到另一个。但数据管道是以持续流模式运行,而非周期性触发
很多常见的数据转换和增强操作可以利用 Flink 的 SQL 接口(或 Table API)及用户自定义函数解决。
如果数据管道有更高级的需求,可以选择更通用的 DataStream API 来实现。
Flink 为多种数据存储系统(如:Kafka、Kinesis、Elasticsearch、JDBC数据库系统等)内置了连接器。
Flink 提供了文件系统的连续型数据源及数据汇,可用来监控目录变化和以时间分区的方式写入文件。
典型的数据管道应用实例
电子商务中的实时查询索引构建
电子商务中的持续 ETL
总结
Flink基于每个事件处理,每当有新的数据输入都会立刻处理,是真正的流式计算。
同时Flink将静态的有界数据也可以看作是特殊的流数据,通过一套API也能完成批处理的场景。