Flink基础概念
1. 什么是 Flink?
Apache Flink 是一个分布式计算框架,专注于流处理(Stream Processing),也支持批处理任务(Batch Processing)。
其主要特点包括:
- 流优先设计: 认为批处理是流处理的一个特例。
- 高吞吐量和低延迟: 可以在高数据量下高效运行,并提供实时响应。
- 分布式架构: 天然支持分布式计算,支持多种部署模式,如独立部署、YARN 和 Kubernetes。
2. Flink 与 Spark 和 Kafka Streams 的差异
特性 | Flink | Spark | Kafka Streams |
处理模式 | 主要支持流处理,同时支持批处理 | 主要支持批处理,扩展支持流处理 | 专注于流处理 |
延迟 | 低延迟,支持亚秒级响应 | 延迟相对较高(Micro-batch) | 低延迟,实时性好 |
事件时间支持 | 强大的事件时间和乱序处理支持 | 基本支持,但较为有限 | 支持事件时间,但功能较少 |
容错机制 | Checkpoint 和状态一致性保证 | 依赖于 RDD 的容错机制 | Kafka 自身提供容错 |
使用场景 | 实时分析、复杂流式计算、多维度数据 | 离线批处理,适合数据管道 | 简单实时流处理和转换 |
3. Flink 核心概念
流式和批处理
- 流处理(Stream Processing): 持续处理实时数据流,是 Flink 的核心功能。流可以是无限(实时流,如 Kafka 数据)或有限(批流,如文件流)。
- 批处理(Batch Processing): 一次性处理静态数据集,Flink 将其视为特殊的“有限流”。
事件时间与乱序处理
- 事件时间(Event Time): 数据生成时的时间戳,与数据的实际发生时间一致。
- 处理时间(Processing Time): 系统接收数据的时间,容易受延迟影响。
- 水位线(Watermark): 用于指示事件时间的进展,帮助框架处理乱序事件。
窗口(Window)
- 将流数据分割为有限片段的逻辑单元。
- 滚动窗口(Tumbling Window): 不重叠的固定间隔窗口。
- 滑动窗口(Sliding Window): 重叠窗口,按滑动步长移动。
- 会话窗口(Session Window): 根据数据活动间隔动态生成窗口。
状态管理
- Flink 作业可以保存状态,用于处理复杂流式任务:
- Keyed State: 针对 Keyed Stream,每个 Key 独立维护状态。
- Operator State: 针对操作符维护的全局状态。
容错机制
- Checkpoint: 定期保存作业状态,保证在故障时从最近的状态恢复。
- Savepoint: 手动触发的任务快照,用于任务升级或迁移。
4. Flink 常用术语
术语 | 含义 |
Job | 一个完整的任务逻辑,包含数据源、处理逻辑和输出逻辑。 |
Task | Job 中的一个逻辑操作单位(比如 Map、Reduce)。 |
Source | 数据来源,比如 Kafka、文件、Socket。 |
Sink | 数据的输出,比如文件、数据库、Kafka 等。 |
Transformation | 数据转换操作,比如 Map、FlatMap、KeyBy 等。 |
Parallelism | 作业并行度,决定了一个操作符的实例数(如 Map 的多个并行任务)。 |
Checkpoint | 用于恢复作业的状态一致性快照,支持精确一次(Exactly Once)语义。 |
理解这些概念的意义
- 流式和批处理: 帮助选择合适的工具。Flink 强在流处理,但批处理性能也很出色。
- 事件时间与水位线: 是 Flink 处理乱序事件数据的核心,尤其在 IoT 和实时分析场景中。
- 状态管理: 为复杂任务提供灵活支持,适合如实时计数、聚合等需求。
- 容错机制: 保证作业在分布式环境中的高可用性,适应企业级生产环境。