当前位置: 首页 > article >正文

大数据入门-什么是Flink

这里简单介绍Flink概念、架构、特性等。至于比较详细的介绍,会单独针对这个组件进行详细介绍,可以关注博客后续阅读。

一、概念

Apache Flink 是一个框架分布式处理引擎,用于在无边界有边界数据流上进行有状态的计算。

Flink的四大基石

1. Checkpoint

Checkpoint机制 为Flink实现了一个分布式的一致性的快照,从而提供了一致性的语义。

2.State

虽然有了一致性的语义之后,Flink为了让用户在编程时更加轻松、更容易地去管理状态,提供了一套非常简单明了的StateApi,包括里面的有ValueState、ListState、MapState,近期还添加了BroadcastState,使用State API能够自动先用这种一致性的语义。

3.Time

Flink还实现了Watemark的机制,能够支持基于事件的时间的处理,或者说基于系统时间的处理,能够容忍数据的延时、容忍数据的迟到、容忍乱序的数据。

4.Window

Flink提供了开箱即用的各种窗口,比如滑动窗口、滚动窗口、会话窗口以及非常灵活的自定义窗口。

二、架构

Flink整体的基础架构如下图

1.Client

Client是提交作业的客户端,虽然不是运行时和作业执行时的一部分,但它负责准备和提交作业到JobManager,它可以运行在任何机器上,只要与JobManager环境连通即可。

2.JobManager

JobManager根据客户端提交的应用将应用分解为子任务,从资源管理器(YARN等)申请所需的计算资源,然后分发任务到TaskManager执行,并跟踪作业的执行状态等。JobManager的主要作用是协调资源分配、任务调度、故障恢复等。整个集群有且仅有一个活跃的JobManager。

3.TaskManager

TaskManager是Flink集群的工作进程。Task被调度到TaskManager上执行。TaskManager相互通信,只为在后续的Task之间交换数据。

TaskManager工作内容:

 接收JobManager分配的任务,负责具体的任务执行。TaskManager会在同一个JVM进程内以多线程的方式执行任务 。负责对应任务在每个节点上的资源申请,管理任务的启动、停止、销毁、异常恢复等生命周期。 负责对数据进行缓存。TaskManager之间采用数据流的形式进行数据交互。

4.Task

Flink中的每一个操作算子称为一个Task(任务)。Task是基本的工作单元,由Flink的Runtime来执行。每个Task在一个JVM线程中执行。多个Task可以在同一个JVM进程中共享TCP连接(通过多路复用技术)和心跳信息。它们还可能共享数据集和数据结构,从而降低每个Task的开销。

5.Task Slot

TaskManager为了控制执行的Task数量,将计算资源(内存)划分为多个Task Slot(任务槽),每个Task Slot代表TaskManager的一份固定内存资源,Task则在Task Slot中执行。

三、特性

Flink提供了四种编程模型,分别应对我们不同的场景

1.支持高吞吐、低延迟、高性能 

Flink是目前开源社区中唯一一套集高吞吐、低延迟、高性能三者于一身的分布式流式处理框架。像Apache Spark也只能兼顾高吞吐和高性能特性,主要因为在Spark Streaming流式计算中无法做到低延迟保障;而流式计算框架Apache Storm只能支持低延迟和高性能特性,但是无法满足高吞吐的要求。

2.支持事件时间和处理时间

在流式计算领域中,窗口计算的地位举足轻重,但目前大多数框架窗口计算采用的都是处理时间,也就是事件传输到计算框架处理时系统主机的当前时间。Flink能够支持基于事件时间语义进行窗口计算,也就是使用事件产生的时间,这种基于事件驱动的机制使得事件即使乱序到达,流系统也能够计算出精确的结果,保证了事件原本的时序性。

3.有状态且精确一次

所谓状态就是在流式计算过程中将算子的中间结果数据保存着内存或者文件系统中,等下一个事件进入算子后可以从之前的状态中获取中间结果中计算当前的结果,从而不须每次都基于全部的原始数据来统计结果,这种方式极大地提升了系统的性能,并降低了数据计算过程的资源消耗。

4.分布式的容错机制

Flink能够分布式运行在上千个节点上,将一个大型计算任务的流程拆解成小的计算过程,然后将Task分布到并行节点上进行处理。在任务执行过程中,能够自动发现事件处理过程中的错误而导致的数据不一致问题,在这种情况下,通过基于分布式快照技术的Checkpoints,将执行过程中的状态信息进行持久化存储,一旦任务出现异常终止,Flink就能够从Checkpoints中进行任务的自动恢复,以确保数据中处理过程中的一致性。

5.高可用且动态扩展

支持高可用性配置(无单点失效),和Kubernetes、YARN、Apache Mesos紧密集成,快速故障恢复,动态扩缩容作业等。基于上述特点,它可以7 X 24小时运行流式应用,几乎无须停机。当需要动态更新或者快速恢复时,Flink通过Savepoints技术将任务执行的快照保存在存储介质上,当任务重启的时候可以直接从事先保存的Savepoints恢复原有的计算状态,使得任务继续按照停机之前的状态运行。

6.高度灵活的窗口操作

Flink将窗口划分为基于Time、Count、Session,以及Data-driven等类型的窗口操作,窗口可以用灵活的触发条件定制化来达到对复杂流传输模式的支持,用户可以定义不同的窗口触发机制来满足不同的需求。

四、适用场景

Flink 是一个分布式流处理和批处理框架,适用于在大规模数据集上进行实时计算和批处理。以下是 Flink 的一些使用场景:

1.实时数据处理

Flink 可以接收和处理来自各种数据源的实时数据流,例如传感器数据、日志数据、交易数据等。它提供了强大的流处理能力,可以对数据流进行实时分析、转换、过滤和聚合。

2.批处理

Flink 不仅支持实时流处理,还可以进行大规模的批处理。它可以将批处理作业分解成小的任务,并在集群中并行执行。这使得 Flink 可以高效处理大量的静态数据,例如离线分析、离线计算和数据清洗等。

3.事件驱动应用程序

Flink 提供了事件时间处理和窗口计算功能,可以用于构建事件驱动的应用程序。通过对事件流进行窗口操作,可以实现诸如实时报警、实时监控和实时推荐等功能。

4.数据管道和ETL

Flink 提供了丰富的数据转换和处理功能,可以用于构建数据管道和执行 ETL(提取、转换和加载)任务。它可以将数据从一个系统提取出来,进行转换和清洗,然后加载到另一个系统中。

5.机器学习

Flink 可以与常见的机器学习框架(如 TensorFlow 和 PyTorch)集成,用于构建和训练机器学习模型。它可以将大规模数据集加载到内存中,进行模型训练和推理,并将结果写回到外部系统。

6.推荐系统

Flink 提供了实时计算和流处理功能,非常适合构建实时推荐系统。通过对用户行为进行实时分析和处理,可以实时生成个性化的推荐结果。

7.日志和监控

Flink 可以处理大规模的日志数据,并提供实时的监控和报警功能。它可以对日志进行过滤、转换和聚合,用于实时监控系统的运行状况和性能。

总之,Flink 的使用场景非常广泛,适用于各种实时计算、批处理和数据分析任务。它具有强大的性能、可伸缩性和容错性,是处理大数据的理想选择。

五、其他事宜

1.权益备注

如有侵权请联系我删除。

2.支持博主

如果您觉得此文对您有帮助,请点赞加关注加收藏。祝您生活愉快!

大数据入门系列文章

1.大数据入门-大数据是什么

2.大数据入门-大数据技术概述(一)

3.大数据入门-大数据技术概述(二)

4.大数据入门-三分钟读懂Hadoop

5.大数据入门-五分钟读懂HDFS

6.大数据入门-五分钟读懂Hive

7.大数据入门-什么是Kudu

8.大数据入门-什么是HBase

各位宝宝点个赞再走呗!!!


http://www.kler.cn/a/402978.html

相关文章:

  • MySQL学习/复习10视图/用户/权限/语言连接数据库
  • Linux线程_线程控制_线程库
  • 2023年9月GESPC++一级真题解析
  • 分层架构 IM 系统之架构演进
  • Bokeh实现大规模数据可视化的最佳实践
  • 石油化工调度台的外观如何设计更有科技感
  • 南京邮电大学算法设计-二叉树先序遍历算法动态演示
  • Springboot项目搭建(2)-用户详细信息查询
  • k8s搭建1.23版本
  • 从零开始深度学习:全连接层、损失函数与梯度下降的详尽指南
  • 【西瓜书】对数几率回归(逻辑回归)的概念与表示
  • 生成式语言模型 三范式 预训练、微调、强化反馈学习
  • 深度神经网络中不同的卷积层提取的特征有什么不同?
  • 企业项目级IDEA编辑器设置类注释、方法注释模板(仅增加@author和@date)
  • 【Linux系统编程】第四十七弹---深入探索:POSIX信号量与基于环形队列的生产消费模型实现
  • React中常用的钩子
  • 深度学习神经网络中的优化器的使用
  • Fundamental Analysis and Mean-Variance Optimal Portfolios论文阅读
  • python3 Flask应用 使用 Flask-SQLAlchemy操作MySQL数据库
  • 鸿蒙开发:ForEach中为什么键值生成函数很重要
  • # 07_ Python基础到实战一飞冲天(二)-python基础(七)--变量类型计算与输入输出
  • 鸿蒙HarmonyOS开发:一次开发,多端部署(工程级)三层工程架构
  • Hadoop 架构
  • 使用 SMB 协议从win10电脑访问同网段ubuntu电脑文件
  • Node.js 笔记(一):express路由
  • 【docker】退出 `docker run`的几种方式