美文网首页
Flink_四大基石windows && Time

Flink_四大基石windows && Time

作者: Eqo | 来源:发表于2022-08-31 17:49 被阅读0次

Flink 流式计算引擎:四大基石
Window窗口和Time时间
基于时间窗口计算,尤其是事件时间窗口,其中滚动Tumbling窗口和滑动Sliding窗口
State状态和Checkpoint检查点
处理数据时,使用到前面计算结果,将其存储到State中,称之为State
定期将程序中状态数据进行保存,称之为Checkpoint(程序)或Savepoint(人为)

======================================================================================

1、Window 窗口计算
1) 将流式数据划分为一批次一批次,对每批次数据进行处理分析
每批次:窗口window
对每批次数据处理称之为窗口计算
【Window 窗口时流式计算到批处理一个桥梁】
2) 核心点:
第1点:窗口分配器
WindowAssinger,将流中数据分配到Window中(如何将流中数据划分为Window窗口)
第2点:窗口函数
WindowFunction,对窗口中数据进行计算
3) Window窗口类型
第1种方式:时间窗口TimeWindow(start和end)
滚动时间窗口(翻滚时间窗口)
size = slide,流中数据仅仅被分配到1个窗口中,数据不会被重复计算
【使用最多】
滑动时间窗口
size != slide,通常size > slide,流中数据可能被分配到多个窗口中,数据被重复计算
【绝大多数场景中,不允许数据丢失计算,可以重复计算】
第2种方式:计数窗口CountWindow
滚动计数窗口和滑动计数窗口
第3种方式:会话窗口SessionWindow
基于时间会话窗口(start和end)
设置会话时间间隔gap,某个数据到达之后,超过设置时间间隔没有后续数据的到达,将前面的数据放在一个惶恐
4) Window API:2种类型
第1类:KeyedStream Window API
将数据流指定key分组,再进行窗口及思源
datastream.keyBy().window().apply/process
第2类:DataStream Window API
直接对数据流进行窗口计算
datastream.windowAll.apply/process
5) 调用WindowStream中apply转换算子,对窗口数据计算
如果是KededStream分组流设置窗口
WindowFunction 窗口函数接口,有4个泛型参数:IN,OUT,Key,Window
如果是DataStream数 据流设置窗口
AllWindowFunction 窗口函数接口,有3个泛型参数:IN,OUT,Window

2、Time 时间语义
1) 最初分为三种语义
第1种语义:EventTime 事件时间
数据产生的时间,嵌入在数据的字段中,比如订单数据的订单时间
第2种语义:InjectionTime 摄入时间
表示流式流式计算程序中数据源Source获取数据的时间
第3种语义:ProcessingTime 处理时间
表示流式计算程序处理数据的时间
2) flink 1.11版本,变为2种语义
EventTime和InjectionTime
【实际Job运行时,InjectionTime几乎与ProcessingTime一样的,所以在API中,只提供事件时间和处理时间窗口划分,到flink 新版本中,为了简化理论,直接将摄入时间去除。】
3) 事件时间语义最为关键
在实际开发中,当设置时间窗口计算时,往往几乎都是基于事件时间设置窗口计算
滚动事件时间窗口TumblingEventTimeWindow
滑动事件时间窗口SlidingEventTimeWindow
事件时间会话窗口EventTimeSessionWindow

    如果是处理时间窗口,诞生出3个类型窗口
        滚动处理时间窗口TumblingProcessingTimeWindow
        滑动处理时间窗口SlidingProcessingTimeWindow 
        处理时间会话窗口EventProcessingSessionWindow          
4) 如果基于事件时间窗口,设置开发时步骤
    step1. 提取数据中事件时间,转换为Long类型
        表示告知Job每条数据事件时间,就可以将数据划分到对应窗口中
    step2. 设置窗口时,使用基于EventTime事件时间窗口
        EventTimeWindow

3、Flink Window窗口计算:基于事件时间窗口时就按
在实际数据收集采集过程中,由于网络延迟等故障原因,导致数据先产生后到达,有的数据迟到很久很久,此时少数数据乱序
理想情况:
1 2 3 4 5 6 7
事件情况:
1 2 4 3 6 5 7

1) 默认方案:
    当数据到达时,所在窗口已被触发计算,并且销毁掉,此时直接丢弃数据

2) 方案1:数据乱序或延迟时,依然被计算
    第1种方式:Watermark 水位线机制
        【让窗口计算时间,等一等,比如等待50ms,再进行计算,此时可能等待窗口中乱序数据达到】
        a. 本质:
            给数据流中每条数据加上时间戳timestamp,等于数据事件时间 - 允许最大乱序时间
        b. 功能:
            触发窗口计算,watermark-timestamp >= window-time 

    第2种方式:AllowedLateness 
        【当窗口数据触发计算以后,不要立即销毁窗口数据,保存到内存中一段时间,在时间范围内,窗口中延迟数据到达,依然触发窗口计算】


3) 方案2:迟到数据直接放入到侧边流中,后续单独处理
    sideOutput

======================================================================================
阿里巴巴,自从双11以后,实时大屏统计,技术变更:
2017年之前:JStorm(Apache Storm)
|
|
2017年开始:Blink(Apache Flink)
|
|
主要原因:
Apache Flink 流式计算时,属于状态计算,并且可以将状态自动保存,便于容灾恢复
端到端精确性一次语义

======================================================================================
实时项目面试题:
[业务数据:每秒产生1800条数据,请问大数据集群规模怎么样?,如何规划呢?]
集群机器多少
每台机器配置如何(CPU CORE、内存Memory和Disk 硬盘)

======================================================================================
Flink State状态:
【Apache Flink® — Stateful Computations over Data Streams】
1. 状态是什么
State状态,指的是Job作业运行时,计算数据过程中,存储中间临时值,下一条数据处理时需要使用
比如词频统计WordCount
flink -> 1
flink |
flink -> 2 = 以前词频1 + 当前词频1 ,求和计算

2. 类型划分:
    第1类:Operator State 算子状态
        Flink Stream Job -> Source Operator、Transformation Operator、Sink Operator 
                                                        |
                                            所有算子操作,都可以有状态
        常常作用于:Source 数据源
            比如从Kafka 队列topic中消费数据,3个分区数据消费,启动3个SubTask子任务消费
                每次数据消费以后,需要保存消费偏移量,以便下次继续消费
                                |
                        可以使用状态存储偏移量
        【每个Operator 算子实例,存储一个状态值State】
    
    第2类:KeyedState 键控状态
        KeyedStream分组流中每个Key都有一个状态,此时称为Key对应的状态为键控主干太
            比如词频统计WordCount中,每个单词都有一个状态State,存储对应的词频
    
3. 存储数据结构
    单值存储:ValueState
    存储多个值:ListState,相当于1个列表
    存储KV集合:MapState,相当于Map集合映射或字典
    广播状态,底层依然是map集合:BroadcastState
    单值计算状态:
        ReducingState、AggregatingState、FoldingState

4. 案例:KeyedState,键控状态案例
    分组后,处理每组中的数据时,定义状态,保存计算中间结果值
    实现功能:max算子功能,对数据流DataStream,指定分组key后,对每个组内数据获取指定字段的最大值

相关文章

  • Flink_四大基石windows && Time

    Flink 流式计算引擎:四大基石Window窗口和Time时间基于时间窗口计算,尤其是事件时间窗口,其中滚动Tu...

  • Flink_四大基石-state && Checkpoint

    一 state 1. 什么是 状态 状态是算子处理数据的中间结果,或者记录的历史数据状态的使用 , 取决于 我整...

  • Flink_window窗口计算如何解决乱序,延迟,迟到数据问题

    Flink四大基石 window窗口 Time时间 Status状态 Checkpoint检查点 1.窗口Wind...

  • 零抗拒的销售来自于爱

    ——对《四大基石成就卓越导师》的感想 听了冀丽君老师的《四大基石成就卓越导师》这堂课,感觉学到了很多东西。...

  • 学习营养师之后,让你成为高质量的吃货

    全面建成小康社会 离不开全民健康 全民健康以四大基石为基础 健康四大基石以 “合理膳食”为首要 营养(食疗)师是居...

  • 健康理念

    健康的四大基石 赢得健康并不困难,只要站在四块“基石”上,健康便在掌握之中。 ...

  • 科学减肥妙招

    世界卫生组织给出健康四大基石:合理膳食,适当运动,充足睡眠,良好的心态。 从以上四大基石,我们发现,无论是什么样子...

  • 健康四大基石

    健康四大基石平衡饮食 适量运动 戒烟限酒 心理健康 健康四大基石是指“第一,合理的膳食;第二,适量的运动;第三,平...

  • 健康

    四四秘诀——即四大基石和四个最好。四大基石是合理膳食、适量运动、戒烟限酒、心理平衡;四个最好是最好的医生是自...

  • python windows idle time

    背景:一般Windows idle time的获取都是通过调用Windows API GetLastInputIn...

网友评论

      本文标题:Flink_四大基石windows && Time

      本文链接:https://www.haomeiwen.com/subject/bikbgrtx.html