Exactly Once语义在Flink中的应用|青训营笔记

55 阅读2分钟

这是我参加[第四届青训营]笔记创作活动的第4天。 1、数据流和动态表

数据流和动态表转换 image.png 动态表是随时间变化的。可以像查询静态批处理表一样查询他们。

image.png 2、Exactly-Once和 Checkpoint 2.2制作快照的时间点

image.png 3、端前到段Exactly-Once实现 预提交阶段

提交阶段

4、Flink案例讲解 5、exactly once具体理解

分布式事件流处理已逐渐成为大数据领域的热点话题。该领域主要的流处理引擎(SPE)包括 Apache Storm、Apache Flink、Heron、Apache Kafka(Kafka Streams)以及 Apache Spark(Spark Streaming)等。处理语义是围绕 SPE 最受关注,讨论最多的话题之一,其中”严格一次(Exactly-once)” 是很多引擎追求的目标之一,很多 SPE 均宣称可提供”严格一次”的处理语义。

然而exactly-once具体指什么,需要具备哪些能力,当 SPE 宣称可支持时这实际上意味着什么,对于这些问题还有很多误解和歧义。使用exactly-once来描述处理语义,这本身也容易造成误导。本文将探讨各大主要 SPE 在exactly-once处理语义方面的差异,以及为什么exactly-once更适合称之为有效一次(Effectively-once)。同时本文还将探讨在实现所谓exactly-once的语义过程中,各类常用技术之间需要进行的取舍。

1. 背景

流处理通常也被称之为事件处理,简单来说是指持续不断地处理一系列无穷无尽地数据或事件地过程。流处理或事件处理应用程序大致可以看作一种有向图,大部分情况(但也并非总是如此)下也可以看作有向无环图(Directed acyclic graph,DAG)。在这种图中,每个边(Edge)可代表一个数据或事件流,每个顶点(Vertex)代表使用应用程序定义的逻辑处理来自相邻边的数据或事件的算子(Operator)。有两种特殊类型的顶点,通常称之为 SourceSinkSource 会消耗外部数据/事件并将其注入应用程序,而Sink通常负责收集应用程序生成的结果。图1展示了这样的一个流应用程序范例。