Flink随笔 20241203 Flink重点内容

news/2024/12/4 6:37:06/

Flink 是一个强大的流处理框架,它的设计理念是高吞吐量、低延迟的流式计算。你提到的这些重点是 Flink 的核心组成部分,下面我将详细解析每一个方面。

1. 窗口(Window)

窗口是 Flink 流处理中一个非常重要的概念,主要用于处理无限流数据。窗口将无限数据流分割成有限大小的数据块,进行计算和处理。Flink 提供了多种类型的窗口:

  • 时间窗口(Time Window)

    • 滚动窗口(Tumbling Window):窗口的大小是固定的,且无重叠。数据会被固定的时间切割成块,每个块独立处理。
    • 滑动窗口(Sliding Window):窗口大小固定,但窗口滑动步长可配置,可以有重叠。每次窗口滑动时,窗口的内容会重新计算。
    • 会话窗口(Session Window):窗口大小不是固定的,而是根据事件之间的空闲时间(session gap)来动态调整。当一段时间内没有新数据到来时,当前会话窗口关闭,开启新的窗口。
  • 基于计数的窗口(Count-based Window):窗口大小由元素数量决定,而不是时间。

2. 算子(Operator)

算子是 Flink 流处理中的基本操作单元。Flink 提供了多种算子,常见的有:

  • Map算子:对流中的每个元素应用一个函数,产生一个新的输出流。
  • FlatMap算子:类似于Map算子,但它允许返回零个、一个或多个结果。
  • Filter算子:用于根据条件过滤流中的元素。
  • KeyBy算子:按照某个字段对流进行分组,相同键的数据会被路由到同一个处理任务中。
  • Reduce算子:对流中的数据进行聚合操作,可以是求和、计数、最小值、最大值等。
  • Window算子:用于将数据流分割为窗口进行计算(如上面所述)。
  • Join算子:支持基于某些键的流间连接,Flink 支持流与流、流与静态数据、静态数据与流的连接。
  • Sink算子:将计算结果输出到外部系统,如数据库、消息队列、文件系统等。

3. Checkpoint

Checkpoint 是 Flink 提供的一种容错机制,用于确保流处理作业在发生故障时能够恢复到一致的状态。Flink 通过周期性地将操作的状态保存到持久化存储中实现。

  • 启动Checkpoint:Flink 会定期启动Checkpoint,保存当前任务的状态。
  • 容错机制:当作业发生故障时,Flink 会从最近的成功的Checkpoint恢复任务状态,保证数据的一致性和处理的正确性。
  • 配置
    • state.backend:指定状态后端,常用的有 rocksdbmemory
    • checkpoint.interval:Checkpoint 的时间间隔,单位是毫秒。
    • checkpoint.timeout:Checkpoint 超时时间。
    • state.savepoints.dir:用于存储 savepoint 的目录。
    • checkpointing.mode:有两种模式,EXACTLY_ONCE(精确一次)和 AT_LEAST_ONCE(至少一次)。
    • checkpointing.externalized:决定是否在作业停止时保留外部保存点。

4. 资源管理

Flink 的资源管理包括 JobManager 和 TaskManager 的管理,它们负责 Flink 集群的资源调度与分配。

  • JobManager:是 Flink 的控制中心,负责管理作业的生命周期,调度作业,处理作业的失败恢复等。每个作业只有一个 JobManager。

    • 任务提交、作业调度和故障恢复等都是 JobManager 的职责。
    • JobManager 配置
      • jobmanager.rpc.address:指定 JobManager 的主机地址。
      • jobmanager.rpc.port:指定 JobManager 的 RPC 端口。
      • jobmanager.heap.size:指定 JobManager 的堆内存大小。
      • jobmanager.execution.failover-strategy:指定作业失败恢复策略。
  • TaskManager:是 Flink 的计算单元,负责执行任务并处理数据。TaskManager 是作业的实际执行者。

    • TaskManager 中的每个 Task 是一个并行任务,负责处理 Flink 作业中的一个子任务。
    • TaskManager 配置
      • taskmanager.memory.process.size:指定 TaskManager 分配给任务的内存大小。
      • taskmanager.numberOfTaskSlots:指定 TaskManager 上可用的任务槽数(并行度)。
      • taskmanager.rpc.port:TaskManager 的 RPC 端口。
      • taskmanager.network.memory.fraction:指定用于网络缓冲的内存比例。

5. JobManager 与 TaskManager 相关配置

Flink 的资源管理与作业执行的能力依赖于 JobManager 和 TaskManager 的配置。通常在 Flink 集群模式下,资源管理是由 YARN、Kubernetes 或 Flink 自带的 standalone 模式来完成的。

  • Standalone 模式:在这种模式下,Flink 提供了 JobManager 和 TaskManager 的独立配置,通常部署在不同的节点上。
  • YARN 模式:Flink 可以运行在 YARN 上,YARN 管理作业的资源分配,Flink 的资源管理由 YARN 负责。
  • Kubernetes 模式:Flink 也可以运行在 Kubernetes 上,Kubernetes 提供了资源调度与管理。

6. Flink 集群模式

Flink 支持多种集群部署模式:

  • Standalone模式:Flink 运行在独立集群上,JobManager 和 TaskManager 通常分别部署。
  • YARN模式:Flink 可以在 Hadoop YARN 集群上运行,利用 YARN 的资源管理能力。
  • Kubernetes模式:Flink 可以部署在 Kubernetes 上,利用 Kubernetes 的资源管理能力。

配置总结

  • TaskManager 和 JobManager 的内存和并行度配置

    • 通过 taskmanager.memory.process.sizetaskmanager.numberOfTaskSlots 来配置 TaskManager 的内存和任务槽数。
    • jobmanager.heap.sizejobmanager.rpc.address 配置 JobManager 的内存大小和主机地址。
  • JobManager 的调度策略

    • 通过 jobmanager.execution.failover-strategy 来配置作业失败后的恢复策略(如自动重启)。
  • Checkpoint 配置

    • 通过 checkpoint.interval 来配置Checkpoint的周期,state.backend 来指定状态后端。

通过对这些配置的合理调整,Flink 可以根据不同的业务需求提供高效、容错、可扩展的流式计算服务。希望这些解析能帮助你更好地理解 Flink 的核心概念。


http://www.ppmy.cn/news/1552202.html

相关文章

uni-app写的微信小程序每次换账号登录时出现缓存上一个账号数据的问题

uni-app写的微信小程序每次更换另外账号登录时出现缓存上一个账号数据的问题? 1, 清除缓存数据:在 onShow 钩子中,我们将 powerStations、list 和 responseRoles 的值重置为初始状态,以清除之前的缓存数据。 2&…

Linux C/C++编程之静态库

【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com…

肝硬化腹水中医怎么治疗

肝硬化腹水在中医中被称为“鼓胀”或“水鼓”,其治疗强调整体观念和辨证施治。以下是中医治疗肝硬化腹水的主要方法和原则: ### 1. 治疗原则 - **扶正祛邪**:中医认为肝硬化腹水的主要病机是正虚邪实,治疗上以扶正为主&#xff…

【大模型微调】pdf转markdown

目前市面上大部分都是pdf文档,要想转换成能训练的文本,调研了各种工具。 觉得MinerU确实不错。 参考此链接进行操作 MinerU/docs/README_Ubuntu_CUDA_Acceleration_en_US.md at master opendatalab/MinerU GitHub 需要注意的几个点: 1. 使用root账户安装的,配置文件在…

微信小程序分包流程

小程序目录结构 - app.js - app.json - app.wxss - pages // 主包所有页面- index // 页面内容,包含(index.js,index.wxml,index.json,index.wxss)- logs - packageA // 第一个分包- pages // 第一个分包的所有页面- index // 页面内容,包含(index.js,index.wxml,index.json…

南昌榉之乡托养机构解读:自闭症与看电视并无必然联系

在探讨自闭症的成因时,有人会问:自闭症是多看电视引起的吗?今天,就让我们来看看南昌榉之乡托养机构对此有何见解。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校,一直致力于为大龄自闭症患者提供专业的支持…

Kylin Server V10 下 Kafka 集群部署

一、ZooKeeper 集群部署 1、主机规划 主机名 IP 地址 myid 10.8.3.35 1 10.8.3.36 2 10.8.3.37 3 2、拓扑结构 3、部署 (1) 下载Zookeeper [root@localhost ~]# cd /usr/local [root@localhost local]# wget https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-…

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(6)

1.问题描述: 推送通知到手机,怎么配置拉起应用指定的页面? 解决方案: 1、如果点击通知栏打开默认Ability的话, actionType可以设置为0, 同时可以在.clickAction.data中,指定待跳转的page页面…