3. 开发环境搭建:安装Java、Kafka、Zookeeper,配置单机与集群模式,启动与验证
搭建一个稳定、可复现的开发环境是支付风控实时评分系统的基础。本章将指导你完成 Java、Zookeeper 和 Kafka 的安装与配置,涵盖单机快速验证模式与生产级集群模式,并给出启动后的健康检查方法。
3.1 环境依赖与版本选型
支付风控场景对消息传递的可靠性和吞吐量要求极高,建议使用长期支持(LTS)版本。以下为推荐版本组合:
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Java (JDK) | 11 LTS 或 17 LTS | Kafka 2.8+ 已移除对 Java 8 的官方支持;推荐使用 OpenJDK |
| Apache Kafka | 3.5.x 或 3.6.x | 内置 Zookeeper 模式(旧)或 KRaft 模式(新);本课程采用 Zookeeper 模式以兼容生产环境 |
| Apache Zookeeper | 3.8.x | Kafka 3.5 官方测试版本,稳定且安全 |
| 操作系统 | CentOS 7+ / Ubuntu 20.04+ / macOS | Linux 生产环境首选;Windows 建议使用 WSL2 |
版本对齐提示: 切勿混用 Kafka 3.x 与 Zookeeper 3.5 以下版本,否则可能引发会话超时或 Leader 选举异常。建议直接从 Apache Kafka 官方下载页 获取二进制包。
3.2 安装 Java JDK
Kafka 基于 JVM 运行,JDK 是首要依赖。以下以 OpenJDK 17 为例:
# Ubuntu / Debian
sudo apt update
sudo apt install openjdk-17-jdk -y
# CentOS / RHEL
sudo yum install java-17-openjdk-devel -y
# 验证安装
java -version
# 输出示例:openjdk version "17.0.9" 2023-10-17 LTS
配置 JAVA_HOME 环境变量(建议写入 ~/.bashrc 或 /etc/profile):
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 # 路径以实际为准
export PATH=$JAVA_HOME/bin:$PATH
3.3 安装与配置 Zookeeper
Zookeeper 负责 Kafka 的元数据管理、Broker 注册与 Leader 选举。单机模式用于开发调试,集群模式用于生产。
3.3.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
# 复制配置文件
cp conf/zoo_sample.cfg conf/zoo.cfg
# 编辑 conf/zoo.cfg,关键参数:
# dataDir=/tmp/zookeeper # 建议改为持久化路径,如 /var/lib/zookeeper
# clientPort=2181
# 启动
bin/zkServer.sh start
# 检查状态
bin/zkServer.sh status
# 单机模式输出:Mode: standalone
3.3.2 集群模式(3节点示例)
集群模式至少需要 3 个节点(奇数节点保证选举法定人数)。在 conf/zoo.cfg 末尾追加:
server.1=192.168.1.10:2888:3888
server.2=192.168.1.11:2888:3888
server.3=192.168.1.12:2888:3888
在每个节点的 dataDir 目录下创建 myid 文件,内容为对应编号:
# 节点1
echo "1" > /var/lib/zookeeper/myid
# 节点2
echo "2" > /var/lib/zookeeper/myid
# 节点3
echo "3" > /var/lib/zookeeper/myid
依次启动各节点,检查集群状态:
bin/zkServer.sh start
bin/zkServer.sh status
# 正常输出:Mode: follower 或 Mode: leader
集群避坑: 确保各节点防火墙开放 2181(客户端)、2888(Follower 连接 Leader)、3888(选举)端口。生产环境建议将 Zookeeper 部署在独立服务器上,不与 Kafka Broker 混部。
3.4 安装与配置 Kafka
Kafka 的配置核心是 config/server.properties。以下分别给出单机与集群的关键配置。
3.4.1 单机模式配置
# 下载 Kafka
wget https://dlcdn.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -xzf kafka_2.13-3.6.1.tgz
cd kafka_2.13-3.6.1
# 编辑 config/server.properties
broker.id=0
listeners=PLAINTEXT://localhost:9092
log.dirs=/tmp/kafka-logs
zookeeper.connect=localhost:2181
offsets.topic.replication.factor=1 # 单机副本因子设为1
3.4.2 集群模式配置(3 Broker)
集群模式下,每个 Broker 的 broker.id 必须唯一,listeners 绑定实际 IP,并设置合理的副本因子:
| 参数 | Broker 1 | Broker 2 | Broker 3 |
|---|---|---|---|
| broker.id | 0 | 1 | 2 |
| listeners | PLAINTEXT://192.168.1.10:9092 | PLAINTEXT://192.168.1.11:9092 | PLAINTEXT://192.168.1.12:9092 |
| log.dirs | /data/kafka/logs | /data/kafka/logs | /data/kafka/logs |
| zookeeper.connect | 192.168.1.10:2181,192.168.1.11:2181,192.168.1.12:2181 | ||
| offsets.topic.replication.factor | 3 | ||
| default.replication.factor | 3 | ||
生产建议: 支付风控场景下,
offsets.topic.replication.factor 和 default.replication.factor 至少设为 2,推荐 3,以容忍单节点故障。同时开启 unclean.leader.election.enable=false 防止数据不一致。
3.5 启动与验证
启动顺序:先 Zookeeper,后 Kafka。以下为单机模式启动命令:
# 1. 启动 Zookeeper(后台运行)
cd /opt/apache-zookeeper-3.8.4-bin
bin/zkServer.sh start
# 2. 启动 Kafka
cd /opt/kafka_2.13-3.6.1
bin/kafka-server-start.sh -daemon config/server.properties
# 3. 验证 Kafka 进程
jps -l | grep -E "Kafka|QuorumPeerMain"
# 应看到:
# 12345 kafka.Kafka
# 12346 org.apache.zookeeper.server.quorum.QuorumPeerMain
创建测试 Topic 并发送/消费消息,验证端到端连通性:
# 创建 Topic(单机副本因子1,分区数3)
bin/kafka-topics.sh --create \
--bootstrap-server localhost:9092 \
--replication-factor 1 \
--partitions 3 \
--topic payment-risk-test
# 列出 Topic
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
# 启动控制台生产者
bin/kafka-console-producer.sh --topic payment-risk-test --bootstrap-server localhost:9092
# 输入:{"orderId":"1001","amount":299.00,"riskScore":0.12}
# 新开终端,启动控制台消费者
bin/kafka-console-consumer.sh --topic payment-risk-test --bootstrap-server localhost:9092 --from-beginning
# 应看到刚才发送的消息
3.6 单机与集群架构对比
以下 SVG 图展示了单机模式与集群模式的核心差异,帮助你理解开发环境与生产环境的部署边界。
3.7 环境验证清单
完成安装后,逐项检查以下指标,确保环境达到支付风控场景的可用标准:
- 进程存活:
jps或ps aux | grep -E "kafka|zookeeper"确认进程在运行。 - 端口监听:
netstat -tlnp | grep -E "2181|9092"确认端口已绑定。 - Zookeeper 状态:
echo stat | nc localhost 2181查看 Mode 和连接数。 - Kafka 集群健康:
bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092应返回 Broker 版本列表。 - Topic 读写: 使用控制台生产者/消费者发送并消费一条 JSON 消息,确认无超时或 Leader 不可用错误。
- 日志检查: 查看
logs/server.log和logs/zookeeper.out,确认无ERROR或FATAL级别异常。
支付风控专项检查: 在 Kafka 配置中增加
message.max.bytes=10485760(10MB),确保风控事件中可能携带的图片或设备指纹数据不会被截断。同时设置 log.retention.hours=168(7天),满足监管审计要求。