一、Flink基础概念
1、Flink是什么?
Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算 (官网解释)
用松鼠logo的原因:希望这个项目(Flink)能做到快速灵活的大数据的处理 ,Flink在德语里面表示 快速 灵巧 这玩意是德国的
Flink应用场景
电商和市场营销: 实时报表|广告投放|实时推荐
物流配送及服务: 订单状态跟踪|信息推送
物联网: 实时数据采集|实时报警
银行和金融业: 实时结算|风险检测
2、为什么要用Flink
批处理和流处理
流数据更真实的反映了我们的生活方式
我们的目标:
- 低延迟
- 高吞吐
- 结果的准确性和良好的容错性
3.流处理的发展和演变
3.1 传统数据处理结构
事务处理(比如后台管理系统) 计算层 管理层 OLTP
分析处理 (数据量可以很大,但是不能实时 HIVE) OLAP
3.2 流处理的演变
Lambda架构 (第二代)
用两套系统,同时保证低延迟和结果准确
- 批处理
- 流处理
3.3 新一代流处理器---Flink
核心特点
- 高吞吐、低延迟
- 结果的正确性 (时间语义 事件时间 )
- 精确一次(exacly-once)的状态一致性保证
- 可以与众多常用存储系统链接
- 高可用、支持动态扩展
应用场景
- 事件驱动型应用
- 数据分析型应用
- 数据管道型应用
4.Flink的主要特点
分层API
越顶层越抽象,表达含义越简明,使用越方便
越底层越具体,表达能力越丰富,使用越灵活
SQL 最高层语言
Table API 声明式领域专用语言
DataStream/DataSetAPI 核心APls --> 重要
有状态流处理 底层APls process function (理论上啥都能做 相当于自定义处理函数 自定义API)
特点总结:
- 低延迟
- 高吞吐
- 高容错
- 结果正确
- 语义化窗口
- 易用的API
5.Flink 与 Spark Streaming区别
5.1数据处理架构不同
Spark 适合处理批次数据
输入数据流 -> SparkStreaming -> ‘微批次’数据 -> Spark引擎 --> 处理后”微批次“数据
Flink 适合处理流数据
有界数据流
无界数据流
5.2 数据模型不同
- Spark采用RDD模型。Spark Streaming的DStream实际上也就是一组组小批数据RDD的集合
- Flink基本数据模型是数据流,以及事件(Event)序列
5.3 运行时架构不同
- Spark是批计算,将DAG划分为不同的Stage,一个完成后才可以计算下一个
- Flink是标准的流执行模式。一个事件在一个节点处理完后可以直接发往下一个节点进行处理