当前位置: 首页 > news >正文

Flink-时间流与水印

时间流与水印

  • 一、背景
  • 二、时间语义
    • 1.事件时间(event time)
    • 2.读取时间(ingestion time)
    • 3.处理时间(processing time)
  • 三、水印-Watermarks
    • 1.延迟和正确性
    • 2.延迟事件
    • 3.顺序流
    • 4.无序流
    • 5.并行流
  • 四、Windows
    • 1.窗口维度分类
      • 1.1 时间窗口
      • 1.2 数量窗口
    • 2.窗口规则分类
      • 2.1 滚动窗口
      • 2.2 滑动窗口
      • 2.3 会话窗口
      • 2.4 全局窗口
    • 3.内置窗口
    • 4.窗口函数
      • 4.1 增量计算
      • 4.2 全量计算
  • 总结
    • 参考链接


一、背景

Flink需要支持流重放并且还要不影响结果,因此不能仅仅支持计算时间还要支持事件时间。事件流在传输和处理过程耗时不同,导致下游节点接受到的数据流可能是乱序的。由于程序不能无限制等待所有事件到达之后再处理,因此需要决定何时停止等待前序事件,这就是Watermarks的作用。
Flink中流入的数据分为三种类型:事件流、watermark和checkpoint barriers。其中watermark和checkpoint barriers都是flink根据一些策略生产的。
在这里插入图片描述

二、时间语义

Flink支持三种时间语义:

1.事件时间(event time)

事件产生的时间,记录的是设备生产或者存储事件的时间。

2.读取时间(ingestion time)

Flink读取事件时记录的时间

3.处理时间(processing time)

Flink 具体算子处理事件的时间

三、水印-Watermarks

Watermarks主要是定义何时停止等待较早事件。在Flink中采用的是固定延迟策略,也就是假定所有的事件都是有一个最大延迟。

1.延迟和正确性

开发人员需要在延迟和结果正确性作出权衡。如果Watermarks的边界时间设置的相对较短,那么会快速产生一个可能不太准确的结果。如果Watermarks的边界时间设置的小队较长,那么会延迟很久的情况下产生一个相对比较准确的结果。

2.延迟事件

如果算子接受到了Watermark(t) ,则表示事件流的时间已经到达了 t; watermark 之后的时间戳 ≤ t 的任何事件都被称之为延迟事件。

3.顺序流

在顺序流中,watermark也是顺序的分布在整个事件流中,并且是周期性出现的。
在这里插入图片描述

4.无序流

针对无序流由于事件不是按照时间戳顺序出现,所以watermark非常重要。watermark到达算子就表明这个时间戳之前的所有事件都已经到达了此算子,此算子就可以进行相应计算。并且在操作完成后会生成一个新的watermark以供下游算子参考。
在这里插入图片描述

5.并行流

watermark是在数据源输入时产生的,各个分区输入是互相独立的。当watermark到达某个算子时,算子会产生一个新的watermark。如果算子有多个输入流,算子会输出输入流中事件时间的最小值。
在这里插入图片描述

四、Windows

Flink在窗口的场景上处理有非常丰富的api,应用过程中经常遇到分析一个时间段内的浏览量、最高量、平均值等场景。

1.窗口维度分类

对于无界数据流进行一些数据统计不现实,所以需要在一定的窗口内对数据进行统计和分析。按照划分维度可以分为时间窗口和数量窗口。
在这里插入图片描述

1.1 时间窗口

时间窗口就是以时间点来定义窗口的开始和结束,在窗口开放期间符合条件的事件会进入窗口,在窗口结束前会对窗口内的事件进行计算和处理。

1.2 数量窗口

数量窗口就是以事件个数来定义窗口的开始和结束,在窗口开放期间事件会进入窗口,在窗口结束前会对窗口内的事件进行计算和处理。

2.窗口规则分类

除了维度窗口外,每个窗口的划分还有更细致的划分:滚动窗口( Tumbling Window )、滑动窗口( Sliding Window )、会话窗口( Session Window ),以及全局窗口( Global Window )。

2.1 滚动窗口

滚动窗口是指固定大小的窗口,对数据流按时间或者事件个数进行均匀的划分。窗口之间是首尾想接的没有重叠。比如计算每分钟页面浏览量。

2.2 滑动窗口

滑动窗口大小也是固定的,但是滑动窗口首尾不是相接的有一定重叠。比如计算每10秒计算前一分钟的页面浏览量。

2.3 会话窗口

会话窗口就是基于会话来对数据进行分组。

2.4 全局窗口

全局窗口会把相同key的所有数据放到同一个窗口中。

3.内置窗口

Flink计算窗口主要有两个抽象概念:窗口分配器和窗口函数,窗口分配器主要是指如果将事件分配到窗口,窗口函数是指如何对窗口内的事件进行处理。

Flink内置窗口分配器如下:
在这里插入图片描述
基于时间的窗口即可以根据事件时间也可以根据处理时间来划分窗口,基于计算的窗口只有在事件数量达到要求才会触发计算。

4.窗口函数

窗口函数可以进行增量计算和全量计算。

4.1 增量计算

开发者需要继承ReduceFunction或AggregateFunction。当每个事件被加到窗口时,都会调用 ReduceFunction 或者 AggregateFunction 来增量计算。

4.2 全量计算

开发者需要继承ProcessWindowFunction。当触发窗口时,会调用ProcessWindowFunction做全量计算。

总结

主要是对时间流和水印产生背景和作用进行了介绍,对窗口分类和窗口函数进行初步了解。


参考链接

1.Flink实时流
2.Flink流式分析

相关文章:

Flink-时间流与水印

时间流与水印 一、背景二、时间语义1.事件时间(event time)2.读取时间(ingestion time)3.处理时间(processing time) 三、水印-Watermarks1.延迟和正确性2.延迟事件3.顺序流4.无序流5.并行流 四、Windows1.…...

BiLSTM-CRF的中文命名实体识别

项目地址:NLP-Application-and-Practice/11_BiLSTM-ner-bilstm-crf/11.3-BiLSTM-CRF的中文命名实体识别/ner_bilstm_crf at master zz-zik/NLP-Application-and-Practice (github.com) 读取renmindata.pkl文件 read_file_pkl.py # encoding:utf-8import pickle# …...

paddle detection 训练参数

#####################################基础配置##################################### # 检测算法使用YOLOv3,backbone使用MobileNet_v1,数据集使用roadsign_voc的配置文件模板,本配置文件默认使用单卡,单卡的batch_size=1 # 检测模型的名称 architecture: YOLOv3 # 根据…...

用bat制作图片马——一句话木马

效果图 代码 ECHO OFF TITLE PtoR MODE con COLS55 LINES25 color 0A:main cls echo.当前时间:%date% %time% echo.欢迎使用图片马制作工具 echo.请确保图片和php在同一路径下 echo.echo 请将图像文件拖放到此窗口并按 Enter: set /p "imagefile&q…...

json_encode() 返回 false

当 json_encode() 返回 false 时,表示 JSON 编码过程失败。这通常是因为要编码的数据包含了无效的 UTF-8 字符,而默认情况下 json_encode() 会对无效的 UTF-8 字符进行严格的处理 通过添加 JSON_INVALID_UTF8_IGNORE 选项,你告诉 json_encod…...

Android-Jetpack--Hilt详解

善学者尽其理,善行者究其难 一,定义 Hilt是针对dagger2的二次封装依赖注入框架,至于什么是依赖注入,在Android开源框架--Dagger2详解-CSDN博客 中已经讲解,建议大家先去了解Dagger2之后,再来看Hilt。这样就…...

Docker 下载加速

文章目录 方式1:使用 网易数帆容器镜像仓库进行下载。方式2:配置阿里云加速。方式3:方式4:结尾注意 Docker下载加速的原理是,在拉取镜像时使用一个国内的镜像站点,该站点已经缓存了各个版本的官方 Docker 镜…...

1091 Acute Stroke (三维搜索)

题目可能看起来很难的样子,但是看懂了其实挺简单的。(众所周知,pat考察英文水平) 题目意思大概是:给你一个L*M*N的01长方体,求全为1的连通块的总体积大小。(连通块体积大于T才计算在内&#xf…...

java elasticsearch 桶聚合(bucket)

Elasticsearch指标聚合,就是类似SQL的统计函数,指标聚合可以单独使用,也可以跟桶聚合一起使用,下面介绍Java Elasticsearch指标聚合的写法。 实例: // 首先创建RestClient,后续章节通过RestClient对象进行…...

【人生苦短,我学 Python】(4)Python 常用内置数据类型 II —— 序列数据类型(str、tuple、list、bytes和bytearray)

目录 简述 / 前言1. str 数据类型(字符串)1.1 str对象1.2 str对象属性和方法1.3 字符串编码1.4 转义字符1.5 字符串的格式化 2. tuple 数据类型(元组)2.1 创建元组对象 3. list 数据类型(列表)3.1 创建列表…...

Android 9.0 系统默认显示电量百分比

Android 9.0 系统默认显示电量百分比 近来收到项目需求需要设备默认显示电量百分比,具体修改参照如下: /frameworks/base/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java private void updateShowPercent() {final boolean showin…...

原神:夏洛蒂是否值得培养?全队瞬抬治疗量不输五星,但缺点也很明显

作为四星冰系治疗角色,夏洛蒂的实战表现可以说相当让人惊喜。不仅有相当有意思的普攻动作以及技能特效,而且她还有治疗和挂冰等功能性。下面就来详细聊聊夏洛蒂是否值得培养。 【治疗量让人惊喜,但也有缺点】 说实话,在使用夏洛蒂…...

Sublime text 添加到鼠标右键菜单,脚本实现

Sublime text 添加到鼠标右键菜单 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\SublimeText] "Open with Sublime Text" "Icon""D:\\Program Files\\Sublime Text\\sublime_text.exe,0" [HKEY_CLASSES_ROOT\*\shell\Subl…...

【算法】离散化 与 哈希 之间的区别

离散化(Discretization)和哈希(Hashing)是两种不同的数据处理技术,用于处理不同类型的问题。 1. 离散化(Discretization): 离散化是将一组连续的数据映射到有限个离散值的过程。主要…...

Android : GPS定位 获取当前位置—简单应用

示例图: MainActivity.java package com.example.mygpsapp;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Manif…...

目标检测——R-CNN算法解读

论文:Rich feature hierarchies for accurate object detection and semantic segmentation 作者:Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik 链接:https://arxiv.org/abs/1311.2524 代码:http://www.cs.berke…...

基于傅里叶变换的运动模糊图像恢复算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、傅里叶变换与图像恢复 4.2、基于傅里叶变换的运动模糊图像恢复算法原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 %获取角度 img…...

使用mock.js模拟数据

一、安装mock.js npm i mockjs 二、配置JSON文件 我们创建一个mock文件夹,用于存放mock相关的模拟数据和代码实现。 我们将数据全部放在xxx.json文件夹下,里面配置我们需要的JSON格式的数据。 注意:json文件中不要留有空格,否则…...

Android Handler同步屏障:深入解析

Android Handler同步屏障:深入解析 在Android开发中,Handler和MessageQueue是处理线程间通信的重要组件。除了常见的消息发送和处理功能,Handler还提供了一个高级特性:同步屏障。本文将深入探讨这一特性,包括它的工作…...

HT for Web (Hightopo) 使用心得(5)- 动画的实现

其实,在 HT for Web 中,有多种手段可以用来实现动画。我们这里仍然用直升机为例,只是更换了场景。增加了巡游过程。 使用 HT 开发的一个简单网页直升机巡逻动画(Hightopo 使用心得(5)) 这里主…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

接口测试中缓存处理策略

在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【位运算】消失的两个数字(hard)

消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

从零手写Java版本的LSM Tree (一):LSM Tree 概述

🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...