文章目录
Flink实战(一)
Flink概述
Flink是什么
定义
- Apache Flink是一个分布式的大数据计算引擎
- 能够对有限和无限数据集进行有状态的计算
- 可以部署在各种集群环境
- 可以对各种规模的数据进行快速准确的计算
Stateful Computations over Data Streams
- 数据源:交易数据、日志数据、物联网设备数据、点击流数据等
- 应用:事件驱动应用、数据流管道应用、流、批数据分析
- 官网
- flink-apache地址:https://flink.apache.org/
- flink-china地址:https://flink-china.org/
- 商业运营公司:https://data-artisans.com
Flink的诞生和发展
- 诞生:诞生于2009年,德国柏林工业大学的名为StratoSphere研究性项目,最初主要专注于批处理;直到14年捐献给Apache之后,更名为Flink,并迅速孵化成Apache顶级项目,并且定位是流计算
- 发展:发展历程
- 可以看出,Flink诞生比Spark、Storm都早,但是是在捐献给apache之后,得到迅速发展,并且目前在流计算领域拥有很大影响力
- 其中2015年,是大数据流计算框架层出不穷的时期,包括Storm、SparkStreaming、Flink、Dataflow(谷歌的)等等,而Flink是最接近谷歌Dataflow的开源实现
Flink特性
- 流、批统一
- 支持java、scalaAPI、Python(还在完善中)
- 高吞吐、低延时
- 复杂事件处理、处理乱序
- 不同的时间语义(Event Time、Ingestion Time、Process Time)下支持灵活的窗口(Time Window、Rolling Window、Sliding Window、Session Window、以及自定义窗口)
- Exactly Once语义
- 自动反压机制(阻塞生产端从而保证正在运行的flink task不受影响)
- 支持图计算、机器学习、复杂事件处理
- 高效的自定义内存管理
- 集成的Hadoop、Hdfs、MR、Hbase等Hadoop生态圈组件
Flink的生态与未来
核心组件
- 组件
- 部署支持:本地JVM(调试的时候用)、集群(Standalone || Yarn)、云上
- 底层Flink Runtime
- 流处理API:DataStream API;批处理API:DataSet API
- 最上层:CEP复杂事件处理(规则匹配)、SQL&Table API(可以和DataStream API、DataSet API互相转换)、FlinkML(机器学习)、Gelly(图计算)
生态
- Source:HDFS、Hbase、Kafka、RabbitMQ等等
- 数据处理引擎:Flink各个组件
- Sink:HDFS、Hbase、Kafka、RabbitMQ、ES等等
Flink未来
- 批处理的突破,流批融合
- 增加多种语言的支持
- 完善Flink ML算法库,会向更成熟的机器学习、深度学习框架去集成(例如:谷歌的TensorFlow on Flink)
Flink Use Cases
Flink主要应用场景
- Event-Drive APP(事件驱动)
- Data-Analytics APP(数据分析)
- Data-Pipeline APP(管道式ETL)
案例
- 阿里Flink应用场景
- 阿里Flink应用场景案例分析—欺诈检测
Flink vs Spark
流处理框架对比
Flink vs Spark
- API
- Connectors
- Runtime Env
- 总体对比
- Spark生态上更完善、在机器学习的集成和易用性上优势大些
- Flink在流计算上有绝对优势,并且在核心架构和模型上更通透以及灵活
- 在易用性上面,以及各自的短板上需要继续努力