1. Flink 概述:实时计算的基石
本章是《Flink额度实时计算入门教程》的起点。我们将从Flink的发展历史、核心特性、典型应用场景以及与Spark Streaming的对比四个维度,建立对Flink实时计算引擎的全面认知。理解这些基础概念,是后续深入学习额度实时计算的关键前提。
1.1 Flink 的发展历史
Apache Flink 起源于德国柏林工业大学的一个研究项目,最初名为“Stratosphere”。该项目旨在构建一个下一代的大数据分析平台,统一处理批处理和流处理。2014年,Stratosphere 的核心代码被捐赠给 Apache 软件基金会,并更名为 Flink(德语中意为“敏捷、灵巧”)。
Flink 的发展历程可概括为以下几个关键里程碑:
| 时间 | 里程碑事件 | 核心意义 |
|---|---|---|
| 2009-2014 | 柏林工业大学 Stratosphere 项目 | 提出“流批一体”的核心理念,奠定技术基础 |
| 2014.12 | 成为 Apache 顶级项目 | 正式进入开源社区视野,获得广泛关注 |
| 2015-2016 | Flink 1.0 / 1.1 发布 | API 稳定,支持事件时间、精确一次语义,确立流处理标准 |
| 2019 | Flink 1.9 发布 | 阿里巴巴贡献 Blink 分支,SQL 能力大幅增强,批流融合加速 |
| 2021-至今 | Flink 1.13+ 持续迭代 | 成为实时计算领域的事实标准,广泛应用于金融、电商、物联网 |
1.2 Flink 的核心特性
Flink 之所以能在实时计算领域占据主导地位,得益于其一系列强大的核心特性。这些特性共同构成了 Flink 的技术优势。
- 真正的流处理架构: 数据以“流”的形式逐条处理,延迟低至毫秒级,而非微批次(Micro-Batch)的伪流处理。
- 精确一次(Exactly-Once)语义: 通过分布式快照(Checkpoint)和两阶段提交(Two-Phase Commit)机制,确保在故障恢复后数据不丢失、不重复,计算结果绝对准确。这对于金融风控、额度计算等场景至关重要。
- 事件时间(Event Time)处理: 支持基于事件实际发生时间进行处理,而非数据到达系统的时间。能正确处理乱序、延迟数据,保证时间窗口计算的准确性。
- 高吞吐、低延迟: 经过优化的内存管理和异步 I/O 设计,Flink 能在保证毫秒级延迟的同时,支撑每秒数百万条消息的吞吐量。
- 强大的状态管理: 提供 Keyed State 和 Operator State 两种状态原语,支持将状态存储在内存、RocksDB 或 HDFS 上,并自动进行状态快照和恢复。
- 流批一体(Batch-Stream Unification): 使用同一套 API(DataStream API / Table API & SQL)处理有界数据(批)和无界数据(流),降低开发和运维成本。
1.3 Flink 的典型应用场景
Flink 的应用场景非常广泛,尤其在需要低延迟、高准确性和复杂事件处理的领域。以下是三个最典型的场景:
1.3.1 实时 ETL(数据清洗与加工)
从 Kafka、Pulsar 等消息队列中实时读取原始数据,进行数据清洗、格式转换、字段补全、数据脱敏等操作,然后写入数据湖(如 Hudi、Iceberg)或数据仓库(如 ClickHouse)。这是数据中台建设的核心环节。
1.3.2 实时风控
在金融交易、电商支付等场景中,Flink 能够实时分析用户行为序列,结合规则引擎或机器学习模型,在毫秒级内识别欺诈、盗刷、恶意注册等风险行为,并触发告警或拦截。
1.3.3 实时额度计算
这是本课程的核心场景。在信贷、支付、会员权益等系统中,需要实时计算和管控用户的可用额度。例如:
- 信用卡消费额度: 实时统计用户当日/当月累计消费金额,动态更新可用额度。
- 电商优惠券额度: 实时统计优惠券的领取和核销数量,防止超发。
- API 调用额度: 实时统计某个 AppKey 在单位时间内的调用次数,进行限流。
1.4 Flink 与 Spark Streaming 的对比
Spark Streaming 是另一个广泛使用的流处理框架。理解两者的核心差异,有助于我们在技术选型时做出正确决策。下表从多个关键维度进行了对比:
| 对比维度 | Apache Flink | Spark Streaming |
|---|---|---|
| 处理模型 | 真正的流处理(逐条处理) | 微批次处理(Micro-Batch) |
| 延迟 | 毫秒级(亚秒级) | 秒级(取决于批次间隔) |
| 事件时间支持 | 原生支持,内置 Watermark 机制 | 支持,但实现相对复杂,延迟较高 |
| 状态管理 | 强大且灵活,支持多种 State Backend | 基于 DStream 的 state 操作,相对有限 |
| 精确一次语义 | 原生支持,端到端保证 | 需要配合外部系统(如 Kafka)实现 |
| SQL 支持 | Flink SQL 功能强大,持续演进 | Structured Streaming 的 SQL 支持成熟 |
| 批流一体 | 设计理念,同一 API 处理批和流 | Spark Batch 和 Streaming 是两套 API |
| 适用场景 | 低延迟、高准确性要求的场景(风控、额度) | 吞吐量优先、延迟容忍度较高的场景(日志聚合) |
1.5 本章小结
本章我们学习了 Flink 的发展历史、核心特性、典型应用场景,并与 Spark Streaming 进行了对比。核心要点如下:
- Flink 是真正的流处理引擎,以“流批一体”为设计哲学。
- 其核心特性包括:真正的流处理、精确一次语义、事件时间处理、高吞吐低延迟、强大状态管理、流批一体。
- 典型应用场景覆盖实时 ETL、实时风控和实时额度计算。
- 与 Spark Streaming 相比,Flink 在延迟、状态管理和精确一次语义方面具有显著优势,更适合对准确性要求极高的额度计算场景。