Apache Flink概述

avatar
作者
筋斗云
阅读量:6

Apache Flink概述

在这里插入图片描述

Apache Flink 是开源的分布式引擎,用于对无界限(流)和有界限(批处理)数据集进行有状态处理。

在这里插入图片描述

流处理应用程序旨在连续运行,最大限度地减少停机时间,并在摄取数据期间对其进行处理。

Apache Flink 专为低延迟处理、在内存中执行计算、实现高可用性、消除单点故障以及水平扩展而设计。

在这里插入图片描述

Apache Flink 的功能包括具有严格一次一致性保证的高级状态管理,以及具有复杂乱序处理和延迟数据处理的事件时间处理语义。

Apache Flink 专为流式传输优先而开发,为流处理和批处理提供了统一的编程接口。


Apache Filnk 四大核心

Apache Flink 构建在四个核心基石之上,它们分别是流处理、时间、状态和快照。

在这里插入图片描述

1. 流处理(Streaming)

在这里插入图片描述

  • 流处理是 Apache Flink 最基础、最核心的能力之一。它指的是对无限数据流的实时处理和分析能力。

在这里插入图片描述

  • 与批处理不同,流处理系统能够在数据到达时立即处理它们,而不需要等待整个数据集就绪。

在这里插入图片描述

  • 这种实时处理能力使得 Flink 特别适合处理需要低延迟和实时反馈的应用场景。
(1) 事件驱动处理
  • Flink 是基于事件驱动的处理模型。它能够按照事件发生的顺序处理数据,而不是依赖于固定的批次大小或固定的时间间隔。

  • 这种特性使得 Flink 能够处理高度动态的数据流,并根据实际的数据到达情况进行即时响应。

传统应用程序架构和事件驱动应用程序区别:

在这里插入图片描述

事件驱动应用基于事件或消息的传递来触发和处理操作。这种应用架构不依赖于同步的请求-响应模式,而是通过异步处理事件来实现。

  • 异步处理: 应用程序不需要等待请求的即时响应,而是在事件发生时立即触发相应的处理逻辑。

  • 松耦合: 组件之间的通信通过事件传递,这使得系统更加灵活和可扩展。

  • 实时性和响应性: 事件驱动应用常用于需要实时处理和快速响应的场景,如实时数据分析、IoT系统等。


传统事务型应用通常遵循请求-响应模式,客户端发起请求,服务器处理请求并返回响应。

  • 同步处理: 操作按照顺序执行,每个操作完成后才会进行下一个操作。

  • 事务性操作: 应用使用事务来确保数据的原子性、一致性、隔离性和持久性(ACID属性)。


(2)窗口操作
  • Flink 提供了丰富的窗口操作支持,允许用户根据时间、数量或者其他自定义的条件对数据流进行切分和聚合。

  • 常见的窗口类型包括滚动窗口(Tumbling Windows)、滑动窗口(Sliding Windows)、会话窗口(Session Windows)等,每种窗口类型都适用于不同的应用场景和数据处理需求。

在这里插入图片描述

  • Time Window 是根据时间对数据流进行分组的:
  • 翻滚时间窗口(Tumbling Time Window)。翻滚窗口能将数据流切分成不重叠的窗口,每一个事件只能属于一个窗口。eg.统计每一分钟中用户购买的商品的总数,需要将用户的行为事件按每一分钟进行切分。
  • 滑动时间窗口(Sliding Time Window),在滑窗中,一个元素可以对应多个窗口。eg.每30秒计算一次最近一分钟用户购买的商品总数。
  • Count Window 是根据元素个数对数据流进行分组的:
  • 翻滚计数窗口(Tumbling Count Window),eg.每当窗口中填满100个元素了,就会对窗口进行计算。

这里就先介绍这几种,后面博主会再详细介绍一下窗口机制~


(3) 事件时间和水印
  • 事件时间是 Flink 中一个重要的概念,它允许根据数据流中的实际事件时间来进行数据处理和窗口计算,而不是基于处理数据的系统时间。
  • 水印(Watermark)是一种机制,用于处理乱序事件数据,帮助 Flink 在事件时间处理中实现准确性和完整性。
    这里先了解一下,后面博主会再详细介绍~
(4)状态管理
  • 流处理通常涉及到处理有状态的数据,例如需要跟踪某个时间窗口内的累计值或者连接操作的中间状态。

在这里插入图片描述

  • Flink 提供了强大的状态管理机制,允许开发者在流处理任务中维护和操作状态。
  • 这些状态可以持久化到分布式存储中,以确保在发生故障时能够恢复状态并继续处理数据。

(5) Exactly-Once 语义
  • Flink 支持 Exactly-Once 语义,这意味着每条数据都能够精确地被处理一次,不会丢失也不会重复处理。
    在这里插入图片描述

  • 这种保证是通过事务性检查点(Transactional Checkpoints)和状态快照(State Snapshots)来实现的,确保了数据处理的准确性和一致性。

(6)分布式流处理:

在这里插入图片描述


2. 时间(Time)

  • 在 Apache Flink 中,时间是一个重要的概念,特别是在处理实时数据流时。
  • Flink 引入了事件时间(Event Time)、处理时间(Processing Time)和摄取时间(Ingestion Time)的概念,用于管理和处理事件数据的时间属性。

在这里插入图片描述

  • 事件时间允许基于事件发生的实际时间来进行数据处理,而处理时间则是基于处理数据的机器的系统时间,而摄取时间则是基于接收数据的系统时间。

在这里插入图片描述

  • Flink 的时间概念使得开发者能够精确控制和处理数据的时间特性,从而确保数据处理的准确性和一致性。

3. 状态(State)

  • 状态在流处理中是一种持久化存储数据的能力,用于保存和管理处理过程中的中间结果或者关键信息。
  • Apache Flink 提供了强大的状态管理机制,允许用户在流处理任务中维护和操作状态。

在这里插入图片描述

  • 这些状态可以是简单的计数器,也可以是复杂的数据结构,比如聚合结果、窗口信息等。

  • 状态的有效管理使得 Flink 能够处理有状态的数据流应用,例如实时数据的聚合、连接、分析等操作。
    在这里插入图片描述


4. 快照(Snapshots)

  • 快照是指 Apache Flink 在流处理过程中周期性地创建的分布式状态的一致性备份。

  • 快照捕获了当前流处理任务的所有状态信息,包括中间结果、窗口状态等,并保存在持久化存储中(通常是分布式文件系统或者数据库)。
    在这里插入图片描述

  • 这种机制保证了在发生故障时能够快速恢复和重启任务,而无需重新处理所有数据。

  • 快照也支持 Flink 的 exactly-once 语义,即保证每条数据都能精确地被处理一次,从而确保数据处理的准确性和完整性。
    在这里插入图片描述


欢迎点赞收藏~后续会更新更多干货。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!