Flink基础篇|Flink是什么?

2024-02-02 11:33:18 浏览数 (2)

前言

我们通常说的Flink是来Apache Flink,他是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行。现在越来越多的企业公司和个人都在使用Flink,来使用他的特性解决一些实时问题。

什么是Flink

官方地址:https://flink.apache.org/

在官网上开头有一段话就讲到Apache Flink,翻译过来就是:Apache Flink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态计算。Flink旨在在所有常见的集群环境中运行,以内存速度和任何规模执行计算。从上面的介绍中,我们可以提取到Apache Flink是一个流式计算框架,也是流处理引擎。

  • 流式计算框架:作为流式计算框架,用于处理无限量的数据,并在真正的实时上下文中运行。
  • 流处理引擎:Flink是一个分布式的、高性能的、可伸缩的、容错的流处理引擎,它支持批处理和流处理,并提供了丰富的API和库,是实时数据处理的理想选择。

Flink中的事件流

在Flink中,任何类型的数据都可以形成一种事件流,数据可以被作为 无界 或者 有界 流来处理。

  • 无界流

有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。例如监听数据,消费数据(信用卡消费时给出消费判断和消费告警

  • 有界流

有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。例如在读取文件数据,文件在被读取时是已经确定大小,确定了数据。

Flink作为一个引擎可以存储有状态的数据流。一般情况下,我们在其他框架中,都是计算一个结果后存储在数据库,例如存储在redis、mysql,然后再读取出来做一些其他业务逻辑计算。而在Flink中有状态的数据流是指在进行数据处理时,数据流中包含的状态信息可以被存储和访问,以便在处理过程中进行状态的计算和更新。与无状态的数据流相比,有状态的数据流需要更多的存储和计算资源,因为需要维护状态的一致性和容错性。

Flink的能力

Flink可以在一个单独的机器上运行,也可以在一个集群上运行,并具有高效的数据处理能力,特别是对于大规模数据集。从官网来看,Flink有以下5种能力:

  • 正确性保证:Flink提供了精确一次的状态一致性保障,这使得它能够保证数据的准确性和可靠性。Flink还支持实践时间驱动处理和延迟时间处理。
  • 分层API:Flink提供了多种编程模型和API,包括DataStream API、DataSet API、Table API、BatchData API、ProcessFunction(时间和状态)和SQL API等,以及一系列的算子库,用于执行常见的流处理任务。
  • 聚焦运维:灵活部署,支持单节点和集群部署;支持高可用;支持savekpoint。
  • 支撑大规模计算:支持水平扩展,增量checkpoint,从官网可以看到:处理每天处理数万亿的事件,应用维护几TB大小的状态和应用在数千个内核上运行
  • 低延迟和高吞吐:Flink卓越的性能是在内存计算,有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。任务通过访问本地(通常在内存中)状态来进行所有的计算,从而产生非常低的处理延迟。

另外,Flink支持多种资源管理框架,Flink可以在包括YARN、Mesos、Kubernetes在内的多种资源管理框架上运行,并支持在裸机集群上独立部署。

总结

本文通过Flink官网来了解Flink是什么,Flink是一个事件驱动框架引擎,得力于Flink的能力,我们可以解决工作中的很多事情,Flink主要应用场景包括实时数据计算、实时数据仓库和ETL、事件驱动型场景(如告警、监控)等。


我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞