2. 环境准备:Flink集群搭建(Standalone模式)、Kafka消息队列安装与配置

实时风控巡检系统依赖稳定的流计算引擎与高吞吐消息管道。本章将指导你完成 Flink Standalone 集群 与 Kafka 消息队列 的安装与配置,为后续 CEP 规则部署与告警阈值测试奠定基础。

2.1 环境概览与版本选型

本课程采用以下组件版本组合,经生产级压测验证,兼容性良好:

组件 版本 说明
JDK 1.8.0_202 Flink 与 Kafka 均依赖 Java 8+
Apache Flink 1.17.1 支持 CEP 库与动态告警阈值
Apache Kafka 3.4.0 高吞吐、持久化消息管道
ZooKeeper 3.8.1 Kafka 集群协调服务
操作系统 CentOS 7.9 / Ubuntu 20.04 生产环境推荐 Linux
版本选择建议: Flink 1.17 对 CEP 算子性能做了显著优化,且与 Kafka 3.x 的 Exactly-Once 语义兼容性最佳。不建议使用 Flink 1.14 以下版本,其 CEP 库存在已知的状态回溯缺陷。

2.2 Flink Standalone 集群搭建

Standalone 模式适合开发测试与中小规模生产场景。以下步骤以 1 台 Master + 2 台 Worker 为例。

2.2.1 节点规划与前置条件

  • Master 节点(192.168.1.10):运行 JobManager、Dispatcher、ResourceManager。
  • Worker 节点 1(192.168.1.11):运行 TaskManager,分配 4 个 Slot。
  • Worker 节点 2(192.168.1.12):运行 TaskManager,分配 4 个 Slot。
  • 所有节点已配置 SSH 免密登录,且 JDK 环境变量正确设置。

2.2.2 安装与配置步骤

  1. 下载解压:在 Master 节点执行 wget https://archive.apache.org/dist/flink/flink-1.17.1/flink-1.17.1-bin-scala_2.12.tgz,解压至 /opt/flink。
  2. 配置 flink-conf.yaml:
# /opt/flink/conf/flink-conf.yaml
jobmanager.rpc.address: 192.168.1.10
jobmanager.bind-host: 0.0.0.0
taskmanager.bind-host: 0.0.0.0
taskmanager.host: 192.168.1.11
taskmanager.numberOfTaskSlots: 4
parallelism.default: 2
rest.address: 192.168.1.10
rest.bind-address: 0.0.0.0
  1. 配置 workers 文件:
# /opt/flink/conf/workers
192.168.1.11
192.168.1.12
  1. 分发至 Worker 节点:使用 scp -r /opt/flink root@192.168.1.11:/opt/ 同步配置。
  2. 启动集群:在 Master 节点执行 /opt/flink/bin/start-cluster.sh。
  3. 验证:访问 http://192.168.1.10:8081,确认 Web UI 显示 2 个 TaskManager 共 8 个 Slot。
巡检要点: 启动后立即检查日志 log/flink-*-jobmanager-*.log,确认无 "Failed to start" 或 "Connection refused" 异常。若 TaskManager 未注册,检查防火墙与 taskmanager.host 配置。

2.3 Flink Standalone 集群架构图

下图展示了 Standalone 模式下 JobManager 与 TaskManager 的通信关系,以及 Slot 资源分配方式:

Flink Standalone 集群架构 Flink Standalone 集群架构 JobManager 192.168.1.10:8081 TaskManager 1 192.168.1.11 Slot: 4 TaskManager 2 192.168.1.12 Slot: 4 总 Slot = 8,默认并行度 = 2 JobManager 负责任务调度与故障恢复

2.4 Kafka 消息队列安装与配置

Kafka 负责接收交易事件流,作为 Flink Source 的输入管道。本课程采用 单节点 ZooKeeper + 单节点 Kafka Broker 的轻量部署,生产环境建议扩展为多 Broker 集群。

2.4.1 ZooKeeper 安装

  1. 下载 ZooKeeper 3.8.1 并解压至 /opt/zookeeper。
  2. 复制配置文件:cp conf/zoo_sample.cfg conf/zoo.cfg。
  3. 修改 dataDir=/var/lib/zookeeper,并创建该目录。
  4. 启动:/opt/zookeeper/bin/zkServer.sh start。
  5. 验证:echo ruok | nc localhost 2181 返回 imok。

2.4.2 Kafka Broker 安装与配置

  1. 下载 Kafka 3.4.0 并解压至 /opt/kafka。
  2. 编辑 config/server.properties:
# /opt/kafka/config/server.properties
broker.id=0
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://192.168.1.10:9092
log.dirs=/var/lib/kafka-logs
zookeeper.connect=localhost:2181
num.partitions=3
default.replication.factor=1
offsets.topic.replication.factor=1
  1. 创建日志目录:mkdir -p /var/lib/kafka-logs。
  2. 启动 Kafka:/opt/kafka/bin/kafka-server-start.sh -daemon config/server.properties。
  3. 验证:创建测试主题 test-topic,使用生产者与消费者发送/接收消息,确认无报错。
常见陷阱:
  • advertised.listeners 必须配置为 Flink 能访问的 IP,否则 Flink 连接 Kafka 时会报 Connection refused。
  • Kafka 3.x 默认使用 kraft 模式,但本课程仍采用 ZooKeeper 模式以保持与 Flink 生态的兼容性。若使用 KRaft,需额外配置 process.roles 参数。

2.5 实时交易事件流拓扑

下图展示了从交易事件产生到 Flink 消费的完整数据流路径:

实时交易事件流拓扑 实时交易事件流拓扑 交易事件源 APP / POS / 网关 Kafka Broker Topic: trade-events Partitions: 3 Flink CEP 作业 Source: KafkaConsumer 并行度: 3 Flink 通过 KafkaConsumer 以 Exactly-Once 语义消费 每个 Partition 对应一个 Flink Source SubTask

2.6 连通性验证

完成安装后,执行以下命令验证 Flink 与 Kafka 的集成:

# 1. 在 Kafka 中创建风控主题
/opt/kafka/bin/kafka-topics.sh --create \
  --bootstrap-server localhost:9092 \
  --topic risk-trade-events \
  --partitions 3 \
  --replication-factor 1

# 2. 启动 Flink 自带 SocketWindowWordCount 示例(替换为 Kafka Source)
/opt/flink/bin/flink run \
  /opt/flink/examples/streaming/SocketWindowWordCount.jar \
  --host 192.168.1.10 --port 9999

# 3. 使用 kafka-console-producer 发送测试消息
echo '{"tradeId":"T001","amount":15000,"userId":"U100"}' | \
  /opt/kafka/bin/kafka-console-producer.sh \
  --broker-list localhost:9092 \
  --topic risk-trade-events
快速排障: 若 Flink 作业无法连接到 Kafka,检查 flink-conf.yaml 中是否添加了 classloader.resolve-order: parent-first,避免 Kafka 客户端依赖冲突。同时确认 Kafka 的 advertised.listeners 与 Flink TaskManager 网络互通。

2.7 环境检查清单

使用下表逐项确认环境就绪:

检查项 预期结果 验证命令
Flink Web UI 可访问,显示 2 个 TaskManager curl http://192.168.1.10:8081
ZooKeeper 状态 返回 imok echo ruok | nc localhost 2181
Kafka 主题列表 包含 risk-trade-events kafka-topics.sh --list --bootstrap-server localhost:9092
Flink 提交作业 作业状态为 RUNNING flink list