flink基本原理

一、简介

开源流式处理系统在不断地发展,从一开始只关注低延迟指标到现在兼顾延迟、吞吐与结果准确性,在发展过程中解决了很多问题,编程API的易用性也在不断地提高。本文介绍一下 Flink 中的核心概念,这些概念是学习与使用 Flink 十分重要的基础知识,在后续开发 Flink 程序过程中将会帮助开发人员更好地理解 Flink 内部的行为和机制。

这里引用一张图来对常用的实时计算框架做个对比:

Flink 是有状态的和容错的,可以在维护一次应用程序状态的同时无缝地从故障中恢复。它支持大规模计算能力,能够在数千个节点上并发运行。它具有很好的吞吐量和延迟特性。同时,Flink 提供了多种灵活的窗口函数。Flink 在流式计算里属于真正意义上的单条处理,每一条数据都触发计算,而不是像 Spark 一样的 Mini Batch 作为流式处理的妥协。Flink的容错机制较为轻量,对吞吐量影响较小,而且拥有图和调度上的一些优化,使得 Flink 可以达到很高的吞吐量。而 Strom 的容错机制需要对每条数据进行ack,因此其吞吐量瓶颈也是备受诟病。

二、工作原理

Flink基本工作原理如下图:

JobClient:负责接收程序,解析和优化程序的执行计划,然后提交执行计划到JobManager。这里执行的程序优化是将相邻的Operator融合,形成Operator Chain,Operator的融合可以减少task的数量,提高TaskManager的资源利用率。

JobManagers:负责申请资源,协调以及控制整个job的执行过程,具体包括,调度任务、处理checkpoint、容错等等。

TaskManager:TaskManager运行在不同节点上的JVM进程,负责接收并执行JobManager发送的task,并且与JobManager通信,反馈任务状态信息,如果说JobManager是master的话,那么TaskManager就是worker用于执行任务。每个TaskManager像是一个容器,包含一个或者多个Slot。

Slot:Slot是TaskManager资源粒度的划分,每个Slot都有自己独立的内存。所有Slot平均分配TaskManager的内存,值得注意的是,Slot仅划分内存,不涉及CPU的划分,即CPU是共享使用。每个Slot可以运行多个task。Slot的个数就代表了一个程序的最高并行度。

Task:Task是在operators的subtask进行链化之后形成的,具体Flink job中有多少task和operator的并行度和链化的策略有关。

SubTask:因为Flink是分布式部署的,程序中的每个算子,在实际执行中被分隔为一个或者多个subtask,运算符子任务(subtask)的数量是该特定运算符的并行度。数据流在算子之间流动,就对应到SubTask之间的数据传输。Flink允许同一个job中来自不同task的subtask可以共享同一个slot。每个slot可以执行一个并行的pipeline。可以将pipeline看作是多个subtask的组成的。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apache Flink是一个大规模分布式数据处理引擎,它提供了批处理和流处理两种模式,可以在高效地处理海量数据的同时保证数据一致性和处理准确性。Flink SQL是Flink中的一种构建在DataStream API之上的关系型数据处理工具,它能够以SQL的方式处理无界的数据流,将SQL查询语句转化为Flink的数据处理执行计划,实现相比于DataStream API更加简单和直观的数据处理方式。 Flink SQL底层原理主要包括以下几个方面: 1. SQL解析:Flink SQL能够支持标准的SQL语法解析,包括DML、DDL、DCL等基本SQL语句类型。 2. 查询优化:Flink SQL能够对查询语句进行优化,包括重写查询语句、优化语句执行计划等等。 3. 执行计划生成:Flink SQL能够将SQL查询语句转化为Flink执行计划,即将查询转化为具体的数据处理任务。 4. 数据存储和访问:Flink SQL支持多种数据存储和访问方式,包括本地文件、HDFS、Kafka等等,同时还支持各种数据格式,如CSV、JSON、avro等等。 5. 分布式执行:Flink SQL能够在不同的节点上进行分布式执行,通过数据并行的方式实现高效的数据处理和计算。 总之,Flink SQL底层原理是一个涉及到SQL解析、查询优化、执行计划生成、数据存储和访问、分布式执行等多个方面的复杂系统,它是Flink中重要的组成部分,为用户提供了高效、简单、直观的关系型数据处理方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值