flink是什么可以用来做什么

2020-04-22 09:53发布

7条回答
信阳彭于晏
2楼 · 2020-06-24 11:57

架构

Apache Flink是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
在这里,我们解释了Flink架构的重要方面。

处理无界和有界数据

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

  • 无界流有一个开始但没有定义的结束。它们不会在生成时终止并提供数据。必须持续处理无界流,即必须在摄取事件后立即处理事件。无法等待所有输入数据到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)摄取事件,以便能够推断结果完整性。

  • 有界流具有定义的开始和结束。可以在执行任何计算之前通过摄取所有数据来处理有界流。处理有界流不需要有序摄取,因为可以始终对有界数据集进行排序。有界流的处理也称为批处理。

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

部署应用程序在任何地方

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

Flink被设计成能够很好地工作于前面列出的每个资源管理器。这是通过特定于资源管理器的部署模式实现的,这种部署模式允许Flink以其惯用的方式与每个资源管理器交互。

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

以任何规模运行应用程序

Flink设计用于在任何规模上运行有状态流应用程序。应用程序被并行化成数千个任务,这些任务分布在一个集群中并发执行。因此,应用程序实际上可以利用无限数量的cpu、主内存、磁盘和网络IO。此外,Flink很容易保持非常大的应用状态。它的异步和增量检查点算法确保了对处理延迟的最小影响,同时保证了精确的一次状态一致性。

利用内存中的性能

有状态Flink应用程序针对本地状态访问进行了优化。任务状态总是在内存中维护,如果状态大小超过可用内存,则在具有访问效率的磁盘数据结构中维护。因此,任务通过访问本地(通常是在内存中)状态来执行所有计算,从而产生非常低的处理延迟。Flink通过定期和异步检查本地状态到持久存储,保证了在发生故障时的精确一次状态一致性。


应用

Apache Flink是一个用于对无界和有界数据流进行有状态计算的框架。Flink在不同的抽象级别提供多个API,并为常见用例提供专用库。
在这里,我们介绍Flink易于使用和富有表现力的API和库。

流媒体应用程序构块

可以由流处理框架构建和执行的应用程序类型由框架控制流,状态和时间的程度来定义。在下文中,我们描述了流处理应用程序的这些构建块,并解释了Flink处理它们的方法。

显然,流是流处理的一个基本方面。但是,流可能具有不同的特性,这些特性会影响流可以且应该如何处理。Flink是一个通用的处理框架,可以处理任何类型的流。

  • 有界的和无界的流:流可以是无界的或有界的,即,固定大小的数据集。Flink具有处理无界流的复杂特性,但也有专门的操作符来有效地处理有界流。

  • 实时流和记录流:所有数据都作为流生成。有两种处理数据的方法。当流生成或将其持久化到存储系统(例如文件系统或对象存储)时实时处理,并在稍后处理。Flink应用程序可以处理记录或实时流。

状态
每个重要的流应用程序都是有状态的,即只有对单个事件应用转换的应用程序才需要状态。运行基本业务逻辑的任何应用程序都需要记住事件或中间结果,以便在以后的时间点访问它们,例如在收到下一个事件时或在特定持续时间之后。

应用程序状态是Apache Flink的一等公民。可以通过查看Flink在状态处理环境中提供的所有功能来查看。

  • 多状态基元(Multiple State Primitives):Flink为不同的数据结构提供状态基元,例如原子值,列表或映射。开发人员可以根据函数的访问模式选择最有效的状态原语。

  • 可插拔状态后端(Pluggable State Backends):应用程序状态由可插拔状态后端管理和检查点。Flink具有不同的状态后端,可以在内存或RocksDB中存储状态,RocksDB是一种高效的嵌入式磁盘数据存储。也可以插入自定义状态后端。

  • 完全一次的状态一致性(Exactly-once state consistency):Flink的检查点和恢复算法可确保在发生故障时应用程序状态的一致性。因此,故障是透明处理的,不会影响应用程序的正确性。

  • 非常大的状态(Very Large State):由于其异步和增量检查点算法,Flink能够维持几TB的应用程序状态。

  • 可扩展的应用程序(Scalable Applications):Flink通过将状态重新分配给更多或更少的工作人员来支持有状态应用程序的扩展。

时间
时间是流媒体应用的另一个重要组成部分 大多数事件流都具有固有的时间语义,因为每个事件都是在特定时间点生成的。此外,许多常见的流计算基于时间,例如窗口聚合,会话化,模式检测和基于时间的连接。流处理的一个重要方面是应用程序如何测量时间,即事件时间和处理时间的差异。

Flink提供了一组丰富的与时间相关的功能。

  • Event-time Mode:使用事件时间语义处理流的应用程序根据事件的时间戳计算结果。因此,无论是否处理记录的或实时的事件,事件时间处理都允许准确和一致的结果。

  • 支持Watermark:Flink使用Watermark来推断事件时间应用中的时间。Watermark也是一种灵活的机制,可以权衡结果的延迟和完整性。

  • 延迟数据处理(Late Data Handling):当使用 watermark 在事件时间模式下处理流时,可能会发生在所有相关事件到达之前已完成计算。这类事件被称为迟发事件。Flink具有多种处理延迟事件的选项,例如通过侧输出重新路由它们以及更新以前完成的结果。

  • 处理时间模式(Processing-time Mode):除了事件时间模式之外,Flink还支持处理时间语义,该处理时间语义执行由处理机器的挂钟时间触发的计算。处理时间模式适用于具有严格的低延迟要求的某些应用,这些要求可以容忍近似结果。

分层api

Flink 根据抽象程度分层,提供了三种不同的 API。每一种 API 在简洁性和表达力上有着不同的侧重,并且针对不同的应用场景。

分层api

ProcessFunction

ProcessFunction 是 Flink 所提供的最具表达力的接口。ProcessFunction 可以处理一或两条输入数据流中的单个事件或者归入一个特定窗口内的多个事件。它提供了对于时间和状态的细粒度控制。开发者可以在其中任意地修改状态,也能够注册定时器用以在未来的某一时刻触发回调函数。因此,你可以利用 ProcessFunction 实现许多有状态的事件驱动应用所需要的基于单个事件的复杂业务逻辑。

DataStream API

DataStream API为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作,在处理事件时进行外部数据库查询等。DataStream API 支持 Java 和 Scala 语言,预先定义了例如map()reduce()aggregate() 等函数。你可以通过扩展实现预定义接口或使用 Java、Scala 的 lambda 表达式实现自定义的函数。

SQL & Table API

Flink 支持两种关系型的 API,Table API 和 SQL。这两个 API 都是批处理和流处理统一的 API,这意味着在无边界的实时数据流和有边界的历史记录数据流上,关系型 API 会以相同的语义执行查询,并产生相同的结果。Table API 和 SQL 借助了 Apache Calcite来进行查询的解析,校验以及优化。它们可以与 DataStream 和 DataSet API 无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。

Flink 的关系型 API 旨在简化数据分析、数据流水线和 ETL 应用的定义。

Libraries

Flink具有几个用于常见数据处理用例的库。 这些库通常嵌入在API中,而不是完全独立的。 因此,他们可以从API的所有功能中受益,并与其他库集成。

  • 复杂事件处理(Complex Event Processing: CEP):模式检测是事件流处理的一个非常常见的用例。Flink的CEP库提供了一个API来指定事件的模式(考虑正则表达式或状态机)。CEP库与Flink的DataStream API集成,以便在DataStreams上评估模式。CEP库的应用程序包括网络入侵检测、业务流程监视和欺诈检测。

  • DataSet API: DataSet API是Flink的核心API,用于批处理应用程序。DataSet API的原语包括map、reduce、(外部)join、co-group和iterate。所有操作都由算法和数据结构支持,这些算法和数据结构对内存中的序列化数据进行操作,如果数据大小超过内存预算,则会溢出到磁盘。Flink的DataSet API的数据处理算法受到传统数据库操作符的启发,如混合哈希连接或外部合并排序。

  • Gelly: Gelly是一个用于可伸缩图形处理和分析的库。Gelly是在数据集API的基础上实现的,并与之集成。因此,它得益于可伸缩和健壮的操作符。Gelly提供了内置的算法,比如标签传播(label propagation)、三角形枚举(triangle enumeration)和页面排名(page rank),但也提供了一个Graph API,简化了自定义图形算法的实现。



慢半拍
3楼 · 2021-08-19 18:29

Apache Flink是一种可以处理批处理任务的流处理框架。该技术可将批处理数据视作具备有限边界的数据流,借此将批处理任务作为流处理的子集加以处理。为所有处理任务采取流处理为先的方法会产生一系列有趣的副作用。

这种流处理为先的方法也叫做Kappa架构,与之相对的是更加被广为人知的Lambda架构(该架构中使用批处理作为主要处理方法,使用流作为补充并提供早期未经提炼的结果)。Kappa架构中会对一切进行流处理,借此对模型进行简化,而这一切是在最近流处理引擎逐渐成熟后才可行的。

流处理模型

Flink的流处理模型在处理传入数据时会将每一项视作真正的数据流。Flink提供的DataStream API可用于处理无尽的数据流。Flink可配合使用的基本组件包括:

  • Stream(流)是指在系统中流转的,永恒不变的无边界数据集

  • Operator(操作方)是指针对数据流执行操作以产生其他数据流的功能

  • Source(源)是指数据流进入系统的入口点

  • Sink(槽)是指数据流离开Flink系统后进入到的位置,槽可以是数据库或到其他系统的连接器



为了在计算过程中遇到问题后能够恢复,流处理任务会在预定时间点创建快照。为了实现状态存储,Flink可配合多种状态后端系统使用,具体取决于所需实现的复杂度和持久性级别。

此外Flink的流处理能力还可以理解“事件时间”这一概念,这是指事件实际发生的时间,此外该功能还可以处理会话。这意味着可以通过某种有趣的方式确保执行顺序和分组。

批处理模型

Flink的批处理模型在很大程度上仅仅是对流处理模型的扩展。此时模型不再从持续流中读取数据,而是从持久存储中以流的形式读取有边界的数据集。Flink会对这些处理模型使用完全相同的运行时。

Flink可以对批处理工作负载实现一定的优化。例如由于批处理操作可通过持久存储加以支持,Flink可以不对批处理工作负载创建快照。数据依然可以恢复,但常规处理操作可以执行得更快。

另一个优化是对批处理任务进行分解,这样即可在需要的时候调用不同阶段和组件。借此Flink可以与集群的其他用户更好地共存。对任务提前进行分析使得Flink可以查看需要执行的所有操作、数据集的大小,以及下游需要执行的操作步骤,借此实现进一步的优化。

优势和局限

Flink目前是处理框架领域一个独特的技术。虽然Spark也可以执行批处理和流处理,但Spark的流处理采取的微批架构使其无法适用于很多用例。Flink流处理为先的方法可提供低延迟,高吞吐率,近乎逐项处理的能力。

Flink的很多组件是自行管理的。虽然这种做法较为罕见,但出于性能方面的原因,该技术可自行管理内存,无需依赖原生的Java垃圾回收机制。与Spark不同,待处理数据的特征发生变化后Flink无需手工优化和调整,并且该技术也可以自行处理数据分区和自动缓存等操作。

Flink会通过多种方式对工作进行分许进而优化任务。这种分析在部分程度上类似于SQL查询规划器对关系型数据库所做的优化,可针对特定任务确定最高效的实现方法。该技术还支持多阶段并行执行,同时可将受阻任务的数据集合在一起。对于迭代式任务,出于性能方面的考虑,Flink会尝试在存储数据的节点上执行相应的计算任务。此外还可进行“增量迭代”,或仅对数据中有改动的部分进行迭代。

在用户工具方面,Flink提供了基于Web的调度视图,借此可轻松管理任务并查看系统状态。用户也可以查看已提交任务的优化方案,借此了解任务最终是如何在集群中实现的。对于分析类任务,Flink提供了类似SQL的查询,图形化处理,以及机器学习库,此外还支持内存计算。

Flink能很好地与其他组件配合使用。如果配合Hadoop 堆栈使用,该技术可以很好地融入整个环境,在任何时候都只占用必要的资源。该技术可轻松地与YARN、HDFS和Kafka 集成。在兼容包的帮助下,Flink还可以运行为其他处理框架,例如Hadoop和Storm编写的任务。

目前Flink最大的局限之一在于这依然是一个非常“年幼”的项目。现实环境中该项目的大规模部署尚不如其他处理框架那么常见,对于Flink在缩放能力方面的局限目前也没有较为深入的研究。随着快速开发周期的推进和兼容包等功能的完善,当越来越多的组织开始尝试时,可能会出现越来越多的Flink部署。

总结

Flink提供了低延迟流处理,同时可支持传统的批处理任务。Flink也许最适合有极高流处理需求,并有少量批处理任务的组织。该技术可兼容原生Storm和Hadoop程序,可在YARN管理的集群上运行,因此可以很方便地进行评估。快速进展的开发工作使其值得被大家关注。


天天
4楼 · 2021-08-19 18:32

Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。

Flink提供高吞吐量、低延迟的流数据引擎以及对事件-时间处理和状态管理的支持。Flink应用程序在发生机器故障时具有容错能力,并且支持exactly-once语义。程序可以用Java、Scala、Python和SQL等语言编写,并自动编译和优化到在集群或云环境中运行的数据流程序。

Flink并不提供自己的数据存储系统,但为Amazon Kinesis、Apache Kafka、Alluxio、HDFS、Apache Cassandra和Elasticsearch等系统提供了数据源和接收器。

Apache Flink的数据流编程模型在有限和无限数据集上提供单次事件(event-at-a-time)处理。在基础层面,Flink程序由流和转换组成。 “从概念上讲,流是一种(可能永无止境的)数据流记录,转换是一种将一个或多个流作为输入并因此产生一个或多个输出流的操作”。

Apache Flink包括两个核心API:用于有界或无界数据流的数据流API和用于有界数据集的数据集API。Flink还提供了一个表API,它是一种类似SQL的表达式语言,用于关系流和批处理,可以很容易地嵌入到Flink的数据流和数据集API中。Flink支持的最高级语言是SQL,它在语义上类似于表API,并将程序表示为SQL查询表达式。

编程模型和分布式运行时Flink程序在执行后被映射到流数据流,[18]每个Flink数据流以一个或多个源(数据输入,例如消息队列或文件系统)开始,并以一个或多个接收器(数据输出,如消息队列、文件系统或数据库等)结束。Flink可以对流执行任意数量的变换,这些流可以被编排为有向无环数据流图,允许应用程序分支和合并数据流。

Flink提供现成的源和接收连接器,包括Apache Kafka、Amazon Kinesis、HDFS和Apache Cassandra等。

Flink程序可以作为集群内的分布式系统运行,也可以以独立模式或在YARN、Mesos、基于Docker的环境和其他资源管理框架下进行部署。

状态:检查点、保存点和容错

Apache Flink具有一种基于分布式检查点的轻量级容错机制。检查点是应用程序状态和源流中位置的自动异步快照。在发生故障的情况下,启用了检查点的Flink程序将在恢复时从上一个完成的检查点恢复处理,确保Flink在应用程序中保持一次性(exactly-once)状态语义。检查点机制暴露应用程序代码的接口,以便将外部系统包括在检查点机制中(如打开和提交数据库系统的事务)。

Flink还包括一种名为保存点的机制,它是一种手动触发的检查点。用户可以生成保存点,停止正在运行的Flink程序,然后从流中的相同应用程序状态和位置恢复程序。 保存点可以在不丢失应用程序状态的情况下对Flink程序或Flink群集进行更新。从Flink 1.2开始,保存点还允许以不同的并行性重新启动应用程序,这使得用户可以适应不断变化的工作负载。


在实际生产的过程中,大量数据在不断地产生,例如金融交易数据、互联网订单数据、GPS 定位数据、传感器信号、移动终端产生的数据、通信信号数据等,以及我们熟悉的网络流量监控、服务器产生的日志数据,这些数据最大的共同点就是实时从不同的数据源中产生,然后再传输到下游的分析系统。针对这些数据类型主要包括实时智能推荐、复杂事件处理、实时欺诈检测、实时数仓与 ETL 类型、流数据分析类型、实时报表类型等实时业务场景,而Flink 对于这些类型的场景都有着非常好的支持。


征戰撩四汸
6楼 · 2021-09-14 17:28

   Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。

   Apache Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink 不仅可以运行在包括 YARN、 Mesos、Kubernetes 在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。事实证明,Flink 已经可以扩展到数千核心,其状态可以达到 TB 级别,且仍能保持高吞吐、低延迟的特性。世界各地有很多要求严苛的流处理应用都运行在 Flink 之上。

Flink特性

  1. 支持批处理和流处理 同时支持高吞吐、低延迟、高性能 支持事件事件概念 支持窗口操作 支持有状态计算 基于轻量级分布式快照实现的容错

  2. 自动反压机制 基于JVM实现独立的内存管理 集成yarn/hdfs/hbase和其它Hadoop生态系统的组件

Flink使用场景

  • 事件驱动(Event-driven Applications)
    1.车载传感器
    2.机械设备实时故障检测

  • 实时分析(Data AnalyticsApplications)
    1.实时只能推荐
    2.实时欺诈检测

  • 管道式ETL(Data Pipeline Applications)




freediandianer
7楼 · 2021-09-28 11:57

Apache Flink是近几年大火的数据处理引擎。受到各大厂商的推崇并且已经应用与实际的业务场景中。很多公司在进行选型的时候都会选择Apache Flink作为选型的对象。那么Apache Flink对于企业来说能够做什么?


在实际的生产过程中有大量的数据实时性分析需求,例如实时推荐,异常告警,传感器信令分析等需求。随着技术的不断发展对于实施指标的需求也越来越多,而且时效性要求越来越高。使用传统的技术方案等待数据落地后再进行分析那么就无法保证数据的时效性信息。所以在处理某些场景的业务时需要一个能够保证时效性又有能力处理大规模数据的数据引擎。那么Apache Flink是个非常好的选择。

相关问题推荐

  • 回答 9

    按f12没反应的可以选中域名栏,再按就打开了

  • 回答 81
    已采纳

    女生学UI设计或者互联网营销都比较适合些学UI设计,也比较容易上手,经过学习,能快速掌握设计的技能!学互联网营销,比较符合现在的趋势,而且岗位比较多,新媒体,运营,推广等,都是十分不错的选择!...

  • 回答 8

    第一个就是勒,只能选择一个图层预合成的时候用,就是把你现在的图像放到与预合成里面的合成中,而图像上的效果还有调节的变换参数等等,都会应用到预合成上,预合成里面是最原始的图像第二个就是可以选择多个合成进行预合成的,就是把那些图层带效果都放到预...

  • 回答 37

    感觉还是不会消亡吧,打游戏还是网吧更有氛围;而且家里有电脑能上网已经持续了很久的一段时间了,但网吧还是一直存在,说明还是有存在的价值

  • 回答 8

    1、空缺帧的生成方式不同帧采样:在调整视频的播放速度之后,多出来的帧或空缺的帧按现有的帧来生成。光流法:软件根据上下帧来推断像素移动的轨迹,自动生成新的空缺帧。帧混合:混合上下两帧合并生成一个新的帧来填补空缺。2、渲染速度不同帧采样:渲染起来...

  • 回答 18

    一般现在用网易云的比较多

  • 回答 12

    其实wps和office的关系并不存在谁抄袭谁的,给你科普下这两个软件。1.office的前身叫ms-word,1983年发布,是第一个所见即所得的文字编辑器,1985年word登录苹果mac平台。wps1988发布,请不要罔顾事实说office抄袭WPS。2.wps刚发布凭借原生支持中文的优势快速...

  • 回答 35

    在自学之前一定要考虑好以下三个问题学什么?虽说网上有各种各样的教程、攻略,该买什么书,怎么入门,看哪个视频。但对于零基础的小白来讲,面对纷繁复杂的信息,如果不做筛选的话,很容易越看越乱,最后白白浪费了时间。所以,选择自学,首先要有清晰的学习...

  • 回答 11

    实在没办法纠正的话,那就尽量就是自己心态正些,不跟着同事的思维模式考虑问题不要受太大影响不去放在心上就好。

  • 回答 9

    如果同事的作风很过分了,涉及自己的底线了可以直接表明,如果只是自己的心里觉得不爽的话,可以尝试沟通改变一下相处方式。

  • 回答 8

    我觉得以工作为主,尽量不要穿插自己的私人生活情感进去,不然很多事情不是很好处理尤其不要产生情感的纠葛。

  • 回答 2

    编程里面没有空格的东西

  • 回答 6

    当你问这个问题的时候,我就知道你什么都不会!当然,如果你有了很结实的基础的话,还是不知道要怎么编曲,那么,你只有学习!----------首先你得要明白,编曲需要很多的音乐知识!----------在这里询问,你相信你不会得到很好很详细的回答,只有给你许些建议...

  • 小米MIX42021-08-17 15:44
    回答 9

    最近的5G手机市场比较稳定,小米也在这时被爆出了全新5G旗舰消息,并且就是众多米粉们期待的小米MIX4既然是全新的5G旗舰,配置上自然会和当下的潮流结合,带来消费者期待的产品。小米MIX4是小米MIX系列的第四代产品,同时也是首款5G产品,自然在性能方面做到...

  • 回答 11

    基因编辑技术指能够让人类对目标基因进行编辑,实现对特定DNA片段的敲除、加入等。在过去几年中, 以ZFN (zinc-finger nucleases)和TALEN (transcription activator-like effector nucleases)为代表的序列特异性核酸酶技术以其能够高效率地进行定点基因组编辑,...

  • 回答 24

    那是存在电影和电视剧中的,但现实工作中也存在很多it大牛,他们将各种应用发挥到淋漓尽致,不断应用在人们生活中,大数据技术,人工智能等,在生活中越来越科技化,快速化。...

没有解决我的问题,去提问