flink的datastream必须掌握的内容

Posted 浪尖聊大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flink的datastream必须掌握的内容相关的知识,希望对你有一定的参考价值。

flink作为目前比较火的流处理引擎,学好还是很有必要的,但是很多人喜欢问浪尖flink会不会超越spark,我觉得短期内还是不会,而且spark 批处理领域还是很高效靠谱的。但是作为大数据开发者,spark和flink并不是必须二选一的,而是都要掌握,所以也不用再问浪尖,关于是否直接跳过spark 直接学习flink这类问题了,没意义。

flink的处理模型可以分为基于事件驱动的处理和基于时间的处理模型,基于时间的处理模型又可以分为基于事件时间和处理时间(注入时间就是一种特殊的事件时间)。下面我们就来概述一下,flink的DataStream我们应该学习哪些内容。

1.runtime

必须要先非常了解flink的runtime机制,拓扑结构相关的如并行度设置,task划分原则,task链式原理,slot共享机制等。

关于flink的runtime可以参考浪尖前面的文章


要理解这个其实可以参考Spark Streaming和Structured Steaming的运行模型和flink的区别。可以参考


这样便于我们了解flink内部运行原理,数据流动方式,shuffle机制,状态管理等,有助于数据倾斜调优,并行度设置,监控告警系统设计。最终才能做好一个比较稳定的应用程序。

2.事件处理

事件驱动处理模型,这个是实时处理的典型代表,就这点来说spark的流处理引擎确实比不上,因为其是基于处理时间的微批处理(当然,structured Streaming也支持基于事件时间的处理模型)。

对于flink的事件处理来说,除了前面所说的runtime,还要搞清楚flink datastream事件时间机制,watermark生成器,并行度原理,shuffle划分,数据流动原理,状态管理及超时key状态删除等这几个非常重要的内容。这样便于理解数据在flink运行时内部流动过程,状态在flink自任务存储的过程,然后数据倾斜与否,状态过期删除及主要是数据倾斜及状态管理吧,这个是flink任务调优的。

当然,flink还是有很多比较骚的操作的,比如下面几篇文章:

  1.  -可以实现数据分流处理。

  2.  -迭代计算处理。

  3.  -

    也即是process这类底层的api,可以对状态及时间进行更精细的草走,甚至可以自己实现自己的会话窗口。

  4.  -异步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窗口处理机制可以参考下面两个目录里的案例代码:

  1. org.datastream.trigger

  2. org.datastream.watermark

  3. org.datastream.windows

对于join操作,目前flink不支持datastream与静态数据集的join操作,普通的窗口join可以参考下面源码

flink的datastream必须掌握的内容

想要与静态数据集的join,可以实现同步和异步的join操作,浪尖这里实现了同步基于flatmap的,异步的基于异步IOjoin操作,基本满足企业开发的需求。

flink的datastream必须掌握的内容

Sideoutput侧输出,这个可以实现数据分流的功能,也是非常好用,主要是在处理延迟数据和普通数据分流的时候使用。

flink的datastream必须掌握的内容

迭代输出,主要是分批处理和流处理的迭代输出。代码案例总共三个,实际上机器学习哪些lib包里有更多。

flink的datastream必须掌握的内容

Source主要是kafkasink实现了三种redismysqlhbase,这三个比较常用。

还有比较重要的配置,比如checkpoint,时间戳分配器,事件时间,处理时间,自动故障恢复等等比较实用的需求。


现在分享了原理及案例,详细的讲解视频正在录制,欢迎大家加入浪尖知识星球

以上是关于flink的datastream必须掌握的内容的主要内容,如果未能解决你的问题,请参考以下文章

4.Flink入门案例前置说明准备环境代码实现-DataSet-了解DataStream--匿名内部类--处理批DataStream-匿名内部类-处理流LambdaOn-Yarn-掌握

数据湖(十七):Flink与Iceberg整合DataStream API操作

如何提供 Apache Flink DataStream

Flink 源码解读系列 DataStream 窗口 Window 实现

Flink 源码解读系列 DataStream 窗口 Window 实现

Flink学习之DataStream API(python版本)