服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - MySQL Flink Watermark实现事件时间处理的关键技术

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

2023-05-09 14:04奔跑如风 Mysql

Flink Watermark是Flink流处理框架中实现事件时间处理的关键技术之一。它是通过一种机制来解决数据乱序和延迟的问题,使得Flink可以在处理迟到的数据时保证结果的准确性。Flink Watermark可以在数据流中插入一个时间戳,将数据流转化

1.概述

生活中有种场景:

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

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

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

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq331570870/article/details/130189867

延伸 · 阅读

精彩推荐
  • MysqlMySQL开启慢查询日志功能的方法

    MySQL开启慢查询日志功能的方法

    今天小编就为大家分享一篇关于MySQL开启慢查询日志功能的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小...

    CODETC1872020-09-14
  • Mysql解决Navicat远程连接MySQL出现 10060 unknow error的方法

    解决Navicat远程连接MySQL出现 10060 unknow error的方法

    这篇文章主要介绍了解决Navicat远程连接MySQL出现 10060 unknow error的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    Cheney.rain4852020-12-20
  • MysqlMySQL如何优雅的删除大表实例详解

    MySQL如何优雅的删除大表实例详解

    这篇文章主要给大家介绍了关于MySQL如何优雅的删除大表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值...

    easydba11572021-03-25
  • MysqlMySQL主从同步延迟的原因及解决办法

    MySQL主从同步延迟的原因及解决办法

    今天小编就为大家分享一篇关于MySQL主从同步延迟的原因及解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟...

    BrickCarrier4902020-09-17
  • Mysqlmysql 性能的检查和调优方法

    mysql 性能的检查和调优方法

    我一直是使用mysql这个数据库软件,它工作比较稳定,效率也很高。 ...

    mysql教程网5382019-10-27
  • MysqlMySQL中使用自定义变量 编写偷懒的UNION示例

    MySQL中使用自定义变量 编写偷懒的UNION示例

    以下是对MySQL中使用自定义变量,编写一个UNION的示例进行了详细的介绍,需要的朋友可以过来参考下 ...

    MYSQL教程网5052020-01-06
  • MysqlMySql安装与使用图文教程【推荐】

    MySql安装与使用图文教程【推荐】

    mysql是一种关联数据库管理系统,在程序开发中应用非常广泛,下面通过本文给大家介绍mysql安装与使用教程,感兴趣的朋友一起学习吧 ...

    浅滩中的鱼儿4742020-06-07
  • MysqlMySQL 查询 并集、交集、差集方式

    MySQL 查询 并集、交集、差集方式

    这篇文章主要介绍了MySQL 查询 并集、交集、差集方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    AI_SupplyChain11982023-02-09