Flink
定义:基于数据流的有状态计算
对比Spark
1.定位
- Spark:流是批的特例(Spark)
 - Flink: 批是流的特例(Flink)
 
2.数据模型
- Spark:RDD集合,依靠 lineage 做恢复,做容错,存在宽窄依赖
 - 
    
Flink: 数据量和 event 的序列,依靠 checkpoint 做恢复,保证一致性
 - DAG:
    
- 来一条数据处理一条,传输到下一个节点,也可以优化批次处理,其中 checkpoint 可以不用落盘,这样可以提高性能以及低延迟
 
 
3.处理模型
- Spark
    
- 支持各种数据处理,对机器学习迭代训练支持比较好(基于RDD本身模型)
 
 - Flink
    
- 有状态的计算,尤其API层级多样,支持丰富
 
 
4. 抽象层次
- Spark
    
- 一套API
 
 - Flink
    
- DataSet 和 DataStream 是独立的 API
 
 
5. 内存管理
- Spark
    
- JVM —-> Tungsten
 
 - Flink
    
- 自己管理内存
 
 
6. 支持语言
- Spark 比 Flink 支持的丰富,支持java,scala,python,R
 - flink 目前只支持 java , scala
 
7. SQL支持
- Spark 比 Flink 支持的丰富
 
8. 外部数据源
- Spark: NoSQL ,ORC,Parquet , RDBMS
 - Flink: Map / Reduce , InputFormat
 
Flink适用场景
1. Event-driven Applications
- 定义:
    
- stateful app
 - checkpoint 保证容错,拉取 remote data 做持久化存储
 
 - 优势:
    
- 读取本地数据而非远程数据库
 - 分层体系多个应用可以共享一个数据库
 
 - 如何支持:
    
- 有一些语言支持 time , window , processfunction
 - savepoints: 一个一致的映像文件
 
 - 案例:
    
- XX检测,web应用(社交网络)
 
 
2.Data Analytics Applications
- 定义:
    
- 无界处理
 - 依赖内部 state 做 flink 故障恢复机制
 
 - 优势:
    
- 降低延迟
 
 - 如何支持:
    
- anis 的 SQL 接口,对于批处理和流处理提供了统一的语义
 
 - 案例:
    
- 网络质量监控,大规模图分析
 
 
3. Data Pipeline Applications
- 定义:
    
- 类似于 ETL ,但并非周期性操作,而是连续性操作,这会降低目标间数据移动的延迟
 
 - 优势:
    
- 降低延迟,更加通用
 
 - 如何支持:
    
- 基于多层 API 结构以及多种多样的 Connectos
 
 - 案例:
    
- 电商的实时搜索的索引构建,电商的连续的 ETL