2. Flink 基础与环境搭建
本章是进入 Flink 反欺诈特征服务开发前的“地基”环节。我们将从 Flink 的发展脉络讲起,理解其核心设计理念(事件驱动与流批一体),然后亲手搭建一套 Standalone 集群,并通过命令行和 Web UI 验证环境可用性。掌握这些基础,后续的特征计算、规则引擎部署才能顺利落地。
2.1 Flink 发展史:从学术原型到工业标准
Apache Flink 起源于 2010 年柏林工业大学的一个研究项目“Stratosphere”。2014 年成为 Apache 顶级项目后,凭借其纯流式架构和精确一次语义,迅速在实时计算领域占据核心地位。下表梳理了关键里程碑:
| 时间 | 版本 / 事件 | 核心意义 |
|---|---|---|
| 2010 | Stratosphere 项目启动 | 提出并行数据流与迭代计算原型 |
| 2014 | Apache Flink 0.6 | 成为 Apache 顶级项目,确立 DataStream API |
| 2016 | Flink 1.0 | 生产就绪,引入事件时间与 Watermark |
| 2019 | Flink 1.9 | 合并 Blink,SQL 能力大幅增强 |
| 2021 | Flink 1.13 | 流批一体正式 GA,统一 API 与运行时 |
| 2024 | Flink 1.18+ | 自适应调度、动态负载均衡,云原生成熟 |
2.2 核心特性:事件驱动与流批一体
Flink 区别于 Spark Streaming 等微批引擎的根本,在于其纯流式运行时。以下两个特性是反欺诈特征服务的基石。
2.2.1 事件驱动(Event-Driven)
Flink 将每一条数据视为一个“事件”,数据一到即处理,无需等待批次边界。这使得端到端延迟达到毫秒级,非常适合欺诈检测这种需要秒级响应的场景。
- 无界流处理: 交易数据源源不断,Flink 持续消费 Kafka,实时计算滑动窗口内的聚合特征(如“过去5分钟同一设备交易次数”)。
- 状态管理: 每个算子可维护 Keyed State,例如记录每个用户最近10笔交易的时间戳,用于模式匹配。
- 精确一次语义: 通过 Checkpoint + 两阶段提交,保证特征数据不重不丢。
2.2.2 流批一体(Batch-Stream Unification)
Flink 认为“批是有界流”。同一套 DataStream API 或 Table API,既可以处理实时流,也可以处理离线文件。下图展示了 Flink 的运行时架构如何统一两种模式:
2.3 Flink 集群搭建(Standalone 模式)
Standalone 模式适合学习、测试和轻量级部署。我们在一台 Linux 机器上模拟一个最小集群:1 个 Master(JobManager) + 2 个 Worker(TaskManager)。
2.3.1 环境准备与下载
- 确保已安装 JDK 8 或 11(推荐 JDK 11)。
- 从 Apache 官网下载 Flink 1.18.1 二进制包:
flink-1.18.1-bin-scala_2.12.tgz。 - 解压至
/opt/flink目录。
2.3.2 配置文件修改
编辑 conf/flink-conf.yaml,设置以下关键参数:
# JobManager 地址(本机 IP)
jobmanager.rpc.address: 192.168.1.100
# 总内存
jobmanager.memory.process.size: 2048m
taskmanager.memory.process.size: 4096m
# 每个 TaskManager 的 Slot 数
taskmanager.numberOfTaskSlots: 4
# 并行度
parallelism.default: 2
编辑 conf/workers,添加 Worker 节点地址:
192.168.1.100
192.168.1.101
2.3.3 启动集群
# 启动 JobManager(Master)
./bin/jobmanager.sh start
# 在每台 Worker 上启动 TaskManager
./bin/taskmanager.sh start
# 验证进程
jps
# 输出应包含:StandaloneSessionClusterEntrypoint(JobManager)、TaskManagerRunner
2.3.4 集群组件关系
下图展示了 Standalone 模式下各角色的通信与协作:
2.4 Flink 命令行与 Web UI 入门
2.4.1 命令行提交作业
使用 flink run 命令提交一个示例 WordCount 作业:
# 提交作业(指定并行度 2)
./bin/flink run \
-m 192.168.1.100:8081 \
-p 2 \
./examples/streaming/WordCount.jar
# 查看正在运行的作业
./bin/flink list -m 192.168.1.100:8081
# 取消作业
./bin/flink cancel <job-id> -m 192.168.1.100:8081
2.4.2 Web UI 关键面板
浏览器访问 http://192.168.1.100:8081,重点关注以下区域:
| 面板 | 功能 | 反欺诈用途 |
|---|---|---|
| Job Overview | 作业拓扑、并行度、运行状态 | 确认特征计算算子是否正常启动 |
| Task Managers | Slot 使用、内存、GC 情况 | 监控特征服务资源水位 |
| Checkpoints | Checkpoint 历史、耗时、失败原因 | 确保特征状态一致性 |
| Backpressure | 算子背压监控 | 发现特征计算瓶颈 |
2.5 本章小结
- Flink 从 Stratosphere 发展而来,1.13 版本后流批一体成为核心能力。
- 事件驱动架构使 Flink 天然适合反欺诈场景的低延迟特征计算。
- Standalone 模式是学习 Flink 集群操作的最佳起点,通过
flink-conf.yaml和workers文件即可配置。 - 命令行
flink run/list/cancel和 Web UI 的 Job Overview / Checkpoints 面板是日常运维的必备工具。