处理流程
Flink
程序的基本构建块是流和转换。(请注意,Flink
的 DataSet API
中使用的 DataSet
也是内部流)从概念上讲,流是数据记录流(可能永无止境),而转换是将一个或多个流作为一个操作的操作。一个输入,可以产生一个(例如 map
)或多个输出流(例如 flatMap
)。上图是数据处理流程,可以看到有几个核心组件:
1. 数据源 Source
自带的 api
中,可以读取数据如下:集合数据(fromCollection)、文件数据(readFile)、网络套接字(socket)以及更多扩展来源(addSource),更多扩展中通过自定义来实现 RichSourceFuncation
,实现读取更多来源的数据。
像图中获取的数据源是 Kafka
,与其它中间件整合中,也封装了很多方便的方法,调用它们可以更方便获取数据源的数据。
2. 转换 Transaction
进行数据的转化,对应于文档中的算子 Operator
。常见的数据操作有以下:map
、flatMap
、filter
、keyBy
、reduce
、fold
(在 1.9 中看到被标注为 deprecated
)、aggregate
、window
等常用操作。
同时从上图也能看出,转换的操作可以不止一次,多个算子可以形成 chain
链式调用,然后发挥作用。
3. 存储 Sink
进行数据的存储或发送,对应于文档中的 connector
(既可以连接数据源,也能发送到某个地方存储起来)。
常用的存储 sink
有 Kafka
、Apache Cassandra
、Elasticsearch
、RabbitMQ
、Hadoop
等。与前面一样,可以通过扩展 RichSinkFunction
进行自定义存储的逻辑。
性能比较
例如 Hadoop
、Storm
或 Spark
,与这些优秀的前辈们进行比较,对比性能的高低,如果选择使用 Flink
,必须得比以前的开发方便和性能好。
由于之前没有使用过这些大数据框架,所以测评数据可以参考了这两篇:
- Flink实时计算性能分析 https://ververica.cn/developers/shishijisuan/
- 流计算框架 Flink 与 Storm 的性能对比 https://ververica.cn/developers/stream-computing-framework/
下面简单列出它俩的吞吐量和作业延迟的比较
上图的数据源是 Kafka Source
,蓝色是 Storm
,橙色是 Flink
,在一个分区 partition
情况下,Flink
吞吐约为 Storm
的 3.2 倍;而在 8 个分区情况下,性能提高到 4.6 倍。
上图采用的的 outTime-eventTime
作为延迟,可以看出,Flink
的延迟还是比 Storm
的要低。
管理方式 JobManager、TaskWorker
上面是官方示意图,阐述了 Flink
提交作业的流程,应用程序 Flink Program
、JobManage
和 TaskManager
之间的关系。
上面是我对它的理解,个人觉得 zhisheng
大佬写的更加详细,可以参考这篇文章:http://www.54tianzhisheng.cn/2018/10/13/flink-introduction/
高可用 HA、状态恢复
High Availablity
是个老生常谈的话题了,服务难免会遇到无法预测的意外,如何在出现异常情况下并尽快恢复,继续处理之前的数据,保证一致性,这是个考量服务稳定性的标准。
Flink
提供了丰富的状态访问(例如有 List
、Map
、Aggregate
等数据类型),以及高效的容错机制,存储状态 State
,然后通过存储了状态的 Checkpoint
和 Savepoint
来帮助应用进行快速恢复。
详细请参考这两篇:
- Apache Flink 零基础入门(七):状态管理及容错机制 https://ververica.cn/developers/state-management/
- Apache Flink状态管理和容错机制介绍 https://ververica.cn/developers/introduction-to-state-management-and-fault-tolerance/
社区生态
真的是十分敬仰发明优秀框架的团队,也十分敬佩每一个为技术做贡献的参与者,所以每次找到相关的资料都跟发现宝藏一样。
下面罗列一下目前找到的资料:
Flink
官网:https://ci.apache.org/projects/flink/flink-docs-release-1.9/Vererica
国内牛人的分享:https://ververica.cnGithub 项目
可以关注一下提的问题和阿里分支Blink
:https://github.com/apache/flinkzhisheng
个人学习的流程是跟着他的文章走了一遍,然后遇到不懂的继续深入学习和了解:http://www.54tianzhisheng.cn/tags/Flink/wuchong
这位大佬是从 16 年就开始研究Flink
,写的文章很有深度,想要详细了解Flink
,一定要看它的文章!:http://wuchong.me/categories/Flink/
从上面的资料可以看出,Flink
的社区慢慢从小众走向大众,越来越多人参与。
基础知识点
运行环境如下:
“OS : Mac
Flink Version : 1.9
IDE : IDEA
Java Version : 1.8
上图是我在学习过程中整理的一些知识点,之后将会根据罗列的知识点慢慢进行梳理和记录~
4. 总结:未来的计算方式
从调研的结果中能看出,无论从性能、接口编程和容错上,Flink
都是一个不错的计算引擎。github
拥有 1w 多个 star
,这么多人支持以及阿里巴巴的大力推广,还有在 2019.09 参加的云栖大会,演讲嘉宾对 Flink
的展望
Apache Flink 已经是非常优秀和成熟的流计算引擎
Apache Flink 已经成为优秀的批处理引擎的挑战者
继续挖掘 Apache Flink 在 OLAP 数据分析领域的潜力,使其成为优秀的数据分析引擎
直觉相信,Flink
的发展前景不错,希望接下来与大家分享和更好的去学习它~
参考资料
- Flink 从 0 到 1 学习 —— Apache Flink 介绍
- Apache Flink 是什么?
- Apache Flink 零基础入门(一&二):基础概念解析
- 为什么说流处理即未来?
- Apache Flink 零基础入门(七):状态管理及容错机制
- Apache Flink状态管理和容错机制介绍
欢迎加入我们的知识星球,一起成长,交流经验。加入方式,长按下方二维码噢
最后,我想重复一句话:选择和一群优秀的人一起成长,你成长的速度绝对会不一样!