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

这篇具有很好参考价值的文章主要介绍了【大数据】Flink 详解(九):SQL 篇 Ⅱ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章:

  • 【大数据】Flink 详解(一):基础篇(架构、并行度、算子)
  • 【大数据】Flink 详解(二):核心篇 Ⅰ(窗口、WaterMark)
  • 【大数据】Flink 详解(三):核心篇 Ⅱ(状态 State)
  • 【大数据】Flink 详解(四):核心篇 Ⅲ(Checkpoint、Savepoint、Exactly-Once)
  • 【大数据】Flink 详解(五):核心篇 Ⅳ(反压、序列化、内存模型)
  • 【大数据】Flink 详解(六):源码篇 Ⅰ(作业提交、Local 方式、YARN 方式、K8s 方式)
  • 【大数据】Flink 详解(七):源码篇 Ⅱ(作业图、执行图、调度、作业生命周期、Task Slot)
  • 【大数据】Flink 详解(八):SQL 篇 Ⅰ(Flink SQL)
  • 【大数据】Flink 详解(九):SQL 篇 Ⅱ(Flink SQL CEP)
  • 【大数据】Flink 详解(十):SQL 篇 Ⅲ(Flink SQL CDC)

😊 如果您觉得这篇文章有用 ✔️ 的话,请给博主一个一键三连 🚀🚀🚀 吧 (点赞 🧡、关注 💛、收藏 💚)!!!您的支持 💖💖💖 将激励 🔥 博主输出更多优质内容!!!

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

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

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈
该类中维护了两对必要的信息:

  • 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 类,如下图所示:

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈
【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈

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

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

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

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

如下图所示: 我们指定 “方块、圆” 为基本规则的事件,在输入的原始流中,将这些事件作为一个结果流输出来。
【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈
【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈
【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈

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

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

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

CEP 包含的参数如下:

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink 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,输出不同。

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈
【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈

匹配后跳转模式介绍

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

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈

2️⃣ after match skip to next row

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈

3️⃣ after match skip to last patternItem

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈

4️⃣ after match skip to first patternItem

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈

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

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

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

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

【大数据】Flink 详解(九):SQL 篇 Ⅱ,# Flink,大数据,flink,sql,Flink CEP,实时计算,流批一体,反欺诈
(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

根据核心编写顺序进行理解,然后在按照书写正确的顺序进行编写。文章来源地址https://www.toymoban.com/news/detail-795459.html

到了这里,关于【大数据】Flink 详解(九):SQL 篇 Ⅱ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink CEP完全指南:捕获数据的灵魂,构建智慧监控与实时分析大师级工具

    Flink CEP(Complex Event Processing)是 Apache Flink 的一个库,用于实现复杂的事件流处理和模式匹配。它可以用来识别事件流中的复杂模式和序列,这对于需要在实时数据流中进行模式识别的应用场景非常有用,比如监控、异常检测、业务流程管理等。 在Flink CEP中,你可以定义复杂

    2024年02月03日
    浏览(58)
  • 【大数据】Flink 详解(十):SQL 篇 Ⅲ(Flink SQL CDC)

    《 Flink 详解 》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇(架构、并行度、算子) 【大数据】Flink 详解(二):核心篇 Ⅰ(窗口、WaterMark) 【大数据】Flink 详解(三):核心篇 Ⅱ(状态 State) 【大数据】Flink 详解(四):核心篇

    2024年01月25日
    浏览(50)
  • 【大数据】Flink 详解(十):SQL 篇 Ⅲ

    《 Flink 详解 》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇(架构、并行度、算子) 【大数据】Flink 详解(二):核心篇 Ⅰ(窗口、WaterMark) 【大数据】Flink 详解(三):核心篇 Ⅱ(状态 State) 【大数据】Flink 详解(四):核心篇

    2024年01月18日
    浏览(57)
  • 【大数据】Flink 详解(九):SQL 篇 Ⅱ

    《 Flink 详解 》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇(架构、并行度、算子) 【大数据】Flink 详解(二):核心篇 Ⅰ(窗口、WaterMark) 【大数据】Flink 详解(三):核心篇 Ⅱ(状态 State) 【大数据】Flink 详解(四):核心篇

    2024年01月16日
    浏览(40)
  • 【大数据】Flink 详解(八):SQL 篇 Ⅰ

    《 Flink 详解 》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇(架构、并行度、算子) 【大数据】Flink 详解(二):核心篇 Ⅰ(窗口、WaterMark) 【大数据】Flink 详解(三):核心篇 Ⅱ(状态 State) 【大数据】Flink 详解(四):核心篇

    2024年01月16日
    浏览(35)
  • 【大数据-实时流计算】图文详解 Apache Flink 架构原理

    目录 Apache Flink架构介绍 一、Flink组件栈 二、Flink运行时架构 在Flink的整个

    2024年02月02日
    浏览(42)
  • 大数据流处理与实时分析:Spark Streaming和Flink Stream SQL的对比与选择

    作者:禅与计算机程序设计艺术

    2024年02月07日
    浏览(45)
  • Flink CDC和Flink SQL构建实时数仓Flink写入Doris

    软件环境 Flink1.13.3 Scala 2.12 doris 0.14 一、MySQL 开启binlog日志、创建用户 1.开启bin log MySQL 8.0默认开启了binlog,可以通过代码show variables like \\\"%log_bin%\\\";查询是否开启了,show variables like \\\"%server_id%\\\";查询服务器ID。 上图分别显示了bin long是否开启以及bin log所在的位置。 2.创建用户 C

    2024年02月02日
    浏览(78)
  • Flink流批一体计算(1):流批一体和Flink概述

    Apache Flink应运而生 数字化经济革命的浪潮正在颠覆性地改变着人类的工作方式和生活方式,数字化经济在全球经济增长中扮演着越来越重要的角色,以互联网、云计算、大数据、物联网、人工智能为代表的数字技术近几年发展迅猛,数字技术与传统产业的深度融合释放出巨大

    2024年02月10日
    浏览(42)
  • 实时数仓|基于Flink1.11的SQL构建实时数仓探索实践

    实时数仓主要是为了解决传统数仓数据时效性低的问题,实时数仓通常会用在实时的 OLAP 分析、实时的数据看板、业务指标实时监控等场景。虽然关于实时数仓的架构及技术选型与传统的离线数仓会存在差异,但是关于数仓建设的基本方法论是一致的。本文会分享基于 Flink

    2024年02月16日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包