structed streaming的执行批次,较spark streaming有所改变。更加灵活。总结下来,可大白话地分为三类:

1尽可能快的执行,不定时间

2按固定间隔时间执行

3仅执行一次

详情如下:

Trigger类型 使用 注意
unspecified (default) as soon as micro-batch If no trigger setting is explicitly specified, then by default, the query will be executed in micro-batch mode, where micro-batches will be generated as soon as the previous micro-batch has completed processing.如果不设置,默认使用微批,但没有时间间隔,尽可能快的处理
Interval micro-batch(固定间隔的微批) Trigger.ProcessingTime(long interval, TimeUnit timeUnit) 根据数据实际情况,不定时批次1. 没有明确指明触发器时,默认使用该触发器,即Trigger.ProcessingTime(0L), 表示将尽可能快地执行查询。2. 该模式下,将按用户指定的时间间隔启动微批处理。3. 如果前一个微批在该间隔内完成,则引擎将等待该间隔结束,然后再开始下一个微批处理。4. 如果前一个微批花费的时间比间隔要长,下一个微批将在前一个微批处理完成后立即开始。5. 如果没有新数据可用,则不会启动微批处理。
One-time micro-batch (一次性微批) Trigger.Once() 仅执行一次
Continuous with fixed checkpoint interval(连续处理) Trigger.Continuous(long interval, TimeUnit timeUnit) 以固定的Checkpoint间隔(interval)连续处理。在这种模式下,连续处理引擎将每隔一定的间隔(interval)做一次checkpoint,可获得低至1ms的延迟。但只保证 at-least-once

为什么continuous只支持at-least-once

df.writeStream
.format("console")
.trigger(continuous='1 second')
.start()

注意这里的 1 second 指的是每隔 1 秒记录保存一次状态,而不是说每隔 1 秒才处理数据

continuous 不再是周期性启动 task,而是启动长期运行的 task,也不再是处理一批数据,而是不断地一个数据一个数据地处理,并且也不用每次都记录偏移,而是异步地,周期性的记录状态,这样就能实现低延迟.

综上,continuous模式下长期运行一个task,而不会实时去记录offset,所以不能保证eactly-once.

三种批次方式的验证

1.Interval micro-batch(固定间隔的微批)

`{

Logger.getRootLogger().setLevel(Level.ERROR);

Logger.getLogger(StructuredSparing.class).setLevel(Level.ERROR);

SparkSession session = SparkSession

.builder()

.master("local")

.config("spark.sql.streaming.checkpointLocation", "D://checkpoint")

.getOrCreate();

    Dataset<Row> stream = session.readStream()
.format("kafka")
.option("kafka.bootstrap.servers", "localhost:9092")
.option("subscribe", "test")
.load();
StreamingQuery query = stream.writeStream()
.queryName("StructuredSparingTest")
.format("console")
.trigger(Trigger.ProcessingTime(5, TimeUnit.SECONDS))
.start(); try {
query.awaitTermination();
} catch (StreamingQueryException e) {
e.printStackTrace();
}
}`

设置为5秒一个批次。

通过UI界面可以很直观地看出,在有数据的时候5秒一个批次,在没有数据的时候,10秒甚至3分钟才执行一个批次。

通过与spark streaming进行比较可以更加直观.在spark streaming里设置8秒一个批次,在UI界面可以看到,不管有无数据,spark streaming严格按照8秒的批次执行。

2.One-time micro-batch (一次性微批)

.trigger(Trigger.Once())

执行结果,略。

3.Continuous方式

.trigger(Trigger.Continuous(100,TimeUnit.MILLISECONDS))

设置100毫秒一个执行批次,通过UI界面可以看出,时间已经1.2分钟,但是active job一直只有一个,一直在running,证明启动了一个长期运行的task,不断地一批数据一批数据连续处理。

structed streaming 触发器trigger的更多相关文章

  1. mysql之触发器trigger

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  2. mysql之触发器trigger 详解

    为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table)  ...

  3. mysql之触发器trigger(1)

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  4. 如何使用MySQL触发器trigger

    阅读目录:触发器trigger的使用 创建触发器 单一执行语句.多执行语句 new.old详解 查看触发器 删除触发器:慎用触发器,不用就删除 Q:什么是触发器? A: 触发器是与表有关的数据库对象, ...

  5. mysql 触发器(trigger)

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

  6. SQL入门(3):定义约束/断言assertion/触发器trigger

    本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...

  7. mysql触发器trigger 实例详解

    mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html)   MySQL好像从5.0.2版本就开始支持触发器的功能 ...

  8. 04 Zabbix4.0系统配置触发器trigger

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 04 Zabbix4.0系统配置触发器trigger 请点击查看Zabbix3.0.8版本trig ...

  9. WPF触发器(Trigger)

    WPF触发器(Trigger.DataTrigger.EventTrigger) WPF中有种叫做触发器的东西(记住不是数据库的trigger哦).它的主要作用是根据trigger的不同条件来自动更改 ...

  10. mysql 触发器 trigger用法 two (稍微复杂的)

    触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/befo ...

随机推荐

  1. 详解数仓中sequence的应用场景及优化

    摘要:本文简单介绍sequence的使用场景及如何修改sequence的cache值提高性能. 本文分享自华为云社区<GaussDB(DWS)关于sequence的那些事>,作者:Arro ...

  2. K8S部署应用详解

    # 前言 首先以SpringBoot应用为例介绍一下k8s的发布步骤. 1.从代码仓库下载代码,比如GitLab:2.接着是进行打包,比如使用Maven:3.编写Dockerfile文件,把步骤2产生 ...

  3. something to SSSSay

    可能记录写博客的初衷,现在的状态,一些目标.想法. 首先让我拟定几个关键词: 半吊子程序员 咸鱼 欲求不满 终生学习 自律 <差不多程序员> 长得差不多(175)高,看着差不多(普通)帅, ...

  4. 近期调研和使用 zeromq 与 cppzmq 的一些问题

    关于message 消息分片 消息分片的发送 消息分片允许将多个消息封装成一条消息.在发送自定义协议数据时,我们经常需要在消息前"填充"一个包头.如下代码,在发送的时候加上 zmq ...

  5. java网络编程--4 UDP

    java网络编程--4 UDP 1.7.UDP 发短信:不用连接,但是需要知道对方的地址 主要包含两个类:DatagramPacket 和 DatagramSocket 发送消息 发送端: packa ...

  6. 主机CPU散热器过重可能导致系统不稳定

    CPU散热器越大,散热能力越强?其实散热器重量只是其中一个指标,还有风道设计也很重要.那么问题来了,为什么处理器散热器重量过重也可能导致系统运行不稳定? 本人用的配置为AMD R7 2700X 处理器 ...

  7. JMM知识点总结

    JMM知识点总结 一.什么是JMM? 不知道大家在学习的过程有没有思考过这两个问题 为什么说java是跨平台语言 导致并发问题的原因是什么 第一个问题,我是这么理解的,代码运行本质上是将我们写的语言转 ...

  8. 探究平台化设计的核心思想和Lattice的设计原则

    一. 平台对业务敏捷支撑的挑战 早期阿里的交易中台遇到了一些挑战,这个在毗卢的博客中有提到,主要遇到了这些问题:新小业务都有一个成长规律,在早期业务模式验证阶段,需要的玩法比较简单,希望能频繁的发布快 ...

  9. Python 霸榜的一周,又有什么新 AI 力作呢?「GitHub 热点速览」

    GPT 带火了一波语言模型,LLaMA 和 Alpaca 也在持续发力.依旧是各类 GPT 后缀霸榜 GitHub trending 的一周,为此特推部分专门收录了两个比较不错的 GPT 应用.而作为 ...

  10. NEFU高级程序设计-期末复习习题组

    1. 用链表实现单词序列倒序输出 题目 用链表实现单词序列倒序输出.与以往不同,请考虑采用一种完全的动态分配方式! 为降低难度,"仁慈"的我已经给出了输出和释放的代码,你只要写出创 ...