2. 环境搭建:安装Python、Kafka、Zookeeper,配置开发环境

说实话,搭建开发环境这件事,看着简单,但坑是真不少。我见过太多人在这一步卡住,然后怀疑人生。别急,咱们一步步来。

2.1 为什么是这三件套?

你想想看,实时行情流处理,本质上就是「数据生产 → 数据运输 → 数据消费」这条链。Kafka负责运输,Zookeeper负责管着Kafka的集群状态,Python负责写消费逻辑。缺一个都不行。

我个人习惯,先把Python装好,再搞Zookeeper,最后上Kafka。这个顺序最顺,因为后面两个的启动脚本都依赖Python环境做健康检查。

核心逻辑图: 下面这张图,是我画的环境依赖关系,你看一眼就明白了。

Python 3.8+ Zookeeper 3.7+ Kafka 3.0+ 依赖关系:Python 无依赖,Zookeeper 依赖 Java,Kafka 依赖 Zookeeper 实时行情流处理环境全景 数据源(行情API) → Kafka Producer(Python) → Kafka Broker(集群) ← Zookeeper(协调) → Kafka Consumer(Python) → 数据库/可视化

2.2 安装Python环境

Python版本我建议用3.8以上。3.6已经EOL了,别用了。我在项目中遇到过因为Python版本太低,kafka-python库死活装不上的情况,折腾了半天才发现是版本问题。

步骤:

  1. 下载安装包:去python.org下载对应系统的安装包。Windows用户记得勾选「Add Python to PATH」。
  2. 验证安装:打开终端,输入 python --version,看到版本号就对了。
  3. 配置虚拟环境:我个人习惯每个项目一个虚拟环境,避免包冲突。
# 创建虚拟环境
python -m venv stock_env

# 激活(Windows)
stock_env\Scripts\activate

# 激活(Mac/Linux)
source stock_env/bin/activate

# 安装依赖
pip install kafka-python pandas numpy

小技巧: 如果你在国内,pip下载慢。可以配个清华镜像:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple。嗯,这招我用了好几年,稳得很。

2.3 安装Zookeeper

Zookeeper说白了就是Kafka的「管家」。它负责告诉Kafka:「哪个Broker活着,哪个挂了,谁是老大」。没有它,Kafka集群就乱套了。

步骤:

  1. 下载:去Apache官网下载Zookeeper 3.7+的二进制包。
  2. 解压:放到一个没有中文路径的目录下。
  3. 配置:复制 conf/zoo_sample.cfgconf/zoo.cfg,修改数据目录。
# zoo.cfg 核心配置
tickTime=2000
dataDir=/usr/local/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2

注意: 我曾经在生产环境遇到过Zookeeper因为磁盘写满而挂掉的情况。dataDir一定要放在有足够空间的分区,最好单独挂一块盘。别问我怎么知道的……

启动:

# 启动Zookeeper
bin/zkServer.sh start

# 检查状态
bin/zkServer.sh status

# 连接测试
bin/zkCli.sh -server 127.0.0.1:2181

启动后,用 zkCli.sh 连上去,输入 ls /,能看到 [zookeeper] 节点,说明成功了。

2.4 安装Kafka

Kafka的安装其实比Zookeeper还简单。解压即用,但配置要小心。

步骤:

  1. 下载:去Apache Kafka官网下载3.0+版本。注意选二进制包,别下源码包。
  2. 解压:同样放到无中文路径的目录。
  3. 配置:修改 config/server.properties
# server.properties 核心配置
broker.id=0
listeners=PLAINTEXT://localhost:9092
log.dirs=/usr/local/kafka/data
zookeeper.connect=localhost:2181
num.partitions=3
default.replication.factor=1

关键参数说明:

参数说明我的建议
broker.id节点唯一ID集群中每个节点必须不同
listeners监听地址开发环境用localhost,生产环境用内网IP
log.dirs数据存储目录确保磁盘空间充足,建议SSD
zookeeper.connectZookeeper地址多个ZK用逗号分隔
num.partitions默认分区数行情数据建议设3-6个分区

启动Kafka:

# 启动Kafka
bin/kafka-server-start.sh config/server.properties

# 创建测试主题
bin/kafka-topics.sh --create --topic stock_quotes --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1

# 查看主题列表
bin/kafka-topics.sh --list --bootstrap-server localhost:9092

避坑指南: 启动Kafka前,一定要确保Zookeeper已经跑起来了。我曾经犯过这个错——先启动Kafka,结果它连不上ZK,一直报错。顺序很重要:先ZK,后Kafka。

2.5 验证整个链路

环境搭好了,咱们得跑个「Hello World」验证一下。写个简单的Python生产者+消费者脚本。

# producer.py
from kafka import KafkaProducer
import json, time

producer = KafkaProducer(
    bootstrap_servers='localhost:9092',
    value_serializer=lambda v: json.dumps(v).encode('utf-8')
)

data = {'symbol': 'AAPL', 'price': 150.25, 'volume': 1000}
producer.send('stock_quotes', value=data)
producer.flush()
print("消息已发送")
# consumer.py
from kafka import KafkaConsumer
import json

consumer = KafkaConsumer(
    'stock_quotes',
    bootstrap_servers='localhost:9092',
    auto_offset_reset='earliest',
    value_deserializer=lambda m: json.loads(m.decode('utf-8'))
)

for msg in consumer:
    print(f"收到行情: {msg.value}")

先跑consumer,再跑producer。如果看到控制台打印出行情数据,恭喜你,环境搭建成功了!

常见问题: 如果consumer收不到消息,检查一下防火墙是不是把9092端口封了。Windows用户尤其要注意,我帮同事排查过好几次这个问题,最后发现都是防火墙惹的祸。

2.6 开发环境配置建议

最后聊点开发工具的事。我个人习惯用VS Code,配上Python插件和Kafka插件,写代码和调试都很方便。

  • VS Code插件:Python、Pylance、Kafka(用于浏览主题和消息)
  • 终端工具:Windows用Git Bash或PowerShell,Mac/Linux用自带终端
  • 版本管理:建议用Git管理代码,.gitignore记得加上虚拟环境目录

嗯,环境搭建这块就到这。工具都备齐了,后面咱们就可以真正开始写流处理代码了。


专注资料整理