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 图展示了单机模式与集群模式的核心差异,帮助你理解开发环境与生产环境的部署边界。

单机模式 vs 集群模式架构对比 单机模式(开发/测试) Zookeeper Kafka Broker 2181 Topic: payment-risk-test 分区: 3 / 副本: 1 生产者 消费者 单点故障 · 适合功能验证 集群模式(生产/预发) ZK 1 ZK 2 ZK 3 Broker 1 Broker 2 Broker 3 ISR 复制 Topic: payment-risk-test 分区: 3 / 副本: 3 高可用 · 容忍单节点故障

3.7 环境验证清单

完成安装后,逐项检查以下指标,确保环境达到支付风控场景的可用标准:

  1. 进程存活: jps 或 ps aux | grep -E "kafka|zookeeper" 确认进程在运行。
  2. 端口监听: netstat -tlnp | grep -E "2181|9092" 确认端口已绑定。
  3. Zookeeper 状态: echo stat | nc localhost 2181 查看 Mode 和连接数。
  4. Kafka 集群健康: bin/kafka-broker-api-versions.sh --bootstrap-server localhost:9092 应返回 Broker 版本列表。
  5. Topic 读写: 使用控制台生产者/消费者发送并消费一条 JSON 消息,确认无超时或 Leader 不可用错误。
  6. 日志检查: 查看 logs/server.log 和 logs/zookeeper.out,确认无 ERROR 或 FATAL 级别异常。
支付风控专项检查: 在 Kafka 配置中增加 message.max.bytes=10485760(10MB),确保风控事件中可能携带的图片或设备指纹数据不会被截断。同时设置 log.retention.hours=168(7天),满足监管审计要求。