Flink知识点概述

flink是什么

        是一个框架和分布式处理引擎,在无边界和有边界数据流上纪念性有状态的计算

主要特性

    1.批流统一

            批处理:数据
全部访问完成后进行操作

                         有界、持久、大量,适合访问全套记录才能完成的工作,一般用于
离线统计

            流处理:
来一条数据处理一条数据

                         无界、实时,不需要操作整个系统

            无界流(Datastream):只有开始,没有结束,要以特定的顺序获取,并且获取后立即处理

            有界流(DataSet):开始结束都有,数据全部获取后执行,
可以被排序

     2.性能卓越

            高吞吐:同时处理大量数据

              低延时:快速返回结果

    3.规模计算

            支持超大状态与增量检查点机制

              状态:计算过程中需要存储的数据

              检查机制:备份

    4.生态兼容

                支持与yarn集成

                支持与kubernetes集成

                支持单机模式运行

    5.高容错

                故障自动重试

                        一致性检查点

                        保证故障场景下精确一次的状态一致性

并行度

                一个算子的子任务的个数被称为其并行度

                包含并行任务的数据流,就是并行数据流

                一个流程序的并行度,可以认为就是其所有算子中最大的并行度

设置并行度

     stream.map(word -> Tuple2.of(word, 1L)).
setParallelism(2)

     或

     
env.setParallelism(2)

窗口分类

         1)按照驱动分类

                    (1)时间窗口:时间定义起始

                    (2)计数窗口:达到指定个数

Flink知识点概述

            2)按照窗口分配数据的规则分类

                    (1)滚动窗口

                                            窗口内大小相同,不会有重叠,首尾相连 如:123,456,789

                    (2)滑动窗口

                                            窗口内大小相同,有重叠,首尾不相连 如:123,234,345

                    (3)会话窗口:基于时间定义

                                            会话超时时间,两个会话窗口之间的最小距离,窗口长度、起始时间不确定,窗口之间无关联,不重叠

                    (4)全局窗口:窗口没结束时,不会做触发计算

窗口API

            1)按键分区(Keyed Windows)

                        stream.keyBy(…).window(…)

            2)非按键分区(Non-Keyed Windows)

                        
stream.windowAll(…)

代码中窗口API的调用

            窗口操作主要有两个部分:窗口分配器(Window Assigners)和窗口函数(Window Functions)。

                stream.keyBy()

                               .window()

                               .aggregate()

时间窗口

                时间窗口的计算频次

                时间窗口的大小

                时间窗口内的数据的处理逻辑

时间窗口计算模型的处理机制

Flink知识点概述

输入数据流———–>时间窗口计算———–>输出数据流

时间语义

        事件时间(Event Time):数据产生的时间

        处理时间(Processing Time):数据真正被处理的时间

        进入Flink的时间:(Ingestion Time):每个事件将进入Flink时的时间作为时间戳

        时间语义:
是以事件时间还是处理时间进行计算 

// TODO 1.指定窗口分配器: 指定 用 哪一种窗口 — 时间 or 计数? 滚动、滑动、会话?

// 1.1 没有keyby的窗口: 窗口内的 所有数据 进入同一个 子任务,并行度值只能为1

//sensorDS.windowAll();

// 1.2 有keyby的窗口()

//sensorKS.window();每个key上都定义了一组窗口,各自独立地进行统计计算

//sensorKS.window();

基于时间

                

                滚动窗口,窗口长度10秒

sensorKS.window(TumblingProcessingTimeWindows.of(Time.seconds(10)));

                滑动窗口,长度10秒,步长2秒

sensorKS.window(SlidingProcessingTimeWindows.of(Time.seconds(10),Time.seconds(2)));

                会话窗口,超过五秒没数据,自动生成新的窗口

sensorKS.window(ProcessingTimeSessionWindows.withGap(Time.seconds(5)));

基于计数 数据条数

                窗口长度为5

sensorKS.countWindow(5);

                窗口长度为5 步长2

sensorKS.countWindow(5,2);

                全局窗口 计数窗口底层用这个 需自定义触发器使用

                        sensorKS.window(GlobalWindows.create())

水位线(Watermark)(水印)

        衡量事件时间进展的标记

水位线特性

                是插入到数据流中的一个
标记,可以认为是一个
特殊的数据

                主要内容是一个时间戳,
表示当前事件时间的进展

              
 
基于数据的时间戳生成的

                必须
单调递增

                设置
延迟,保证正确
处理乱序数据

一个水位线watermark(t) ,表示当前流中事件时间已达到时间戳,表示t之前的所有数据已到齐,不会有t1<=t

          有序流中的水位线:按生成的先后顺序进入流中,每条数据产生一个水位线

                                        数据量大时,每隔一段时间生成一个水位线

Flink知识点概述

          乱序流中的水位线:因网络传输延迟,使顺序改变

                                        判断是否比前面的小,小则进入,否则进入新的

          

Flink知识点概述

Flink知识点概述

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/b010aeeccf.html