三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

在WSL2上5分钟搞定Kafka 3.6.0伪集群:从单实例到三节点保姆级配置

在WSL2上5分钟搞定Kafka 3.6.0伪集群:从单实例到三节点保姆级配置

在WSL2上5分钟搞定Kafka 3.6.0伪集群:从单实例到三节点保姆级配置

对于需要在Windows环境下快速搭建Kafka学习或开发环境的开发者来说,WSL2提供了一个近乎原生的Linux体验。本文将带你用最短的时间、最少的命令,完成从下载Kafka 3.6.0到成功运行一个三节点伪集群的全过程。

1. 环境准备与Kafka安装

在开始之前,确保你的系统满足以下条件:

  • Windows 10版本2004或更高,或Windows 11
  • 已启用WSL2功能
  • 已安装Ubuntu 22.04 LTS发行版

首先更新系统并安装必要的依赖:

sudo apt update && sudo apt upgrade -y sudo apt install -y wget tar openjdk-17-jdk

下载并解压Kafka 3.6.0:

wget https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz -P /tmp sudo tar xvf /tmp/kafka_2.13-3.6.0.tgz -C /opt sudo ln -s /opt/kafka_2.13-3.6.0 /opt/kafka

设置环境变量:

echo 'export KAFKA_HOME=/opt/kafka' >> ~/.bashrc echo 'export PATH=$PATH:$KAFKA_HOME/bin' >> ~/.bashrc source ~/.bashrc

2. 单节点Kafka快速启动

我们先从单节点开始,验证基本功能。创建日志目录并设置权限:

sudo mkdir -p /var/lib/kafka/data sudo chown -R $USER:$USER /var/lib/kafka

修改配置文件$KAFKA_HOME/config/server.properties的关键参数:

listeners=PLAINTEXT://0.0.0.0:9092 advertised.listeners=PLAINTEXT://localhost:9092 log.dirs=/var/lib/kafka/data

启动Zookeeper和Kafka服务:

# 新终端窗口 zookeeper-server-start.sh $KAFKA_HOME/config/zookeeper.properties # 另一个新终端窗口 kafka-server-start.sh $KAFKA_HOME/config/server.properties

快速测试消息生产与消费:

# 创建测试主题 kafka-topics.sh --create --bootstrap-server localhost:9092 \ --topic quick-test --partitions 1 --replication-factor 1 # 启动消费者 kafka-console-consumer.sh --bootstrap-server localhost:9092 \ --topic quick-test --from-beginning # 另一个终端启动生产者并发送消息 kafka-console-producer.sh --bootstrap-server localhost:9092 \ --topic quick-test

3. 三节点伪集群配置

现在我们将扩展为三节点伪集群。首先为每个节点创建独立目录:

for i in {1..3}; do sudo cp -r /opt/kafka /opt/kafka-$i sudo mkdir -p /var/lib/kafka/data-$i done

关键配置文件修改对比:

参数节点1节点2节点3
broker.id123
listenersPLAINTEXT://:9092PLAINTEXT://:9093PLAINTEXT://:9094
log.dirs/var/lib/kafka/data-1/var/lib/kafka/data-2/var/lib/kafka/data-3

修改各节点的server.properties文件:

# 节点1配置 sed -i 's/broker.id=0/broker.id=1/' /opt/kafka-1/config/server.properties sed -i 's/listeners=PLAINTEXT.*/listeners=PLAINTEXT:\/\/:9092/' /opt/kafka-1/config/server.properties sed -i 's|log.dirs=.*|log.dirs=/var/lib/kafka/data-1|' /opt/kafka-1/config/server.properties # 节点2和节点3类似修改,注意替换端口和目录

4. 集群启动与验证

启动所有三个节点:

# 三个不同的终端窗口 kafka-server-start.sh /opt/kafka-1/config/server.properties kafka-server-start.sh /opt/kafka-2/config/server.properties kafka-server-start.sh /opt/kafka-3/config/server.properties

创建测试主题验证集群状态:

kafka-topics.sh --create --bootstrap-server localhost:9092 \ --topic cluster-test --partitions 3 --replication-factor 3 kafka-topics.sh --describe --bootstrap-server localhost:9092 \ --topic cluster-test

预期输出应显示分区均匀分布在三个broker上,类似:

Topic: cluster-test Partition: 0 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Topic: cluster-test Partition: 1 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Topic: cluster-test Partition: 2 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2

5. 一键脚本与自动化

为提升效率,我们可以创建自动化脚本。保存以下内容为kafka-cluster.sh

#!/bin/bash # 启动集群 start_cluster() { for i in {1..3}; do gnome-terminal -- kafka-server-start.sh /opt/kafka-$i/config/server.properties done } # 停止集群 stop_cluster() { for i in {1..3}; do kafka-server-stop.sh done sleep 3 pkill -f kafka } # 创建测试主题 create_topic() { kafka-topics.sh --create --bootstrap-server localhost:9092 \ --topic $1 --partitions 3 --replication-factor 3 } case "$1" in start) start_cluster ;; stop) stop_cluster ;; topic) create_topic $2 ;; *) echo "Usage: $0 {start|stop|topic [name]}" ;; esac

使用说明:

  • ./kafka-cluster.sh start- 启动三节点集群
  • ./kafka-cluster.sh stop- 停止集群
  • ./kafka-cluster.sh topic test- 创建测试主题

6. 常见问题排查

遇到问题时,可以检查以下方面:

  1. 端口冲突

    • 确保9092-9094端口未被占用
    • netstat -tulnp | grep -E '909[2-4]'
  2. 文件权限

    • 确保数据目录有写入权限
    • ls -ld /var/lib/kafka/data-*
  3. 日志查看

    • 各节点的日志位于/opt/kafka-{1,2,3}/logs/server.log
    • tail -f /opt/kafka-1/logs/server.log
  4. Zookeeper连接

    • 确保Zookeeper服务正常运行
    • echo stat | nc localhost 2181
  5. WSL2网络配置

    • 如果遇到连接问题,尝试:
    sudo sed -i 's/listeners=PLAINTEXT.*/listeners=PLAINTEXT:\/\/0.0.0.0:9092/' /opt/kafka-1/config/server.properties

7. 性能优化建议

对于开发环境,可以考虑以下优化:

  1. 内存调整

    • 编辑/opt/kafka-1/bin/kafka-server-start.sh
    • 修改export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"为适合的值
  2. 日志保留

    log.retention.hours=24 log.segment.bytes=1073741824
  3. 关闭不必要的功能

    auto.create.topics.enable=false delete.topic.enable=true
  4. 监控配置

    • 启用JMX监控:
    export JMX_PORT=9999 kafka-server-start.sh /opt/kafka-1/config/server.properties

在实际开发中,这套配置已经能够满足大多数学习和测试需求。对于生产环境,建议使用独立的物理机或虚拟机部署真正的分布式集群。

← 返回列表