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+ 自适应调度、动态负载均衡,云原生成熟
反欺诈视角: Flink 1.13 之后的流批一体能力,让反欺诈团队可以用同一套代码处理实时交易流和离线历史数据回溯,大幅降低维护成本。

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 的运行时架构如何统一两种模式:

Flink 流批一体运行时架构 Flink 流批一体运行时架构 无界数据源 (Kafka) 有界数据源 (HDFS) DataStream / Table API 统一运行时 (Streaming) 调度 & 容错 (Checkpoint) 批作业被视作“有界流”,复用同一套算子、状态和容错机制
反欺诈最佳实践: 使用 Flink SQL 编写特征计算逻辑,在开发环境用批模式跑历史数据验证特征效果,上线后切换为流模式处理实时交易,代码零改动。

2.3 Flink 集群搭建(Standalone 模式)

Standalone 模式适合学习、测试和轻量级部署。我们在一台 Linux 机器上模拟一个最小集群:1 个 Master(JobManager) + 2 个 Worker(TaskManager)。

2.3.1 环境准备与下载

  1. 确保已安装 JDK 8 或 11(推荐 JDK 11)。
  2. 从 Apache 官网下载 Flink 1.18.1 二进制包:flink-1.18.1-bin-scala_2.12.tgz。
  3. 解压至 /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 模式下各角色的通信与协作:

Flink Standalone 集群组件关系 Standalone 集群组件关系 JobManager 调度、Checkpoint、REST API TaskManager 1 Slot: 4 | 192.168.1.100 TaskManager 2 Slot: 4 | 192.168.1.101 Client (提交作业) JobManager 通过 Akka 与 TaskManager 通信,分发 Task 并管理状态
注意: 生产环境不建议使用 Standalone 模式,因为缺乏资源隔离和动态伸缩。推荐使用 YARN / Kubernetes 部署。本课程后续章节将基于 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 算子背压监控 发现特征计算瓶颈
快速验证: 提交 WordCount 后,在 Web UI 的 Task Managers 页面查看每个 Slot 的“Memory Segments”和“Garbage Collection”指标,确保集群健康。

2.5 本章小结

  • Flink 从 Stratosphere 发展而来,1.13 版本后流批一体成为核心能力。
  • 事件驱动架构使 Flink 天然适合反欺诈场景的低延迟特征计算。
  • Standalone 模式是学习 Flink 集群操作的最佳起点,通过 flink-conf.yaml 和 workers 文件即可配置。
  • 命令行 flink run/list/cancel 和 Web UI 的 Job Overview / Checkpoints 面板是日常运维的必备工具。