【大数据】Flink 详解(九):SQL 篇 Ⅱ

本系列包含:

  • 【大数据】Flink 详解(一):基础篇
  • 【大数据】Flink 详解(二):核心篇 Ⅰ
  • 【大数据】Flink 详解(三):核心篇 Ⅱ
  • 【大数据】Flink 详解(四):核心篇 Ⅲ
  • 【大数据】Flink 详解(五):核心篇 Ⅳ
  • 【大数据】Flink 详解(六):源码篇 Ⅰ
  • 【大数据】Flink 详解(七):源码篇 Ⅱ
  • 【大数据】Flink 详解(八):SQL 篇 Ⅰ
  • 【大数据】Flink 详解(九):SQL 篇 Ⅱ

Flink 详解(九):SQL 篇 Ⅱ

  • 96.源码中分区提交的 PartitionCommitTrigger 介绍一下?
  • 97.PartitionTimeCommitTigger 是如何知道该提交哪些分区的呢?(源码分析)
  • 98.如何保证已经写入分区的数据对下游可见的标志问题(源码分析)
  • 99.Flink SQL CEP 有没有接触过?
  • 100.Flink SQL CEP 了解的参数介绍一下?
    • 1️⃣ after match skip past last row
    • 2️⃣ after match skip to next row
    • 3️⃣ after match skip to last patternItem
    • 4️⃣ after match skip to first patternItem
  • 101.编写一个 CEP SQL 案例,如银行卡盗刷

96.源码中分区提交的 PartitionCommitTrigger 介绍一下?

在源码中,PartitionCommitTrigger 类图如下所示:

在这里插入图片描述
该类中维护了两对必要的信息:

  • pendingPartitions / pendingPartitionsState等待提交的分区 以及 对应的状态
  • watermarks / watermarksStatewatermarks(用 TreeMap 存储以保证有序)以及 对应的状态

97.PartitionTimeCommitTigger 是如何知道该提交哪些分区的呢?(源码分析)

1️⃣ 检查 checkpoint ID 是否合法。

2️⃣ 取出当前 checkpoint ID 对应的水印,并调用 TreeMap 的 headMap()clear() 方法删掉早于当前 checkpoint ID 的水印数据(没用了)。

3️⃣ 遍历等待提交的分区,调用之前定义的 PartitionTimeExtractor。比如:${year}-${month}-${day} ${hour}:00:00,抽取分区时间。如果 watermark > partition-time + delay,说明可以提交,并返回它们。

98.如何保证已经写入分区的数据对下游可见的标志问题(源码分析)

在源码中,主要涉及 PartitionCommitPolicy 类,如下图所示:

在这里插入图片描述
在这里插入图片描述

99.Flink SQL CEP 有没有接触过?

CEPComplex Event Processing):复杂事件处理,用于识别输入流中符合指定规则的事件,并按照指定方式输出。

  • 起床 ➡ 洗漱 ➡ 吃饭 ➡ 上班,一系列串联起来的事件流形成的模式。
  • 浏览商品 ➡ 加入购物车 ➡ 创建订单 ➡ 支付完成 ➡ 发货 ➡ 收货,事件流形成的模式。

通过概念可以了解,CEP 主要是 识别输入流中用户指定的一些基本规则的事件,然后将这些事件再通过指定方式输出。

如下图所示: 我们指定 “方块、圆” 为基本规则的事件,在输入的原始流中,将这些事件作为一个结果流输出来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 用户异常检测:我们指定异常操作事件为要输出的结果流。
  • 策略营销:指定符合要求的事件为结果流。
  • 运维监控:指定一定范围的指标为结果流。
  • 银行卡盗刷:指定同一时刻在两个地方被刷两次为异常结果流。

Flink CEP SQL 语法是通过 SQL 方式进行复杂事件处理,但是与 Flink SQL 语法也不太相同,其中包含许多规则。

100.Flink SQL CEP 了解的参数介绍一下?

CEP 包含的参数如下:

在这里插入图片描述

输出模式(每个找到的匹配项应该输出多少行)

  • one row per match:每次检测到完整的匹配后进行汇总输出。
  • all rows per match(Flink 暂不支持):检测到完整的匹配后会把匹配过程中每条具体记录进行输出。

running VS final 语义

  • 在计算中使用那些匹配的事件:running 匹配中,final 匹配结束。
  • define 语句中只可以使用 runningmeasure 语句中两者都可以。
  • 输出结果区别
    • 对于 one row per match,输出没区别。
    • 对于 all rows per match,输出不同。

在这里插入图片描述
在这里插入图片描述

匹配后跳转模式介绍

after match(匹配后,从哪里开始重新匹配)

  • skip to next row:从匹配成功的事件序列中的第一个事件的下一个事件开始进行下一次匹配。
  • skip past last row:从匹配成功的事件序列中的最后一个事件的下一个事件开始进行下一次匹配。
  • skip to first patternItem:从匹配成功的事件序列中第一个对应于 patternItem 的事件开始进行下一次匹配。
  • skip to last patternItem:从匹配成功的事件序列中最后一个对应于 patternItem 的事件开始进行下一次匹配。

注意:使用 skip to first / last patternItem 容易出现循环匹配问题,需要慎重。

针对上面的匹配后跳转模式分别介绍:

1️⃣ after match skip past last row

在这里插入图片描述

2️⃣ after match skip to next row

在这里插入图片描述

3️⃣ after match skip to last patternItem

在这里插入图片描述

4️⃣ after match skip to first patternItem

在这里插入图片描述

101.编写一个 CEP SQL 案例,如银行卡盗刷

通过 Flink CEP SQL 写的关于金融场景银行卡盗刷案例。

案例介绍:在金融场景中,有时会出现银行卡盗刷现象,犯罪分子利用互联网等技术,在间隔 10 分钟或者更短时间内,使一张银行卡在不同的两个地方出现多次刷卡记录,这从常规操作来说,在间隔时间很多的情况下,用户是无法同时在两个城市进行刷卡交易的,所以出现这种问题,就需要后台做出触发报警机制。

要求:当相同的 cardId 在十分钟内,从两个不同的 Location 发生刷卡现象,触发报警机制,以便检测信用卡盗刷现象。

在这里插入图片描述
(1)编写 CEP SQL 时,包含许多技巧,首先我们编写最基础的查询语句,从一张表中查询需要的字段。

select starttime,endtime,cardId,event from dataStream

(2)match_recognize();

  • 该字段是 CEP SQL 的前提条件,用于生成一个追加表,所有的 CEP SQL 都是书写在这里面。

(3)分区,排序

  • 由于是对同一 ID,所以需要使用 partition by,还要根据时间进行排序 order by

(4)理解 CEP SQL 核心的编写顺序,如上图标的顺序

  • 1️⃣ CEP SQL 的类为 Pattern,检测在 10 分钟内两个地方出现刷卡现象,所以定义两个事件。
Pattern (e1 e2+) within interval '10' minute
  • 2️⃣ 定义在 Pattern 中要求的判断语句,规定使用 define
define
	e1 as a1.action = ''
	e2 as e2.action = '' and e2.location <> e1.location
  • 3️⃣ 根据上述的输入条件构建输出条件,规定使用 measures
measures
	e2.action as event
	e1.timestamp as starttime
	last(e2.timestamp) as endtime
  • 4️⃣ 输出条件匹配成功,输出一条,规定写法(这块根据不同的规则写不同的语句)。
one row per match
  • 5️⃣ 匹配后跳转跳转到下一行(根据不同规则写不同语句)。
after match skip to  next row

根据核心编写顺序进行理解,然后在按照书写正确的顺序进行编写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/317131.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十六章 i18n国际化

第十六章 i18n国际化 1.什么是i18n国际化2.i18n国际化三要素介绍3.i18n国际化基础示例4.通过请求头实现国际化5.通过语言类型选择实现国际化6.通过JSTL标签库fmt实现国际化 1.什么是i18n国际化 2.i18n国际化三要素介绍 3.i18n国际化基础示例 如果我要准备一个国际化的信息&…

测试工程师能否作为一份「终身职业」?30岁+怎么办?

【讨论】测试工程师可否作为一份终生的职业&#xff1f; 这是我在论坛看到的一个讨论&#xff0c;你的答案是什么呢&#xff1f; 我希望大家能认真思考后给出一个属于自己的答案&#xff0c;无论你是新手入门&#xff0c;还是资深专家。回答这个问题请不要凭一腔热血&#xff…

网络服务之DHCP

目录 一、DHCP是什么&#xff1f; 1、DHCP就是动态主机配置协议 2、DHCP的作用&#xff1a; 3、DHCP是应用层协议 二、DHCP的优点 三、DHCP的分配过程 1、自动分配&#xff1a;分配到一个ip地址后永久使用 2、手动配置&#xff1a;由DHCP服务器管理员专门指定ip地址&am…

ArchVizPRO Interior Vol.8 URP

ArchVizPRO Interior Vol.8 URP是一个在URP中制作的建筑可视化项目。这是一个完全可导航的现代公寓,包括一个带开放式厨房的客厅、休息区、两间卧室和两间浴室。从头开始构建每一个细节,这个室内有130多件家具和道具、自定义着色器和4K纹理。所有家具和道具都非常详细,可以在…

使用CentOS搭建高性能静态HTTP服务器

在互联网应用中&#xff0c;静态内容是广泛存在的&#xff0c;例如HTML页面、图片、视频等。为了提供高效、稳定和安全的静态内容服务&#xff0c;我们可以使用CentOS来搭建高性能的静态HTTP服务器。 1. 选择合适的软件 Nginx和Apache是两个流行的HTTP服务器软件。Nginx以其高…

如何定义核心场景用例?

首先我们解决两个问题&#xff1a; 1.什么是场景测试&#xff1f;2.什么是核心场景&#xff1f; 1、什么是场景测试&#xff1f; &#x1f3af; 1.1&#xff1a;什么是场景 事件触发时的情景形成了场景。场景必不可少的几个要素&#xff1a;环境、人、时间、行为。简而言之&…

javascript_forEach中使用异步函数执行顺序问题,错误原因+解决思路

javascript_forEach中使用异步函数执行顺序问题&#xff0c;错误原因解决思路 start 最近在写异步逻辑的时候&#xff0c;经常会使用 async/await。有些时候需要执行异步逻辑的函数比较多&#xff0c;就习惯用 forEachasync/await 去处理函数了。在测试的过程中会发现&#x…

Opencv实验合集——实验九:姿势估计

在上一章节(相机校准)&#xff0c;你已经找到了相机矩阵&#xff0c;畸变系数等等参数。给出一个图案图像&#xff0c;我们便可以利用上面的信息用于计算其姿势&#xff0c;或者物体在空间中位于何处&#xff0c;比如如何旋转&#xff0c;如何移动等等问题。对于一个平面物体&a…

【数据结构】二叉树问题总结

目录 1.二叉树前序遍历&#xff0c;中序遍历和后序的实现 2.层序遍历 3.求二叉树中的节点个数 4.求二叉树中的叶子节点个数 5.求二叉树的高度 6.求二叉树第k层节点个数 7.二叉树查找值为x的节点 8.单值二叉树 9.二叉树最大深度 10.翻转二叉树 11. 检查两颗树是否相同…

Redis介绍

一、 Redis介绍 1. NoSQL的引言 NoSQL(Not Only SQL )&#xff0c;意即不仅仅是SQL, 泛指非关系型的数据库。Nosql这个技术门类,早期就有人提出,发展至2009年趋势越发高涨。 2. 为什么是NoSQL 随着互联网网站的兴起&#xff0c;传统的关系数据库在应付动态网站&#xff0c;…

HTML--图片

HTML中使用 img标签来显示一张图片 它有三个属性&#xff1a; src alt tiltle src属性&#xff1a; 图片路径建议为相对路径&#xff0c;以免文件移动造成无法正常工作 用法&#xff1a; <img src"图片路径和名字"><!DOCTYPE html> <html> <…

【数据库】sql优化有哪些?从query层面和数据库层面分析

目录 归纳sql本身的优化数据库层面的优化 归纳 这类型问题可以称为&#xff1a;Query Optimization&#xff0c;从清华AI4DB的paper list中&#xff0c;该类问题大致可以分为&#xff1a; Query RewriterCardinality EstimationCost EstimationPlan Optimization 从中文的角…

20240110在ubuntu20.04下重启samba服务

20240110在ubuntu20.04下重启samba服务 百度搜索&#xff1a;samba restart https://www.python100.com/html/78028.html 重启samba命令详解 更新&#xff1a;2023-05-17 16:04 一、重启samba命令 重启samba可以使用以下命令&#xff1a; /etc/init.d/smb restart 或者 syste…

debian12部署Gitea服务之二——部署git-lfs

Debian安装gitlfs: 先更新下软件包版本 sudo apt update 安装 sudo apt install git-lfs 验证是否安装成功 git lfs version cd到Gitea仓库目录下 cd /mnt/HuHDD/Git/Gitea/Repo/hu/testrepo.git 执行lfs的初始化命令 git lfs install客户机Windows端在官网下载并安装Git-Lfs 再…

基于kkFileView实现万能文件预览

基于kkFileView实现万能文件预览 1.简介 文档在线预览项目解决方案&#xff0c;项目使用流行的spring boot搭建&#xff0c;易上手和部署。万能的文件预览开源项目&#xff0c;基本支持主流文档格式预览 官网&#xff1a;https://kkview.cn/zh-cn/docs/home.html github地址…

sectigo dv证书适合场景买一年送一月

Sectigo是成立于美国的知名CA认证机构&#xff0c;随着互联网的发展&#xff0c;Sectigo颁发了越来越多的SSL数字证书。这些SSL证书产品不仅可以对网站传输数据进行加密服务&#xff0c;还可以对服务器身份进行认证服务。Sectigo旗下的DV证书产品比较齐全&#xff0c;适用场景也…

【动态规划】【记忆化搜索】C++算法:546移除盒子

作者推荐 【动态规划】458:可怜的小猪 本文涉及知识点 动态规划 记忆化搜索 LeetCode546. 移除盒子 给出一些不同颜色的盒子 boxes &#xff0c;盒子的颜色由不同的正数表示。 你将经过若干轮操作去去掉盒子&#xff0c;直到所有的盒子都去掉为止。每一轮你可以移除具有相…

[C++]多态

目录 C多态&#xff1a;&#xff1a; 多态的概念 多态的定义及实现 多态的构成条件 虚函数 虚函数的重写 虚函数重写的特例 C11 override和final 重载、重写重定义的对比 抽象类 概念 接口继承和实现继承 多态的原理 虚函数表 多态的原理 动态绑定和静态绑定 单继承和…

智能分析网关V4:搭建智慧幼儿园视频AI智能监管方案

一、背景需求 随着科技的日新月异&#xff0c;智慧化监管在幼儿园管理领域的应用已成为不可逆转的趋势。在传统的幼儿园管理模式中&#xff0c;校园安全管理往往依赖于人工查看监控&#xff0c;难以及时发现安全隐患。智慧幼儿园监管解决方案通过引入物联网、大数据、人工智能…

C# IOC 容器实战:KeyedService和生命周期

文章目录 前言KeyedServiceKey缺少Key值覆盖 KeyedService.AnyKey生命周期测试代码 总结 前言 我之前写过一篇Ioc容器的使用&#xff0c;用的是微软的IOC容器。这次我们再去深入了解一下IOC 和控制反转 .NET Core 依赖注入 Microsoft.Extensions.DependencyInjection ASP.NET …