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。
- 下载:从 Adoptium 下载 JDK 11 (LTS) 对应操作系统的安装包。
- 安装:默认路径安装即可(Linux/macOS 建议解压至
/usr/local/jdk-11)。 - 配置环境变量:
# 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
- 验证:
java -version
# 输出示例:openjdk version "11.0.21" 2023-10-17 LTS
2.3 安装与启动 Zookeeper
Kafka 依赖 Zookeeper 管理集群元数据(broker 列表、topic 配置、消费者组偏移量)。
- 下载解压:
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
- 配置 zoo.cfg:
cp conf/zoo_sample.cfg conf/zoo.cfg
# 编辑 conf/zoo.cfg,确保以下关键参数:
dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=60
- 启动 Zookeeper:
bin/zkServer.sh start
# 预期输出:Starting zookeeper ... STARTED
- 验证状态:
bin/zkServer.sh status
# 单机模式应显示:Mode: standalone
端口说明:Zookeeper 默认监听
2181 端口。若端口被占用,可修改 clientPort 并同步更新后续 Kafka 配置。
2.4 安装与配置 Kafka(单机集群)
单机集群指在同一台机器上运行一个 Kafka broker,但具备完整的 topic、分区、消费者组功能。
- 下载解压:
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
- 修改 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
- 启动 Kafka:
bin/kafka-server-start.sh config/server.properties &
# 或使用 -daemon 后台运行
bin/kafka-server-start.sh -daemon config/server.properties
- 验证集群状态:
# 查看所有 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 整体架构与数据流
下图展示了单机环境下各组件的关系及因子数据流路径:
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 即可一键启动所有服务。