1 Flink简介
Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行状态计算。
1.1 Flink的应用场景
1.1.1 为什么选择Flink
传统的数据架构是基于有限数据集的。
使用Flink的目标是: 低延迟,高吞吐,结果的准确性和良好的容错性。
1.1.2 应用场景
但不限于以上场景。
1.2 流式处理
1.2.1 数据处理架构
1)传统数据处理架构
1.1)事务处理
1.2)分析处理
将数据从业务数据库复制到数据仓库,再进行分析和查询。关键是有ETL过程。离线处理
2)流式处理
有状态的流式处理。
1.2.2 流处理的演变
1) lambda架构
逐渐再被淘汰!
2)Flink
Storm: 典型的第一代流处理架构。
Lambda流处理架构:第二代。
Spark Streaming:依然是将流数据转成微小的批次进行处理。
Flink:解决了上面三个架构中的所有问题。第三代。
1.2.3 Flink的特点
1)事件驱动
2)基于流的世界观
在Flink的世界观中,一切都是由流组成的,离线数据是有界的流;实时数据是一个没有界限的流:这就是有界流和无界流。
3)分层API
- 越顶层越抽象,表达含义越简明,使用越方便;
- 越底层越具体,表达能力越丰富,使用越灵活。
其中,最上层仍然在完善中,阿里推出了blink等。
4)其它特点
- 支持事件时间(event-time)和处理时间(processing-time)语义;
- 精确一次(exactly-once)的状态一致性保证;
- 低延迟,每秒处理数百万个事件,毫秒级延迟;
- 与众多常用寸尺系统的连接;
- 高可用,动态扩展,实现7*24小时全天候运行。
5)Flink与Spark Streaming的对比
5.1)真正的流(stream)和微批(micro-batching)的区别
5.2)数据模型
- spark采用RDD模型,spark streaming的DStream实际上也就是一组组小批数据RDD的集合;
- flink基本数据模型是数据流,以及事件(Event)序列。
5.3)运行时架构
- spark是批计算,将DAG划分为不同的stage,一个完成后才可以计算下一个;
- flink是标准的流执行模式,一个事件在一个节点处理完后可以直接发往下一个节点进行处理。