Structured Streaming的原理与概述

简介: Structured Streaming是Apache Spark2016年启动的项目,一个基于SparkSQL的全新的流处理引擎,致力于提供批流统一的高性能API

1. Structured Streaming的概述

对比SparkStreaming :

  • Spark Streaming基于RDD开发,使用DStream API来编程,编程难度大.
  • Spark Streaing 的主要模型是微批次(Micro Batch),将数据流按照相等时间间隔(BatchLerval)切分成小任务来执行.
  • Structured Streaming 用户可以使用Dataset/DataFrame 或者 SQL 来对这个动态数据源进行实时查询。

Spark Streaming的不足:

  • 处理的是数据处理的时间而不是数据到来的时间
    在这里插入图片描述

  • 编程复杂
    在这里插入图片描述

  • 没有实现端到端一致性
    在这里插入图片描述

  • 批流代码不统一
    在这里插入图片描述

Structured Streaming 的有什么优势?

缺点: 结构化流2.0以后出来的,限制比较多
优点:

  • Incremental query model(增量查询模型)
    在这里插入图片描述
  • Support for end-to-end application(支持端到端一致性)
    在这里插入图片描述
  • 复用 Spark SQL 执行引擎
    在这里插入图片描述

2. Structured Streaming的编程模型

简介:

  • Structured Streaming将流式数据当成一个不断增长的table,然后使用和批处理同一套API,都是基于DataSet/DataFrame的
  • 核心思想: 将实时到达的数据看作是一个不断追加的unbound table无界表,到达流的每个数据项(RDD)就像是表中的一个新行被附加到无边界的表中.(引出了可以用批处理SQL的方式来对数据进行实时查询)
    在这里插入图片描述
    模型组成:
    -
    1:Input Table(Unbounded Table),流式数据的抽象表示,没有限制边界的,表的数据源源不断增加;
    2:Query(查询),对 Input Table 的增量式查询,只要Input Table中有数据,立即(默认情况)执行查询分析操作,然后进行输出(类似SparkStreaming中微批处理);
    3:Result Table,Query 产生的结果表
    4:Output,Result Table 的输出依据设置的输出模式OutputMode输出结果;

3. Structured Streaming的数据源结构

数据源源码:

val spark = SparkSession
  .builder
  .master("local[2]")
  .appName("StructuredNetworkWordCount")
  .config("spark.sql.shuffle.partitions", 1)
  .getOrCreate()

// socket为数据源
val lines = spark.readStream
  .format("socket")
  .option("host", "127.0.0.1")
  .option("port", "9003")
  .load()

// kafka为数据源
val lines = spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", "127.0.0.1:9092")
.option("subscribe", "topic1")
.option("maxOffsetsPerTrigger", 10)
.load()

第一个代码段为构建spark session,第二和第三个代码段分别是构建socket数据源及kafka数据源。

这些数据源构建之后带有默认的schema结构。下表就是schema:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_49834705/article/details/113104333