Spark Structed Streaming的一些主要特性及与Spark Streaming之间的对比

Spark Structured Streaming是Spark2.2后的稳定实时流框架,引入了持续计算和无边界表概念,提供低延迟的连续处理模式,并保证与批处理的一致性。相比Spark Streaming,它的API更简洁,支持事件时间,且能直接与DataFrame/Dataset进行集成,实现数据的实时查询和持久化。
摘要由CSDN通过智能技术生成

Spark Streaming

众所周知,Spark Streaming中的数据结构是DStream,是对RDD的进一步的封装,是”微批“的准实时处理。将连续的流数据转换为连续的批作业,这里的“批”,就是指RDD序列——DStream。

除了文件数据流之外,所有的输入DStream都会被绑定到一个Receiver对象上,Receiver接受数据。所以一个Spark Streaming程序,至少需要占用2个cpu core,一个给spark streaming application的executor,另一个给Receiver。

程序开发流程:

  1. DStream数据源
    (Flink中:Source)(Flink、Spark Streaming中,DStream/Source都可以是并行多个的。)
  2. Transformation+Action操作
    (Flink为Transformation)
  3. 调用StreamingContext的start开始执行程序
    (Flink为ExecutionEnvironment的execute()方法)
  4. stop

Spark Structed Streaming

之前在实时大数据平台技术选型概要这篇文章中有提到:

Structured Streaming是Spark2提出的新的实时流框架(2.0和2.1是实验版本,从Spark2.2开始为稳定版本),Spark2 将流式计算也统一到DataFrame里去。
structured-streaming-stream-as-a-table.png

总的来说,Structured Streaming 的意义有:

  • 重新抽象了流式计算
  • 易于实现数据的exactly-once(2.0之前的Spark Streaming 只能做到at-least once)
  • 解决了Spark Streaming存在的代码升级,DAG图变化引起的任务失败,无法断点续传的问题
  • 保证与批处理作业的强一致性
  • API简化(引入和流函数的封装。
    举个例子:Kafka中读取的数据,通过stream方法形成流,就可以直接与jdbc中读取的数据在DataSet层面就进行Join,不用使用transform或者foreachRDD方法。
    stream方法底层依赖Dataset和Dataframe,集成了SparkSql和Dataset几乎所有的功能,把流处理的代码编写一下子简化了很多。)
  • 基于Event-Time,相比于Spark Streaming的Processing-Time更精确
  • 未来将支持使用SQL和JDBC来实时查询Streaming data

通俗的说,以前只是流式计算,数据计算完之后放入外部存储,现在向持续计算发展,希望通过一套API实现数据的持续计算(数据在计算时,既可以结合离线数据,又可以提供实时查询,又可以与外部存储比如redis、hbase交互)。

持续计算

自Spark 2.3以来,引入了一种称为连续处理的新型低延迟处理模式,它可以实现低至1毫秒的端到端延迟,并且具有至少一次保证(at-least-once)。

无边界表

以下内容翻译自:

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值