什么是 Apache Flink?
Apache Flink 是开源的分布式引擎,用于对无界限(流)和有界限(批处理)数据集进行有状态处理。流处理应用程序旨在连续运行,最大限度地减少停机时间,并在摄取数据期间对其进行处理。Apache Flink 专为低延迟处理、在内存中执行计算、实现高可用性、消除单点故障以及水平扩展而设计。
Apache Flink 的功能包括具有严格一次一致性保证的高级状态管理,以及具有复杂乱序处理和延迟数据处理的事件时间处理语义。Apache Flink 专为流式传输优先而开发,为流处理和批处理提供了统一的编程接口。
为什么使用 Apache Fink?
由于 Apache Flink 具有广泛的功能,因此其可用于构建许多不同类型的流式处理和批处理应用程序。
Apache Flink 提供支持的一些常见应用程序类型包括:
- 事件驱动的应用程序,其中从一个或多个事件流中摄取事件并执行计算、状态更新或外部操作。借助有状态处理,可在单一消息转换之外实现逻辑,其中结果取决于摄取事件的历史记录。
- 数据分析应用程序,从数据中提取信息和见解。传统上通过查询有限的数据集、重新运行查询或修改结果以纳入新数据来执行此类应用程序。借助 Apache Flink,可以通过持续更新、流式传输查询或实时处理摄取的事件、持续发出和更新结果来执行分析。
- 数据管道应用程序,其中转换和丰富要从一个数据存储移动到另一个数据存储的数据。传统上,提取-转换-加载(ETL)操作是定期分批执行的。借助 Apache Flink,可以持续执行该流程,将数据以低延迟移动到其目标。
Apache Flink 如何运作?
Flink 是一款高吞吐量、低延迟的流处理引擎。Flink 应用程序由任意复杂的非循环数据流图组成,图形中涵盖流和转换。数据从一个或多个数据来源提取并发送到一个或多个目标。来源系统和目标系统可以是流、消息队列或数据存储,包括文件、常用数据库和搜索引擎。转换可以是有状态的,例如随时间窗口的聚合或复杂模式检测。
通过两种不同的机制实现容错:以检查点自动和定期检查应用程序状态,将其复制到持久性存储中,以便在出现故障时自动恢复;按需保存点,其中保存一致的执行状态映像,允许停止和恢复、更新或分流您的 Flink 作业,在停止和重启后保留应用程序状态。检查点和保存点机制是异步的,在应用程序持续处理事件的同时,在不会“停止世界转动”的情况下拍摄一致的状态快照。
Apache Flink 有哪些优点?
同时处理无界限(流)和有界限(批处理)数据集
Apache Flink 既可以处理无界限数据集,也可以处理有界限数据集,即流和批处理数据。无界限流具有起点,但实际上是无限的,永远不会结束。从理论上讲,处理永远不会停止。
有界限数据(如表)是有限的,可以在有限的时间内从头到尾进行处理。
Apache Flink 提供的算法和数据结构支持通过同一个编程接口进行有界限处理和无界限处理。处理无界限数据的应用程序会持续运行。处理有界限数据的应用程序将在到达输入数据集的末尾时结束其执行。
大规模运行应用程序
Apache Flink 旨在运行几乎任何规模的有状态应用程序。可以并行处理成千上万个任务,这些任务同时分布在多台计算机上。
状态还进行分区和水平分布,从而可在多台计算机上维护数 TB 的容量。状态以增量方式点查到持久性存储。
内存中的性能
流经应用程序和状态的数据在多台计算机上进行分区。因此,可以通过访问本地数据(通常是内存中的数据)来完成计算。
严格一次的状态一致性
单个消息转换之外的应用程序是有状态的。业务逻辑需要记住事件或中间结果。Apache Flink 可以保证内部状态的一致性,即使在出现故障以及应用程序停止和重启时也是如此。每条消息对内部状态的影响总是严格应用一次,无论应用程序在恢复或重启时是否可能收到数据来源的副本。
广泛的连接器
Apache Flink 具备许多经过经验的连接器,可以连接到流行的消息传递和流式传输系统、数据存储、搜索引擎和文件系统。一些示例包括 Apache Kafka、Amazon Kinesis Data Streams、Amazon SQS、Active MQ、Rabbit MQ、NiFi、OpenSearch 和 ElasticSearch、DynamoDB、HBase 以及任何提供 JDBC 客户端的数据库。
多级别的抽象
Apache Flink 为编程接口提供多级别的抽象。在较高级别的流式传输 SQL 和 Table API 中,使用熟悉的抽象,例如表、联接和分组。DataStream API 提供较低级别的抽象,但同时赋予更多的控制,包括流、窗口化和映射的语义。最后,ProcessFunction API 提供对每条消息处理的精细控制和状态的直接控制。所有编程接口均可与无界限(流)和有界限(表)日期集无缝协作。可以在同一个应用程序中使用不同级别的抽象,将其作为解决每个问题的正确工具。
多种编程语言
Apache Flink 可以使用多种语言进行编程,从高级流式处理 SQL 到 Python、Scala、Java,以及其他 JVM 语言,例如 Kotlin。
有哪些 Apache Flink 使用案例?
Apache Flink 使用案例包括:
-
欺诈检测、异常检测、基于规则的提醒、实时用户体验个性化是事件驱动型应用程序的使用案例示例。Flink 非常适合如下使用案例:需要以有状态的方式处理事件流,考虑随时间推移的演变,检测复杂的模式,或者计算时间段内的统计数据以检测与预期阈值的偏差。
-
质量监控、实时数据的临时分析、点击流分析、产品实验评估是 Flink 可以有效支持的流式传输分析使用案例。利用 SQL 或 Table API 编程接口的高级别抽象,可以对流式传输实时数据和批量历史数据运行相同的分析。
-
监控文件系统并将数据写入日志,将事件流具体化到数据库,逐步构建和完善搜索索引,这些都是持续 ETL 有效支持的使用案例。利用一组广泛的连接器,Flink 可以直接从多种类型的数据存储中读取数据,提取更改事件流,甚至可以直接捕获更改。通过持续提取和处理更改,并且直接更新目标系统,Flink 可以将数据同步的延迟缩短至几秒钟或更短。
谁会使用 Apache Flink?
NortonLifeLock
NortonLifeLock 是一家全球网络安全和互联网隐私公司,为数百万客户提供设备安全以及家庭和家人的身份和在线隐私方面的服务。
NortonLifeLock 将 VPN 作为免费增值服务提供给用户。因此,他们需要实时强制执行使用限制,以阻止免费增值用户使用超出其用量限制的服务。NortonLifeLock 面临的挑战是以可靠且具有成本效益的方式达成此目标。
NortonLifeLock 简化了采用 Apache Flink 的用户和设备级聚合的实现。
Samsung SmartThings
作为 Samsung 的独立子公司,SmartThings 是全球领先的物联网生态系统之一,它为所有人打造最轻松的智能家居方式。
Samsung SmartThings 遇到了诸如将资源保留给单个应用程序之类的问题。未能保留资源会导致应用程序在处理数据时出现延迟和性能下降。这最终使公司在维护运营中的工作负载方面产生了高昂的开销。他们必须重新设计数据平台架构。
公司从 Apache Spark 转为使用 Apache Flink。
BT Group
BT Group 是英国领先的电信和网络提供商,也是全球通信服务和解决方案的领先提供商,为 180 个国家/地区的客户提供服务。其在英国的主要活动包括提供固定语音、移动、宽带和电视(包括体育),以及通过聚合的固定和移动网络向消费者、企业和公共部门客户提供一系列产品和服务。
BT 需要一款服务监控应用程序来支持 Digital Voice 的推出,这是其全新的消费类产品,可通过其英国宽带网络进行高清语音通话。
BT 使用 Apache Flink 构建事件驱动的分析服务,用于摄取、处理和可视化服务数据。
Autodesk
Autodesk 是领先的 3D 设计和工程软件提供商,除了软件开发和软件交付,公司希望能为客户创造更多价值。该公司还希望确保其全球数百万用户在运行该软件时,获得最佳体验。
Autodesk 为创造新事物的人们制作软件。他们为两亿多位客户提供服务。公司需要消除孤岛,以便更快地发现和修复客户问题。他们希望以一致的方式与小型运营团队一起收集和衡量指标,而不会增加成本或造成数据锁定。
NHL
美国国家冰球联盟(NHL)是北美四大职业团体运动联盟中历史第二悠久的联盟。如今,NHL 由 32 个成员俱乐部组成,每个俱乐部都反映了联盟的国际构成,球队名单上有来自 20 多个国家/地区的球员。
NHL 面临着多项技术挑战,例如确定预测具有大量不确定性的事件所需的功能和建模方法,以及确定如何使用流式传输 PPT 传感器数据来识别争球发生的位置、参与的球员以及每位球员赢得争球的概率,所有这些都在数百毫秒之内完成。
利用 Apache Flink,NHL 不仅能够预测赢得争球的球员,还能够为以实时且具有成本效益的方式解决许多类似的问题奠定基础。
Poshmark
Poshmark 是领先的社交市场,为女士、男士、儿童、宠物、家居等提供全新和二手穿搭风格。公司在美国、加拿大、澳大利亚和印度拥有超过 8000 万注册用户的社区,该社区正在塑造购物的未来,使其变得简单、社交和可持续。
Poshmark 一直专注于通过个性化和增强用户体验来实现顶线增长。最初使用批处理实现个性化和安全性的方法并未达到改善客户体验的预期目标。
Poshmark 使用 Apache Flink 的实时数据丰富功能设计了实时个性化。
AWS 如何帮助在云端运行 Apache Flink 应用程序?
适用于 Apache Flink 的亚马逊托管服务是一款用于运行 Apache Flink 应用程序的完全托管的解决方案。适用于 Apache Flink 的亚马逊托管服务降低了构建、管理 Apache Flink 应用程序以及与其他 AWS 服务集成的复杂性。借助适用于 Apache Flink 的亚马逊托管服务,无需管理服务器,也没有最低费用或设置成本。默认情况下,该设置高度可用。应用程序状态完全托管,并且存储至高持久性后端以实现容错。应用程序由简单的 API 控制,该 API 用于停止、启动、配置和扩展应用程序。
适用于 Apache Flink Studio 的亚马逊托管服务为 Apache Flink 提供交互式的笔记本界面。使用 Apache Zeppelin 笔记本,可以在 Apache Flink 上运行 SQL、Python 和 Scala 代码以进行开发和试验、数据检查或可视化。
Amazon EMR 还支持作为 YARN 应用程序的 Apache Flink,因此您可以管理资源,同时在集群中运行其他应用程序。
Apache Flink 原生支持 Kubernetes。可以在 Amazon Elastic Kubernetes Service(Amazon EKS)等容器化环境中自行托管 Apache Flink,也可以使用 Amazon Elastic Compute Cloud(Amazon EC2)完全自行管理。
立即创建账户,开始在 AWS 上使用 Apache Flink。