Flink必知会
文章平均质量分 94
对于数据处理而言,任何行业、任何公司的需求其实都是一样的:数据规模大、实时性要
求高、确保结果准确、方便扩展、故障后可恢复——而这些要求,作为新一代大数据流式处理
引擎的 Flink 统统可以满足!如果你到现在还不理解Flink基本工作原理,那么大数据领域可能会越来越举步维艰。
SunnyRivers
在通信、游戏、互联网、新能源等不同行业从事过多年大数据开发相关工作,想通过博客和大家一起分享大数据技术带来的经验和乐趣。
展开
-
Flink迟到数据处理方式详解
所以总结起来,Flink 处理迟到数据,对于结果的正确性有三重保障:水位线的延迟,窗口允许迟到数据,以及将迟到数据放入窗口侧输出流。原创 2024-08-28 14:58:45 · 102 阅读 · 0 评论 -
Flink窗口API使用教程
在代码实现上,我们需要先对 DataStream 调用.keyBy()进行按键分区,然后再调用.window()定义窗口。原创 2024-08-28 14:35:50 · 249 阅读 · 0 评论 -
深入理解Flink窗口
在 Flink 中,"窗口"是一种重要的概念,它允许你将无限的数据流分割成有意义的小批量数据来进行聚合操作(比如计数、求平均值等)。Flink 支持几种不同类型的窗口,下面我将通过一些具体的例子来解释这四种主要的窗口类型:滚动窗口、滑动窗口、会话窗口以及全局窗口。滚动窗口 (Tumbling Window)定义:滚动窗口是固定大小并且不会重叠的窗口。一旦数据到达窗口的结束时间点,窗口就会关闭,然后计算结果。案例:假设你正在运行一个网站,想要每分钟统计一次用户的点击量。原创 2024-08-28 11:07:44 · 443 阅读 · 0 评论 -
通俗易懂理解Flink水位线
水位线对于初学者来说可能不是很好理解,网上很多资料讲解的也不是很清楚,这篇博客尽量用最通俗易懂、最简单的案例把它讲解清楚。理解水位线之前,我们先得理解Flink中的时间语义。现在我们可以知道,水位线就代表了当前的事件时间时钟,而且可以在数据的时间戳基础上加一些延迟来保证不丢数据,这一点对于乱序流的正确处理非常重要。水位线是插入到数据流中的一个标记,可以认为是一个特殊的数据水位线主要的内容是一个时间戳,用来表示当前事件时间的进展水位线是基于数据的时间戳生成的。原创 2024-08-22 15:48:43 · 303 阅读 · 0 评论 -
Flink常见输出(sink)算子使用教程(DataStream API)
一个 Flink 程序,其实就是对 DataStream 的各种转换。具体来说,代码基本上都由以下几部分构成,获取执行环境(execution environment)读取数据源(source)定义基于数据的转换操作(transformations)定义计算结果的输出位置(sink)触发程序执行(execute)Flink 作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持,如上图所示。原创 2024-08-22 10:17:05 · 49 阅读 · 0 评论 -
浅谈Flink物理分区
顾名思义,“分区”(partitioning)操作就是要将数据进行重新分布,传递到不同的流分区去进行下一步处理。其实我们对分区操作并不陌生,前面介绍聚合算子时,已经提到了 keyBy,它就是一种按照键的哈希值来进行重新分区的操作。只不过这种分区操作只能保证把数据按key“分开”,至于分得均不均匀、每个 key 的数据具体会分到哪一区去,这些是完全无从控制的——所以我们有时也说,keyBy 是一种逻辑分区(logical partitioning)操作。原创 2024-08-21 18:29:33 · 166 阅读 · 0 评论 -
Flink常用转换(transformation)算子使用教程(DataSTream API)
一个 Flink 程序,其实就是对 DataStream 的各种转换。获取执行环境(execution environment)读取数据源(source)定义基于数据的转换操作(transformations)定义计算结果的输出位置(sink)触发程序执行(execute)数据源读入数据之后,我们就可以使用各种转换算子,将一个或多个 DataStream 转换为新的 DataStream,如上图所示。一个 Flink 程序的核心,其实就是所有的转换操作,它们决定了处理的业务逻辑。原创 2024-08-21 09:53:38 · 202 阅读 · 0 评论 -
Flink常见数据源(source)使用教程(DataStream API)
一个 Flink 程序,其实就是对 DataStream 的各种转换。获取执行环境(execution environment)读取数据源(source)定义基于数据的转换操作(transformations)定义计算结果的输出位置(sink)触发程序执行(execute)本篇博客主要用DataStream API开发Flink常见的数据源开发。Flink想要处理数据,先得有数据,所以首要任务就是把数据读进来。原创 2024-08-20 14:53:51 · 310 阅读 · 0 评论 -
DataStream执行环境
DataStream(数据流)本身是 Flink 中一个用来表示数据集合的类(Class),我们编写的Flink 代码其实就是基于这种数据类型的处理,所以这套核心 API 就以 DataStream 命名。对于批处理和流处理,我们都可以用这同一套 API 来实现。DataStream 在用法上有些类似于常规的 Java 集合,但又有所不同。我们在代码中往往并不关心集合中具体的数据,而只是用 API 定义出一连串的操作来处理它们;这就叫作数据流的“转换”(transformations)。原创 2024-08-20 12:48:59 · 87 阅读 · 0 评论 -
Flink任务和任务槽详解
我们知道作业划分为 5 个并行子任务,需要 5 个线程并行执行。那在我们将应用提交到 Flink集群之后,到底需要占用多少资源呢?是否需要 5 个 TaskManager 来运行呢?任务在 Flink 中,任务(Task)是最小的可执行单元。一个任务代表了一个操作符的一个实例,它可以是数据流程序中的任何操作,如 map、filter 或 reduce。每个任务都有一个明确的功能,即执行某个特定的操作。任务槽。原创 2024-08-20 11:03:01 · 242 阅读 · 0 评论 -
Apache Flink 执行过程中的四层图详解
逻辑数据流图是最接近用户程序的表示形式,它是用户定义的数据流程序的直观表示。在这一阶段,用户通过 Flink 提供的 API 定义数据源(Source)、转换(Transformations)和数据接收器(Sink)。作业图是由 Flink 的优化器从逻辑数据流图转换而来的。在这个阶段,Flink 对数据流图进行了初步的优化,并添加了关于每个操作符的元数据,例如并行度和分区策略。执行图是由 JobManager 从作业图转换而来的,它描述了实际的执行计划。原创 2024-08-20 09:57:47 · 225 阅读 · 0 评论 -
理解Flink算子链
对于flink初学者,如果我们观察WebUi中任务执行情况,可能会有一个疑惑,为什么节点和代码中的算子对不上?从WebUi上看起来像是一个节点,会把转换处理的很多个任务都连接在一起,合并成了一个“大任务”。这又是怎么回事呢?Flink中的算子链(Operator Chaining)是一种优化机制,它允许Flink将多个连续的算子合并成一个单一的任务执行单元。这种机制可以减少数据序列化/反序列化的开销,以及网络传输的延迟,从而提高整体的性能。原创 2024-08-20 09:37:40 · 273 阅读 · 0 评论 -
理解Flink并行度
我们先提出一个问题:一个算子操作是不是就是一个任务?那是不是程序中的算子数量,就是最终执行的任务数呢?对于 Spark而言,是把根据程序生成的 DAG 划分阶段(stage)、进而分配任务的。而对于 Flink 这样的流式引擎,其实没有划分 stage 的必要。因为数据是连续不断到来的,我们完全可以按照数据流图建立一个“流水线”,前一个操作处理完成,就发往处理下一步操作的节点。原创 2024-08-20 08:55:21 · 417 阅读 · 0 评论 -
理解Flink数据流图
在大数据处理的世界里,Apache Flink 已经成为处理实时数据流的一个强大工具。Flink 提供了一种高度灵活的方法来构建复杂的数据处理管道,其核心是所谓的 DataFlow 图模型。本文将带你深入了解 Flink DataFlow 图的基础知识,帮助你理解它是如何工作的以及如何利用它来构建高效的数据流应用程序。DataFlow 图是 Flink 应用程序的核心组成部分,它描述了数据如何在不同的算子(Operator)之间流动。节点:代表数据处理的算子,如 Map、Filter、Reduce 等。原创 2024-08-19 17:03:13 · 212 阅读 · 0 评论 -
Flink程序部署与提交
我们看门见山,生产环境一般用的是在YARN上面采用应用模式进行部署flink程序。实际生产中一般需要和资源管理平台(如YARN)结合起来,选择特定的模式来分配资源、部署应用。原创 2024-08-16 15:14:35 · 405 阅读 · 0 评论