这篇文章将为大家详细讲解有关flink的DataStream应该学习哪些内容,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
flink作为目前比较火的流处理引擎,学好还是很有必要的,但是很多人喜欢问浪尖flink会不会超越spark,我觉得短期内还是不会,而且spark 批处理领域还是很高效靠谱的。但是作为大数据开发者,spark和flink并不是必须二选一的,而是都要掌握,所以也不用再问浪尖,关于是否直接跳过spark 直接学习flink这类问题了,没意义。
flink的处理模型可以分为基于事件驱动的处理和基于时间的处理模型,基于时间的处理模型又可以分为基于事件时间和处理时间(注入时间就是一种特殊的事件时间)。
1.runtime
必须要先非常了解flink的runtime机制,拓扑结构相关的如并行度设置,task划分原则,task链式原理,slot共享机制等。
关于flink的runtime可以参考浪尖前面的文章
结合Spark讲一下Flink的runtime
要理解这个其实可以参考Spark Streaming和Structured Steaming的运行模型和flink的区别。可以参考
Spark Streaming VS Flink
Structured Streaming VS Flink
这样便于我们了解flink内部运行原理,数据流动方式,shuffle机制,状态管理等,有助于数据倾斜调优,并行度设置,监控告警系统设计。最终才能做好一个比较稳定的应用程序。
2.事件处理
事件驱动处理模型,这个是实时处理的典型代表,就这点来说spark的流处理引擎确实比不上,因为其是基于处理时间的微批处理(当然,structured Streaming也支持基于事件时间的处理模型)。
对于flink的事件处理来说,除了前面所说的runtime,还要搞清楚flink datastream的事件时间机制,watermark生成器,并行度原理,shuffle划分,数据流动原理,状态管理及超时key状态删除等这几个非常重要的内容。这样便于理解数据在flink运行时内部流动过程,状态在flink自任务存储的过程,然后数据倾斜与否,状态过期删除及主要是数据倾斜及状态管理吧,这个是flink任务调优的。
当然,flink还是有很多比较骚的操作的,比如下面几篇文章:
flink的神奇分流器-sideoutput -可以实现数据分流处理。
Flink迭代操作末文-迭代流 -迭代计算处理。
flink一次对整个窗口进行聚合操作-ProcessWindowFunction -
也即是process这类底层的api,可以对状态及时间进行更精细的草走,甚至可以自己实现自己的会话窗口。
Flink异步IO第一讲 -异步IO 可以实现更加高效的维表join操作。
这些小技巧还是很有必要的掌握的。
3. 窗口函数
主要是这个分为基于事件时间的窗口函数和基于处理时间的窗口函数。窗口函数又分为会话窗口函数,滑动时间窗口,滚动时间窗口。更骚的操做是更底层的窗口处理函数及窗口处理机制也即是ProcessFunction和ProcessWindowFunction,便于我们获取更深层次的状态和时间。
剩下的还有就是窗口的join操作:
滚动窗口join
滑动窗口join
会话窗口join
inerval join
有事件时间必然有事件延迟处理,如何处理基于事件时间的窗口函数延迟事件这个是令人头疼的问题。当然,对于编码来说还是可以很好的对延迟事件进行处理的,比如结合侧输出,watermark,延迟时间等。
4.边缘生态
常用的flink边缘生态,数据源是kafka,批处理的话是hdfs上数据,然后sink是hbase,mysql,hbase,mongodb。
5.实现案例
下面,浪尖在星球里分享的相关源码,有兴趣的球友可以去参考阅读一下:
org.datastream.KafkaProducer
该类主要是用来生产测试数据用的。
watermark,自定义处理trigger窗口处理机制可以参考下面两个目录里的案例代码:
org.datastream.trigger
org.datastream.watermark
org.datastream.windows
对于join操作,目前flink不支持datastream与静态数据集的join操作,普通的窗口join可以参考下面源码
想要与静态数据集的join,可以实现同步和异步的join操作,浪尖这里实现了同步基于flatmap的,异步的基于异步IO的join操作,基本满足企业开发的需求。
Sideoutput侧输出,这个可以实现数据分流的功能,也是非常好用,主要是在处理延迟数据和普通数据分流的时候使用。
迭代输出,主要是分批处理和流处理的迭代输出。代码案例总共三个,实际上机器学习哪些lib包里有更多。
Source主要是kafka,sink实现了三种redis,mysql,hbase,这三个比较常用。
还有比较重要的配置,比如checkpoint,时间戳分配器,事件时间,处理时间,自动故障恢复等等比较实用的需求。
关于“flink的DataStream应该学习哪些内容”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。