2020年,在整个大数据领域,flink可算是火的一塌糊涂,不但将阿里的blink中的大部分特性merge到社区版本的flink中,使得flink 在流式计算领域可谓是一骑绝尘,让其他实时计算框架只能望其项背,目前flink在实时领域根本看不到其他的对手,同时新版本的flink又完美的兼容了hive,使得flink在离线计算方面也快马加鞭,飞速赶超,完美实现批流统一,甚至又很多人称2020年为flink的元年。
学习该框架的思路
-
学习了flink最新版本1.12,学习flink最新特性。
-
使用java语言开发,同时兼顾scala
-
理论结合实践,深入源码,不仅要搞定编程,还要知其所以然
-
结合生产中遇到的问题,能在工作中解决实际的问题
-
结合面试问题,搞定面试
一、什么是flink
二、flink的特点
-
批流统一
-
支持高吞吐,低延迟,高性能的流式处理
-
支持带有事件时间的窗口操作
-
支持有状态的exactly-once语义(处理且处理一次)
-
支持高度灵活的窗口操作,支持基于time,count,session窗口操作(spark的窗口稍微弱点)
-
支持具有backpressure功能的持续流模型
-
支持基于轻量级分布式快照实现容错(能快速同步,又能安全,出现异常,能快速恢复)
-
支持迭代计算
-
flink在jvm内部实现了自己的内存管理
-
支持程序自动优化:避免特定情况下shuffle、排序等昂贵操作,中间结果有必要进行缓存
经验总结:
公司中使用的版本通常不是最新版本,所以旧api也要同步学习,以便在公司中能得心应手。
一般学习一种框架,框架使用什么语言开发,就用哪种语言开发应用程序,方便平时学习深入研究源码
sparkstreming的状态稍微弱一点,弱很多,不是一个完美的解决方案,我们通常会把中间累加的结果放redis,mysql里面,这样的话,就很麻烦,要和外面的数据库系统交互,才能把中间结果保存起来,保证中间结果不丢,而flink非常重要的一个特性就是带状态的计算,状态管理学习起来还是有些复杂的,数据的来源有的进入消息队列里面,有的进入数据库里面,flink把它拉过来进行运算,运算的过程中可以使用分布式快照把中间的状态进行存储,可以进行容错,可以进行事件驱动的处理,可以进行pipelines的管道处理,还可以批处理,还可以做cep,复杂事件处理,将处理好的结果存储到外部的存储系统。
有很多的特性,可以进行所有的流式计算的场景,可以保证数据的一致性,原来使用sparkstreaming进行数据的额exactly once,用起来稍微复杂一点,比如,sparkstreming里面,我们把计算好的结果,和偏移量收集到drive端,然后把它在同一个事务里面写入到一个支持事务的数据库中,但是它有局限性,它的局限性就是,必须是聚合类的,要不然,把数据收集到drive端,就有可能会内存溢出,或者,数据丢失,如果是非聚合类的,还得要求吸入到支持覆盖的,支持幂等性的数据库中,比如hbase中,但是它是有局限性的,它对窗口的支持和对状态的支持,不是那么好,flink全部解决了这些问题,同时还有分层的api,灵活的部署,创建一个恢复点,低延迟,高吞吐,内存运算,目前来说,实时领域,flink做到了极致,最牛逼的。
对有限数据流和无限数据流进行有状态计算,进行高效状态进行管理 。