2. 环境搭建与工具链:安装 Java、Kafka、Zookeeper、Python 环境,配置 Kafka 集群(单机版)

流式因子漂移检测依赖一套稳定的基础组件。本章将搭建完整的本地开发环境,包括 Java 运行时、Zookeeper、Kafka 单机集群以及 Python 数据科学工具链。所有组件均配置为单机模式,便于后续章节快速验证漂移检测逻辑。

2.1 环境总览与版本选型

为避免兼容性问题,建议使用以下版本组合(本课程已验证):

组件 推荐版本 用途
Java JDK 11 (LTS) Kafka & Zookeeper 运行基础
Zookeeper 3.8.x Kafka 集群元数据管理与协调
Kafka 3.4.x (内置 ZooKeeper 模式) 流式消息引擎,接收因子数据
Python 3.10+ 漂移检测算法与客户端开发
kafka-python 2.0.2 Python Kafka 客户端库
版本提示:Kafka 3.x 仍支持 ZooKeeper 模式,本课程使用该模式以保持架构透明。若使用 KRaft 模式,需调整启动参数,但核心概念一致。

2.2 安装 Java JDK 11

Kafka 和 Zookeeper 均依赖 JVM,必须优先安装 JDK。

  1. 下载:从 Adoptium 下载 JDK 11 (LTS) 对应操作系统的安装包。
  2. 安装:默认路径安装即可(Linux/macOS 建议解压至 /usr/local/jdk-11)。
  3. 配置环境变量:
# Linux / macOS ( ~/.bashrc 或 ~/.zshrc )
export JAVA_HOME=/usr/local/jdk-11
export PATH=$JAVA_HOME/bin:$PATH

# Windows (系统环境变量)
JAVA_HOME = C:\Program Files\Java\jdk-11
PATH 追加 %JAVA_HOME%\bin
  1. 验证:
java -version
# 输出示例:openjdk version "11.0.21" 2023-10-17 LTS

2.3 安装与启动 Zookeeper

Kafka 依赖 Zookeeper 管理集群元数据(broker 列表、topic 配置、消费者组偏移量)。

  1. 下载解压:
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
tar -xzf apache-zookeeper-3.8.4-bin.tar.gz
cd apache-zookeeper-3.8.4-bin
  1. 配置 zoo.cfg:
cp conf/zoo_sample.cfg conf/zoo.cfg
# 编辑 conf/zoo.cfg,确保以下关键参数:
dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=60
  1. 启动 Zookeeper:
bin/zkServer.sh start
# 预期输出:Starting zookeeper ... STARTED
  1. 验证状态:
bin/zkServer.sh status
# 单机模式应显示:Mode: standalone
端口说明:Zookeeper 默认监听 2181 端口。若端口被占用,可修改 clientPort 并同步更新后续 Kafka 配置。

2.4 安装与配置 Kafka(单机集群)

单机集群指在同一台机器上运行一个 Kafka broker,但具备完整的 topic、分区、消费者组功能。

  1. 下载解压:
wget https://dlcdn.apache.org/kafka/3.4.1/kafka_2.13-3.4.1.tgz
tar -xzf kafka_2.13-3.4.1.tgz
cd kafka_2.13-3.4.1
  1. 修改 server.properties:
# config/server.properties 关键配置
broker.id=0
listeners=PLAINTEXT://localhost:9092
log.dirs=/tmp/kafka-logs
zookeeper.connect=localhost:2181
num.partitions=3          # 默认分区数,便于后续并行消费
offsets.topic.replication.factor=1   # 单机模式必须设为1
  1. 启动 Kafka:
bin/kafka-server-start.sh config/server.properties &
# 或使用 -daemon 后台运行
bin/kafka-server-start.sh -daemon config/server.properties
  1. 验证集群状态:
# 查看所有 topic(此时应为空)
bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

# 创建一个测试 topic
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test-drift --partitions 3 --replication-factor 1

# 描述 topic 详情
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic test-drift
常见错误:若启动 Kafka 时提示 Connection refused,请先确认 Zookeeper 已在 2181 端口运行。可使用 lsof -i :2181 检查。

2.5 安装 Python 数据科学环境

漂移检测算法使用 Python 实现,需安装核心科学计算库及 Kafka 客户端。

# 创建虚拟环境(推荐)
python3 -m venv drift_env
source drift_env/bin/activate   # Linux/macOS
# drift_env\Scripts\activate    # Windows

# 安装依赖
pip install --upgrade pip
pip install kafka-python==2.0.2
pip install numpy pandas scikit-learn
pip install scipy          # 用于统计检验(KS检验、JS散度等)
pip install matplotlib     # 可视化漂移结果(后续章节使用)

验证安装:

python -c "from kafka import KafkaProducer, KafkaConsumer; print('Kafka client OK')"
python -c "import numpy, pandas, sklearn, scipy; print('ML stack OK')"

2.6 整体架构与数据流

下图展示了单机环境下各组件的关系及因子数据流路径:

单机环境组件架构与数据流 单机环境组件架构与因子数据流 Python 生产者 (因子数据源) Kafka Broker (localhost:9092) Python 消费者 (漂移检测器) Zookeeper (localhost:2181) Topic: factor-stream (3 partitions) produce consume 元数据管理 图例说明: 生产者将因子数据发送至 Kafka Topic;消费者从 Topic 拉取数据执行漂移检测;Zookeeper 维护 broker 与 topic 元数据。

2.7 环境验证清单

完成安装后,逐项确认以下检查点:

检查项 验证命令 预期结果
Java 版本 java -version 11.x
Zookeeper 状态 zkServer.sh status Mode: standalone
Kafka 进程 jps | grep Kafka Kafka 进程 ID
Topic 创建 kafka-topics.sh --list 显示 test-drift
Python 客户端 python -c "from kafka import KafkaProducer" 无报错
生产建议:单机集群仅用于开发与教学。生产环境至少部署 3 个 broker 并设置 replication-factor ≥ 2。本课程后续章节均基于单机集群运行,所有漂移检测逻辑可直接迁移至集群环境。

2.8 快速启动脚本(可选)

为节省后续章节的重复启动时间,可创建以下启动脚本:

#!/bin/bash
# start-drift-env.sh
echo "=== 启动 Zookeeper ==="
~/apache-zookeeper-3.8.4-bin/bin/zkServer.sh start

echo "=== 启动 Kafka ==="
~/kafka_2.13-3.4.1/bin/kafka-server-start.sh -daemon ~/kafka_2.13-3.4.1/config/server.properties

echo "=== 激活 Python 虚拟环境 ==="
source ~/drift_env/bin/activate

echo "环境就绪:Zookeeper:2181 | Kafka:9092 | Python drift_env"

赋予执行权限后,每次实验前运行 bash start-drift-env.sh 即可一键启动所有服务。