[Spark]-结构化流之初始篇

1.什么是结构化流.

  结构化流(Structured Streaming),是一种基于Spark-SQL引擎构建的,可容错的,可扩展的流处理引擎.

  它以微批量计算的形式来表达流式计算,随着流式数据持续到达,它能持续的进行处理并更新最终计算结果.

  它使用Spark-SQL带来的丰富的API,来表示流聚合(streaming aggregations),事件时间窗口( event-time windows),流到批处理连接(stream-to-batch joins)等,最终在同一个引擎(优化的Spark-SQL引擎)执行.

    并且,系统能以检查点(CheckPoint)和预写日志(Write Ahead Logs),来确保端到端的(end-to-end)有且仅有一次(exactly-once)的容错保证.

  它的微批处理机制,可以将端到端的延迟降低到100毫秒以下,而在2.3版本中,新提供了一种连续处理(Continuous Processing)机制,将这种端到端的延迟进一步降低到1毫秒以内

  简单来说,结构化流提供一种快速的,可容错的,可扩展的,端到端有且仅有一次保证的流式处理方案

2.结构化流与流式处理(Streaming)

  结构化流是Spark2.X时代提出的新一代流式计算框架.

  它相当于Streaming的增强版,从就旧的来说,它可以完全覆盖Streaming的功能,从新的来说,它还具有以下的演进:

    Streaming是按时间分片为DStream,这导致Streaming很难基于event-time,来处理数据延时,甚至数据乱序的情况.而结果化流是视为一个无界DataFrame,输出结果映射为另一张表.天然支持乱序情况.

    流式(使用RDD)和批处理(使用Spark-SQL)API不能保持完全兼容,程序代码需要做一些转换才行

    端到端的保障机制由用户维护,难以处理增量更新和持久化存储一致的问题

3.编程模型

  3.1 基本概念

    结构化流的核心思想是时间分片,是将实时数据流,视为一个不断增加(append)的表.这让它与普通的批处理非常类似

    但是,结构化流不实现整个表.它读取最新的可用数据流数据来源,处理结果逐步更新,然后丢弃的源数据.只保持在所需的最少的中间状态的数据更新结果

  3.2 基于事件时间处理数据延迟

    因为时间分片的机制,时间属性就是一个非常重要的属性.结构化流支持基于事件时间(Event-time)来处理.

    事件时间是嵌入在数据本身中.很多的时候,都需要基于事件时间而不是结构化流接受时间来处理.比如某些情况下,一部分数据到达出现延迟

  3.3 容错机制

猜你喜欢

转载自www.cnblogs.com/NightPxy/p/9271453.html