Apache Flink 介绍

3 篇文章 0 订阅

Flink

什么是Flink?

Flink是一个框架和分布式处理引擎,用于对无限制和有限制的数据留进行有状态的计算。Flink被设计为可在所有常见的集群环境中运行,以内存速度和任何规模执行计算。

处理无界和有界数据

任何类型的数据都是作为事件流产生的。信用卡交易,传感器测量,机器日志或网站移动应用程序上的用户交互,所有这些数据均作为流生成。

数据可以作为无界流或有界流处理。

  1. 无界流有一个起点,但没有定义的终点。它们不会终止并在生成数据时提供数据,无界流必须被连续处理,即事件在被摄取后必须被及时处理。无法等待所有输入数据到达,因为输入时无界的,并且在任何事件都不会完成,处理无边界数据通常需要以特定顺序(例如事件发生的顺序)来摄取事件,一遍能够推断出结果的完整性。

  2. 有界流具有定义的开始和结束。可以通过在执行任何计算之前提取所有数据来处理有界流。由于有界数据始终可以排序,因此不需要有序摄取即可处理有界流。绑定流的处理也被称为批处理。

    在这里插入图片描述

Flink擅长处理无边界和有界的数据集。 对事件和状态的精确控制使Flink的运行时能够在无限制的流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部进行处理,从而产生出色的性能。

随部署应用程序

Flink是一个分布式系统,需要计算资源才能执行应用程序。Flink与所有常见的集权资源管理器(如Hadoop YARN,Mesos和Kubernetes)集成,但也可以设置为作为独立集群运行。

Flink旨在与前面列出的每个资源管理器兼容。这是通过特定于资源管理器的部署模式实现的,该模式允许Flink惯用方式与每个资源管理器进行交互。

部署Flink应用程序时,Flink会根据应用程序配置的并行性自动识别所需的资源,并向资源管理器请求它们。如果发生故障,Flink会通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信均通过REST调用进行。简化了Flink在许多环境中的集成。

任意规模运行应用程序

Flink旨在运行任何规模的有状态流应用程序。将应用程序并行化可能在集群中分布并同时执行的数千个任务。因此,应用程序几乎可以利用无限数量的CPU,主内存,磁盘和网络IO。并且,Flink易于维护非常大的应用程序状态。它的异步和增量检查点算法可确保对处理延迟的影响降至最低,同时保证一次状态一致性。

生产环境中运行的Flink应用程序的可扩展性数字:

  • 每天处理数万亿事件的应用程序
  • 维护多个TB状态的应用程序
  • 运行在数签个内核上的应用程序

什么是有状态功能?

状态功能是一种API,可简化构建分布式状态应用程序的过程。 它基于具有持久状态的功能,这些功能可以在强大的一致性保证下进行动态交互。

有状态功能应用

有状态功能是存在于代表实体的多个实例中的一小段逻辑/代码,类似于参与者。通过消息调用函数,它们是:

  • 有状态的

    函数具有嵌入式的容错状态,可以像变量一样在本地访问。

  • 虚拟

    就像FaaS一样,函数不会保留资源-不活动的函数不会消耗CPU/内存。

什么是功能即服务(FaaS)?

“功能即服务”(或被称为FaaS)是一种在无状态容器中运行的事件驱动型计算执行模式,这些功能将利用服务来管理服务器端逻辑和状态。

它允许开发人员以功能的形式来构建,运行和管理这些应用包,无须维护自己的基础架构。

FaaS是一种实现无服务器计算的方法,藉此开发人员可以编写业务逻辑,然后再完全由平台管理的Liunx容器中执行这些业务逻辑。

该平台通常位于云端,但模型正在扩展至包含内部部署和混合部署。

无服务会对基础架构问题进行抽象处理,例如管理或置备服务器及开发人员的资源分配,并将其提供给平台(比如红帽),这样开发人员就可以专注于编写代码和实现业务价值。

功能是一个运行业务逻辑的软件。应用可以有许多功能组成。

使用FaaS模型是通过无服务器架构来构建应用的方法之一,但随着无服务器模式的日渐普及,开发人员正在吕兆支持构建五服务器微服务无状态容器的解决方案。

以下是FaaS的一些常见实例:
  • AWS Lambda
  • Google云功能
  • Microsoft Azure 功能(开源)
  • OpenFass(开源)

功能即服务是如何工作的?

FaaS为开发人员提供了一种运行应用的抽象方式,可以在无需管理服务器的情况下响应事件。例如,上传文件可以触发自定义代码,从而将文件转码为各种格式。

FaaS基础架构通常是按需计量的,主要通过事件驱动型模式进行,因此它会随时待命,但不需要任何服务器进程在后台持续运行(这一点于平台即(Pass)不同)。

现代PaaS解决方案提供了无服务功能(作为通用工作流的补一份),藉此开发人员可以实现应用的部署,从而模糊了PaaS和FaaS之间的界线。

实际上,现代应用将由一下解决方案混合而成:功能、微服务和长期运行的服务。

云提供商会让您的功能处于可用状态并管理资源分配。由于功能是事件驱动而不是资源驱动的,因此它们很容易进行扩展。

为了发挥部分优势,其体系架构会受到一定制约(例如对功能执行施加时间限制),因此需要做到功能的快速启动和运行。

功能会在毫秒内启动并处理各个请求。如果您的功能有多个同步请求,系统将创建尽可能多的功能副本来满足需求。

当需求下降时,应用会自动减少功能副本的数量。动态扩展是FaaS的一项优势,而且颇具有成本效益,因为提供商仅对使用的资源收费,而不对空闲事件收费。

在内部运行时,这种动态特性还可以提高平台密度,从而允许运行更多工作负载并优化资源消耗。

需要横向扩展的事件驱动服务可作为功能和RESTful应用进行工作。

FaaS非常适合大数据量的交易,经常发生的工作负载,例如报表生成,图像处理或任何计划任务。常见的FaaS用例包括数据处理、loT服务、移动或Web应用。

可使用FaaS构建完全无服务器化的应用,也可以打造部分无服务器,部分传统微服务组件的应用。

FaaS的优势
  • 提高开发人员的生产率并缩短开发时间
  • 不负责服务其管理
  • 易于扩展,且横向扩展由平台管理
  • 仅在需要时消耗资源或支付付费
  • 几乎可以用任何编程语言来编写功能

应用程序由具有多种功能的模块组成,可以与一下模块任何交互:

  • 一次语义

    状态和消息传递齐头并进,提供了一次精确的消息/状态语义。

  • 逻辑录址

    函数通过逻辑地址相互传递消息。无需发现服务。

  • 动态和循环消息

    消息传递模式无需预先定义为数据流(动态),也不限于DAG(循环)。


为无服务器架构构建的运行时

有状态功能运行时旨在提供一组类似于无服务特征的属性,但适用于有状态问题。

在这里插入图片描述

运行时是建立在Apache弗林克,具有以下设计原则:

  • 逻辑计算/状态并置

    消息、状态访问/更新和功能调用被紧密地管理在一起。这确保了开箱即用的高度一致性。

  • 物理计算/状态分离

    功能可以远程执行,消息和状态访问作为调用请求的一部分提供。这样,可以像无状态流程一样管理功能,并支持快速扩展,滚动升级和其他常见的操作模式。

  • 语言独立性

    函数调用使用简单的基于HTTP/gRPC的协议,因此可以轻松地此各种语言实现函数。

这使得可以在 Kubernetes部署,FaaS平台或微服务执行功能,同时在功能之间提供一致的状态和轻量级消息的传递。


主要好处

  • 动态消息传递

    该API允许您构建和组合可以动态地彼此通信得函数。与传统流处理拓扑的非循环性质相比,这为您提供了更大的灵活性。

  • 一致状态

    功能可以保证持久的本地状态,并与功能之间的消息传递集成在一起。这为您提供了一次状态访问/更新和开箱即用保证高效消息传递的效果。

  • 多国语言支持

    可以使用任何可以处理HTTP请求或启动gRPC服务器的编程语言来实现功能,并且最初支持Python,Go,JavaScript和Rust等语言添加更多JDK。

  • 无需数据库

    状态持久性和容错能力建立在Flink强大的分布式快照模型的基础上。这只需要一个简单的Blob存储层(例如S3,GCS,HDFS)即可存储状态快照。

  • 云原生

    Stateful Function的状态和组合方法可以与Kubernetes,Knative和AWS Lambda等现代无服务其平台功能结合使用。

  • 无状态操作

    状态访问时函数调用的一部分,因此有状态函数应用程序的行为就像无状态进程,可以以相同的简单性和优势进行管理,例如快速可伸缩性,从零扩展到零和滚动/零停机升级。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值