• Flink处理迟到的数据


    每隔3秒统计前3秒的元素个数,那么flink系统会事先在系统中划分好20(60/3)个window
    制定watermark的策略: 周期性提取watermark,默认时间为200ms,我们可以认为在1号数据被分配到window之后的200ms,flink系统就开始计算水位线了
    假设允许数据乱序的最大时间为10秒 数据开始流入flink系统
    1号数据 01:01:22---hello
    2号数据 01:01:35---flink
    在此之后 又来一条数据(迟到) 3号数据 01:01:23---later

        第一条数据流入 01:01:22---hello
    这条数据的event time是01:01:22, 那么它将会被放置到[00:00:21-00:00:24)窗口内
    (100ms后)此时水位线(Watermark)为 12 (22-10)
    Watermark(12) < WindowEndTime(24)  所以 不会触发该window的计算
    
    
        第二条数据流入 01:01:35---flink
    这条数据的event time是01:01:35, 那么它会被放置在[00:00:33-00:00:36)窗口内
    (100ms后)此时水位线(Watermark)为 25 (35-10)
    由于Watermark(25) >= WindowEndTime(24), 所以 会触发水位线(25)之前window的计算, ([21, 24))
    计算后窗口直接销毁
    
    
        第三条数据流入 01:01:23---later
    正常情况下数据应放到[00:00:21-00:00:24)窗口, 由于此窗口被销毁,所以数据被丢弃
    
    为保证数据完整性,修改 AllowedLateness 为2s  也就是窗口触发计算后2s再销毁
    (35-37流入)这条数据的event time是01:01:23, 
    那么它将会被放置到[00:00:21-00:00:24)窗口(此窗口在37时会被销毁)内
    (100ms后)此时计算水位线: 23-10=13 < Watermark=25, 所以水位线不变仍为25
    由于 Watermark(25) < WindowEndTime(24) + AllowedLateness(2),
    所以 [00:00:21-00:00:24)窗口会再次(多次)触发
    
    此时, 窗口销毁时机 Watermark >= WindowEndTime + AllowedLateness
    

    二、Flink核心概念

    参考链接(侵删): https://blog.csdn.net/believe2017slwx/article/details/79978244

    1. Flink程序三个基本构建块

    • source:数据源
    • transformations:基于数据流的一组operate操作
    • sink:数据处理结果的目的地

    2. 并行数据流

    • 在flink中,transformation是由一组operator组成,每一个operator被分割成operator subtask,同一个operator的多个 subtasks在不同的线程、不同的物理机或不同的容器中彼此互不依赖得并行执行。
    • Stream在operator有两种形式
      (1) One-to-one:类似于spark中的窄依赖
      (2) Redistributing:类似于spark中的宽依赖

    3. operator chains

    • 出于分布式程序效率考虑,Flink将前后有依赖关系的一组operator的subtask链接在一起形成operator chains。operator chain在一个线程中执行,它能减少线程之间的切换和基于缓存区的数据交换,在减少时延的同时提升吞吐量。链接的行为可以在编程API中进行指定

    4. 窗口概念

    flink可以基于窗口对在流上对数据进行聚合操作。flink支持的窗口有:

    • 时间窗口(tumbing windows(滚动窗口 不重叠),sliding windows(滑动窗口 有重叠,session windows(有空隙的活动))
    • 数据窗口(tumbing windows(滚动窗口 不重叠),sliding windows(滑动窗口 有重叠,session windows(有空隙的活动))
    • 事件窗口

    5. 时间概念

    Stream中的记录时,记录中通常会包含各种典型的时间字段,Flink支持多种时间的处理:

    • event Time(事件时间):表示事件创建时间
    • Ingestion Time(摄取时间):表示事件进入到Flink Dataflow的时间(即流处理器第一次看到这个消息的时间)
    • Processing Time(处理时间):表示某个Operator对事件进行处理事的本地系统时间(是在TaskManager节点上)

    人生之事岂能尽如人意,生活如戏,哭笑皆由人,悲喜自己定
  • 相关阅读:
    cocos3.2触摸事件接收顺序
    触摸点是否在按钮矩形内
    scrollview里container拖动显示问题
    cocos2dx 显示对象尺寸
    allocating an object of abstract class
    学习scorllview
    cocos2dx引用计数
    addchild 报错不能添加nil
    有用的宏
    一段SQL
  • 原文地址:https://www.cnblogs.com/Hephaestus/p/13616526.html
Copyright © 2020-2023  润新知