本文将简单介绍Flink的概念、优点、架构,以及Flink比Spark做的好的地方
什么是Flink?
借官网的一句话。Apache Flink是一个框架和分布式处理引擎,用于在无边界和有边界的数据流上进行有状态的计算。
首先,Flink和Spark一样,都是分布式的计算框架,用来处理大规模数据;其次,用于在无边界和有边界的数据上计算,有无边界起始就是我们常说的批和流,Flink现在在流处理方面所向披靡,在近来的版本中也一直在推流批一体的东西,有一统流批的趋势;最后,有状态的计算,Flink提供了强大的状态支持,能够很便捷的实现很多复杂需求。
Flink优点
- 事件驱动,支持事件时间
- 强大的状态支持
- 精确一次的保证
- 分层API:DataSet/DataStream、Table/SQL
- 检查点。Checkpoint、SavePoint
- 高吞吐,低延迟
分层抽象
- 最底层是process api,用户可以最细粒度的对数据进行操作、状态管理等
- 再上层是DataStream和DataSet,封装了基本的操作算子,可以完成大部分需求。
- 再上层是Table API,可以将数据集注册为表,进行处理。
- 最高层是SQL API,基于SQL进行处理。
架构
https://ci.apache.org/projects/flink/flink-docs-release-1.12/concepts/flink-architecture.html
Flink也是主从架构。客户端提交任务,JobManager负责管理调度,Task Manager负责干活。
Flink比Spark做的好的地方
- Flink是真正的流处理,而Spark Streaming是基于微批实现的流。
- 源码语言。Spark是Scala,Flink是Java,Java用的人还是多点吧。
- 事件时间的支持。Spark只有批处理时间,Flink提供了ProcessTime、EventTime、IngestTime可选择。
- 完整的窗口支持。Flink基于状态的加持,在窗口计算这块用起来很舒服。
- 基于流的SQL处理。流批一体概念的提出可能一统计算框架。
最后
作为Spark的忠粉,每当身边一群不懂Spark的人在狂吹Flink、爆撵Spark时,都很不爽。但是Flink一统流批的趋势是无需争议的,打不过就加入他们。定个小目标,接下来持续输入、输出Flink内容。