随笔分类 - Flink
一些关于Flink学习的记录
摘要:一、介绍 在Flink提供的多层级API中(如下图示),核心是DataStreamAPI,这是开发流处理应用的基本途径;底层则是所谓的处理函数(processfunction),可以访问事件的时间信息、注册定时器、自定义状态,进行有状态的流处理。DataStreamAPI和处理函数比较通用,有了这些
阅读全文
摘要:端到端精确一次(end-to-end exactly-once) 实际应用中,最难做到、也最希望做到的一致性语义,无疑就是端到端(end-to-end)的“精确一次”(exactly-once)。对于Flink内部来说,检查点机制可以保证故障恢复后数据不丢(在能够重放的前提下),并且只处理一次,所以
阅读全文
摘要:状态一致性 之前说到检查点又叫作“一致性检查点”,是Flink容错机制的核心。接下来就对状态一致性的概念进行说明,结合理论和实际应用场景,讨论Flink流式处理架构中的应对机制。 一、一致性的概念和级别 在分布式系统中,一致性(consistency)是一个非常重要的概念;在事务(transacti
阅读全文
摘要:检查点 流式数据连续不断地到来,无休无止;所以流处理程序也是持续运行的,并没有一个明确的结束退出时间。机器运行程序,996起来当然比人要容易得多,不过希望“永远运行”也是不切实际的。因为各种硬件软件的原因,运行一段时间后程序可能异常退出、机器可能宕机,如果只依赖一台机器来运行,就会使得任务的处理被迫
阅读全文
摘要:简介 在Flink的状态管理机制中,很重要的一个功能就是对状态进行持久化(persistence)保存,这样就可以在发生故障后进行重启恢复。Flink对状态进行持久化的方式,就是将当前所有分布式状态进行“快照”保存,写入一个“检查点”(checkpoint)或者保存点(savepoint)保存到外部
阅读全文
摘要:简介 算子状态中有一类很特殊,就是广播状态(BroadcastState)。从概念和原理上讲,广播状态非常容易理解:状态广播出去,所有并行子任务的状态都是相同的;并行度调整时只要直接复制就可以了。然而在应用上,广播状态却与其他算子状态大不相同。本节就专门来讨论一下广播状态的使用。 一、基本用法 让所
阅读全文
摘要:简介 除按键分区状态(KeyedState)之外,另一大类受控状态就是算子状态(OperatorState)。从某种意义上说,算子状态是更底层的状态类型,因为它只针对当前算子并行任务有效,不需要考虑不同key的隔离。算子状态功能不如按键分区状态丰富,应用场景较少,它的调用方法也会有一些区别。 一、基
阅读全文
摘要:简介 在实际应用中,一般都需要将数据按照某个key进行分区,然后再进行计算处理;所以最为常见的状态类型就是KeyedState。之前介绍到keyBy之后的聚合、窗口计算,算子所持有的状态,都是KeyedState 另外,还可以通过富函数类(RichFunction)对转换算子进行扩展、实现自定义功能
阅读全文
摘要:简介 在流处理中,数据是连续不断到来和处理的。每个任务进行计算处理时,可以基于当前数据直接转换得到输出结果;也可以依赖一些其他数据。这些由一个任务维护,并且用来计算输出结果的所有数据,就叫作这个任务的状态。 一、有状态算子 在Flink中,算子任务可以分为==无状态==和==有状态==两种情况。 无
阅读全文
摘要:多流转换 无论是基本的简单转换和聚合,还是基于窗口的计算,都是针对一条流上的数据进行处理的。而在实际应用中,可能需要将不同来源的数据连接合并在一起处理,也有可能需要将 一条流拆分开,所以经常会有对多条流进行处理的场景。本章就来讨论Flink中对多条流进行转换的操作。 简单划分的话,多流转换可以分为“
阅读全文
摘要:一、基本处理函数 处理函数主要是定义数据流的转换操作,所以也可以把它归到转换算子中。我们知道在Flink中几乎所有转换算子都提供了对应的函数类接口,处理函数也不例外;它所对应的函数类,就叫作ProcessFunction。 1.处理函数的功能和使用 之前学习的转换算子,一般只是针对某种具体操作来定义
阅读全文
摘要:窗口 我们已经了解了Flink中事件时间和水位线的概念,那它们有什么具体应用呢?当然是做基于时间的处理计算了。其中最常见的场景,就是窗口聚合计算。 之前我们已经了解了Flink中基本的聚合操作。在流处理中,我们往往需要面对的是连续不断、无休无止的无界流,不可能等到所有所有数据都到齐了才开始处理。所以
阅读全文
摘要:水位线 在介绍事件时间语义时,提到了“水位线”的概念,已经知道了它其实就是用来度量事件时间的。那么水位线具体有什么含义,又跟数据的时间戳有什么关系呢?接下来就来深入探讨一下这个流处理中的核心概念。 一、事件时间和窗口 在实际应用中,一般会采用事件时间语义。而水位线,就是基于事件时间提出的概念。所以在
阅读全文
摘要:时间语义 “时间”,从理论物理和哲学的角度解释,可能有些玄妙;但对于我们来说,它其实是生活中再熟悉不过的一个概念。一年365天,每天24小时,时间就像缓缓流淌的河,不疾不徐、无休无止地前进着,它是我们衡量事件发生和进展的标准尺度。如果想写抒情散文或是科幻小说,时间无疑是个绝好的题材。但这跟数据处理有
阅读全文
摘要:概述 Flink 作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持,如图所示,本节将主要讲解Flink中的Sink操作。之前已经了解Flink程序如何对数据进行读取、转换等操作,最后一步当然就应该将结果数据保存或输出到外部系统了。 在Flink中,如果希望将数据写入外部系
阅读全文
摘要:转换算子 数据源读入数据之后,就可以使用各种转换算子,将一个或多个DataStream转换为新的DataStream,如上所示。一个 Flink 程序的核心,其实就是所有的转换操作,它们决定了处理的业务逻辑。可以针对一条流进行转换处理,也可以进行分流、合流等多流转换操作,从而组合成复杂的数据流拓扑。
阅读全文
摘要:Environment(执行环境) --> Source(数据源) --> Transform(转换操作) --> Sink(输出) 创建环境之后,就可以构建数据处理的业务逻辑了,如上所示,下面主要学习Flink的源算子(Source)。想要处理数据,先得有数据,所以首要任务就是把数据读进来。 Fl
阅读全文
摘要:执行环境(Execution Environment) Flink 程序可以在各种上下文环境中运行:可以在本地 JVM 中执行程序,也可以提交到远程集群上运行。 不同的环境,代码的提交运行的过程会有所不同。这就要求在提交作业执行计算时, 首先必须获取当前 Flink 的运行环境,从而建立起与 Fli
阅读全文
摘要:1.程序与数据流 (DataFlow) 所有的Flink程序都是由三部分组成: Source Transformation 和 Sink(输入、转换、输出) Source负责读取数据源,Transformation利用各种算子进行处理加工,Sink负责输出 在运行时,Flink上运行的程序会被映射成
阅读全文
摘要:1.系统架构 1.1 整体构成 1.2 作业管理器(JobManager) 控制一个应用程序执行的主进程,是Flink集群中任务管理和调度的核心 JobMaster 是JobManager中最核心的组件,负责处理单独的作业(Job) 在提交作业时,JobMaster会先接受到要执行的应用,一般是由客
阅读全文

浙公网安备 33010602011771号