首页 > 大数据 > > Spark结构化流核心概念
流应用程序包括以下主要部分:
下图概述了前面提到的步骤。可选的选项用星号标记。

下面的部分将详细描述这些概念。
数据源
对于批处理,数据源是驻留在某些存储系统上的静态数据集,如本地文件系统、HDFS或S3。结构化流的数据源是完全不同的。他们生产的数据是连续的,可能永远不会结束,而且生产速率也会随着时间而变化。
Spark结构化流提供了以下开箱即用的数据源:
数据源需要提供的一个重要的属性是一种跟踪流中的读位置的方法,用于结构化的流来传递端到端、exactly once保证。例如,Kafka的数据源提供了一个Kafka的偏移量来跟踪一个主题分区的读位置。这个属性决定一个特定的数据源是否具有容错能力。
下表描述了每个开箱即用数据源的一些选项。

Apache Spark 2.3引入了DataSource V2 APIs,这是一组官方支持的接口,用于Spark开发人员开发定制数据源,这些数据源可以很容易地与结构化流集成。有了这些定义良好的API集,在不久的将来,自定义结构化流源的数量将急剧增加。
输出模式
输出模式是一种方法,可以告诉结构流如何将输出数据写入到sink中。这个概念对于Spark中的流处理来说是独一无二的。输出模式有三个选项。
触发器类型
触发器是另一个需要理解的重要概念。结构化流引擎使用触发器信息来确定何时在流应用程序中运行提供的流计算逻辑。下表描述了不同的触发类型。

数据接收器(Data Sinks)
数据接收器是用来存储流应用程序的输出的。不同的sinks可以支持不同的输出模式,并且具有不同的容错能力,了解这一点很重要。Spark结构化流支持以下几种数据接收器:
下表列出了每个sink的各种选项:

一个数据接收器必须支持的一个重要的属性(用于结构化的流交付端到端、exactly once保证)是处理再处理的幂等性。换句话说,它必须能够处理使用相同数据的多个写(在不同的时间发生),结果就像只有一个写一样。多重写是在故障场景中重新处理数据的结果。
水印(Watermarking)
数字水印是流式处理引擎中常用的一种技术,用于处理比同一时间生成的其他数据晚得多的数据。当流计算逻辑要求流处理引擎维护某种状态时(例如,聚合或连接),迟到数据对流处理引擎提出了挑战。流应用程序开发人员可以指定一个阈值,让结构化的流引擎知道数据在事件时间(event time)内的预期延迟时间。有了这个信息,结构化的流引擎可以决定一段延迟的数据是否会被处理或丢弃。更重要的是,结构化流使用指定的阈值来确定何时可以丢弃旧状态。没有这些信息,结构化流将需要无限期地维护所有状态,这将导致流应用程序的内存溢出问题。任何执行某种聚合或连接的生产环境下的结构化流应用程序都需要指定水印。这是一个重要的概念,关于这个主题的更多细节将在后面的部分中讨论和说明。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31509949/viewspace-3156342/ ,如需转载,请注明出处,否则将追究法律责任。