Spark2.3.1 Structured Streaming Programming Model

Part1 基础概念

1 input data stream 当作 unbounded input table

2 new data = new rows

3 查询input table会产生result table

4 每过一个trigger interval,添加新的row到Input table,并更新result table

5 每次result table更新,写将更新的行写到external sink(外部存储,即external storage)

6 output是要写到外部存储的内容,可以有不同模式

1) complete mode: 把上次trigger之后被更新的整个result table写入外部存储

2) append mode: 只把上次trigger之后新添加到result table的行,写入外部存储

3) update mode: 把更新(新增或修改)的行写入外部存储

 

structured streaming不保留source data,只将source data不断处理并更新result table,然后丢弃

只保留minimal intermediate state data最小中间状态数据

 

Part2 event-time处理

1 event-time是数据本身的属性,记录数据生成(event)的时间,是table的一个字段,每一行数据都是一个event,Spark每隔一段去读数据是trigger interval,不是event time

2 可以做window操作

 

Part3 late data处理

1 基于event-time可以处理late data,spark可以完全掌控聚合操作,如果有late data,可以清空旧的aggregates操作以限制intermediate state data的大小

2 spark2.1开始支持使用watermarking,指定late data的threshold(界限),允许engine相应地清理old state

 

Part4 fault tolerance 语义

三个方面共同实现structured data sources, execution engine, external sinks,实现对处理过程的可靠精确跟踪,通过restart或者reprocess处理各种失败

1 streaming source都有offsets(类似于kafka),跟踪read position in stream

2 execution engine使用checkpointing和write ahead logs记录每个trigger正在处理数据的offset range

3 streaming sinks处理reprocess的时候,是幂等的,也就是相同的输入就会有相同的输出

总结:使用replayable数据源和idempotent sinks,在任何失败情况下保证end-to-end exactly-once semantics

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值