Apache Flink 的数据流编程模型 抽象层次 Flink 为开发流式应用和批式应用设计了不同的抽象层次 状态化的流 抽象层次的最底层是状态化的流,它通过 ProcessFunction 嵌入到 DataStream API 中,允许用户自由地处理来自一个或多个流的事件(event)以及使用一致的容错状态 此外,用户可以注册事件时间并处理时间回调(callback),这使得程序可以处理更复杂的计算 核心 API 大多数情况下用户不直接在上面描述的这种低的抽象层面上编程,取而代之的是使用所谓…
一. RxJs:针对异步数据流编程工具 1. 创建subject类对象(发送方) 2. subject.subscribe(观察者); (注册观察者对象observer,可以注册多个相当于回调函数取数据,返回消费者) 3. 消费者有取消订阅的方法unsubscribe,相当于取消监听 4. 发送数据:subject.next(要发送的数据); (此数据所有观察者都会收到)…
DataStream: DataStream 是 Flink 流处理 API 中最核心的数据结构.它代表了一个运行在多个分区上的并行流.一个 DataStream 可以从 StreamExecutionEnvironment 通过env.addSource(SourceFunction) 获得. DataStream 上的转换操作都是逐条的,比如 map(),flatMap(),filter().DataStream 也可以执行 rebalance(再平衡,用来减轻数据倾斜)和 broadcas…
窗口(Window) 本文翻译自文档Windows ----------------------------------- Flink使用窗口的概念,根据element的时间戳或者其他指标,将可能无限的DataStream分割为有限的数据切片(slice).我们在处理无限数据流以及进行聚合element的transformation时需要此种窗口分割. 注意:我们在此文档中讨论的大多是keyed windowing,即window是应用在KeyedStream上的.关键字下的窗口具有一定的优势,…
1 前言 在时间 Time 那一篇中,介绍了三种时间概念 Event.Ingestin 和 Process, 其中还简单介绍了乱序 Event Time 事件和它的解决方案 Watermark 水位线 (看过多篇文章后,决定喊它水位线,因为窗口触发条件是 Watermark > Window_end_time,有点像水流到达水位线后溢出,当然喊它水印也是可以的,全看个人爱好咯~) 前文请翻 时间 Time 和 Watermark,不过前面介绍比较浅,没能很好领会水位线的概念,所以本篇是作为补充,…
[白话解析] Flink的Watermark机制 0x00 摘要 对于Flink来说,Watermark是个很难绕过去的概念.本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark概念. 0x01 问题 关于Watermark,很容易产生几个问题 Flink 流处理应用中,常见的处理需求/应对方案是什么? Watermark究竟应该翻译成水印还是水位线? Watermark本质是什么? Watermark是如何解决问题? 下面我们就来简要解答这些问题以给大家一个大致概念,在后…
[源码解析] GroupReduce,GroupCombine和Flink SQL group by 目录 [源码解析] GroupReduce,GroupCombine和Flink SQL group by 0x00 摘要 0x01 缘由 0x02 概念 2.1 GroupReduce 2.2 GroupCombine 2.3 例子 0x03 代码 0x04 Flink SQL内部翻译 0x05 JobGraph 0x06 Runtime 6.1 ChainedFlatMapDriver 6.…
[源码解析] Flink UDAF 背后做了什么 目录 [源码解析] Flink UDAF 背后做了什么 0x00 摘要 0x01 概念 1.1 概念 1.2 疑问 1.3 UDAF示例代码 0x02 批处理 2.1 代码 2.2 计划生成 2.3 执行 2.4 状态管理 2.5 总结 0x03 流处理 3.1 示例代码 3.2 计划生成 3.3 执行 & 状态管理 3.3.1 接受到一个新输入 3.3.2 windowState & UDAF执行 3.3.3 State & 结果…
Savepoint 本文翻译自文档Streaming Guide / Savepoints ------------------------------------------------------------- 使用DataStream API编写的程序可以从一个savepoint处恢复执行.savepoint可以同时更新你的程序和Flink集群而不丢失任何状态.该文档包括了从触发.存储以及销毁(dispose)savepoint的所有内容.有关Flink如何处理状态和失效的详细内容,请见文…
[源码分析] 从FlatMap用法到Flink的内部实现 0x00 摘要 本文将从FlatMap概念和如何使用开始入手,深入到Flink是如何实现FlatMap.希望能让大家对这个概念有更深入的理解. 0x01 Map vs FlatMap 首先我们先从概念入手. 自从响应式编程慢慢壮大以来,这两个单词现在越来越被大家熟悉了.前端能见到它们的身影,后台也能见到:安卓里面有,iOS也有.很多兄弟刚遇到它们时候是懵圈的,搞不清楚之间的区别.下面我就给大家简单讲解下. map 它把数组流中的每一个值,…