MySQL Flink Watermark实现事件时间处理的关键技术

 更新时间:2023年05月09日 09:44:46   作者:奔跑如风  
Flink Watermark是Flink流处理框架中实现事件时间处理的关键技术之一。它是通过一种机制来解决数据乱序和延迟的问题,使得Flink可以在处理迟到的数据时保证结果的准确性。Flink Watermark可以在数据流中插入一个时间戳,将数据流转化为具有时间维度的数据集合

1.概述

生活中有种场景:

车辆进入隧道,信号不好,出了隧道后,信号就正常了。

正常情况下,车辆进入隧道后,如果车辆正常,没有事故,会正常驶出隧道。

在正常的隧道行驶过程中,可能会因为信号的原因,导致数据没有像信号正常的时候那么快到达。

也就是说,这种情况下,数据出现了延迟。我们把这种延迟数据称之为迟到数据。

生活中,这种场景非常多,比如:车辆进入地下车库,手机欠费,网络抖动等。这都属于生活的正常情况。无法避免。

程序中,一般不会允许数据丢失。所以,我们程序会推出一些机制来保证迟到数据被正常处理。

Watermark就是用来保证正常迟到的数据被正确的处理。

Watermark,也叫水印,或者是水位线。用来处理一定程度下的延迟数据。

2.SQL案例-演示Watermark为零的情况

#1.创建表
CREATE TABLE source_table ( 
 user_id STRING, 
 price BIGINT,
 `timestamp` bigint,
 row_time AS TO_TIMESTAMP(FROM_UNIXTIME(`timestamp`)),
 watermark for row_time as row_time - interval '0' second
) WITH (
  'connector' = 'socket',
  'hostname' = 'node1', 
  'port' = '9999',
  'format' = 'csv'
);
#2.数据查询SQL
select 
user_id,
count(*) as pv,
sum(price) as sum_price,
UNIX_TIMESTAMP(CAST(tumble_start(row_time, interval '5' second) AS STRING)) * 1000  as window_start,
UNIX_TIMESTAMP(CAST(tumble_end(row_time, interval '5' second) AS STRING)) * 1000  as window_end
from source_table
group by
    user_id,
    tumble(row_time, interval '5' second);

3.SQL案例-演示Watermark不为零的情况

Watermark不为零,就有可能是两种情况:

  • 小于0,窗口会提前触发计算,这种情况在实际应用不存在,所以这里也不讨论
  • 大于0,窗口会延迟触发计算,延迟的时间就是我们设置的Watermark的值

这里,我们主要是讨论Watermark>0的情况。

#1.创建表
CREATE TABLE source_table ( 
 user_id STRING, 
 price BIGINT,
 `timestamp` bigint,
 row_time AS TO_TIMESTAMP(FROM_UNIXTIME(`timestamp`)),
 watermark for row_time as row_time - interval '2' second
) WITH (
  'connector' = 'socket',
  'hostname' = 'node1', 
  'port' = '9999',
  'format' = 'csv'
);
#2.Watermark的解释
WATERMARK FOR ts AS ts - INTERVAL '2' SECOND
这里的2,表示,数据允许延迟2秒钟到达,窗口会在(正常结束+延迟时间)后触发计算
#3.查询SQL
select 
user_id,
count(*) as pv,
sum(price) as sum_price,
UNIX_TIMESTAMP(CAST(tumble_start(row_time, interval '5' second) AS STRING)) * 1000  as window_start,
UNIX_TIMESTAMP(CAST(tumble_end(row_time, interval '5' second) AS STRING)) * 1000  as window_end
from source_table
group by
    user_id,
    tumble(row_time, interval '5' second);

到此这篇关于MySQL Flink Watermark实现事件时间处理的关键技术的文章就介绍到这了,更多相关MySQL Flink Watermark内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql如何比对两个数据库表结构的方法

    mysql如何比对两个数据库表结构的方法

    这篇文章主要介绍了mysql如何比对两个数据库表结构的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • MySQL约束和事务知识点详细归纳

    MySQL约束和事务知识点详细归纳

    在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务,下面这篇文章主要给大家介绍了关于MySQL约束和事务知识点归纳的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • mysql把一段数据变成一个临时表

    mysql把一段数据变成一个临时表

    这篇文章主要介绍了mysql把一段数据变成一个临时表,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • mysql 定时任务的实现与使用方法示例

    mysql 定时任务的实现与使用方法示例

    这篇文章主要介绍了mysql 定时任务的实现与使用方法,结合实例形式分析了MySQL定时任务的相关原理、创建及使用方法,需要的朋友可以参考下
    2019-11-11
  • 分析MySQL复制以及调优原理和方法

    分析MySQL复制以及调优原理和方法

    本篇文章给大家详细分析了MySQL复制以及调优原理和方法,并通过代码详细分析了具体操作,有需要的朋友参考下吧。
    2018-01-01
  • MySQL 1130异常,无法远程登录解决方案详解

    MySQL 1130异常,无法远程登录解决方案详解

    这篇文章主要介绍了MySQL 1130异常,无法远程登录解决方案详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 浅析mysql 定时备份任务

    浅析mysql 定时备份任务

    这篇文章主要介绍了mysql 定时备份任务的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • MySQL忘记root密码的两种解决方案

    MySQL忘记root密码的两种解决方案

    在使用MySQL数据库管理系统时,有时候会碰到忘记了root用户的密码的情况,这时候就需要找到一种解决方案来重置或者恢复root密码,本文将介绍两种常用的方法来解决这个问题,需要的朋友可以参考下
    2024-09-09
  • MySQL事务及Spring隔离级别实现原理详解

    MySQL事务及Spring隔离级别实现原理详解

    这篇文章主要介绍了MySQL事务及Spring隔离级别实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 新手入门Mysql--sql执行过程

    新手入门Mysql--sql执行过程

    MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展MySQL是开放源代码的,因此任何人都可以在 GPL的许可下下载并根据个性化的需要对其进行修改
    2021-06-06

最新评论