下面给你一份在 Debian 上配置 Kafka 集群(多 broker)的实战步骤,偏向生产可用基础配置,使用 Kafka 3.x + Java 17(或 11)+ systemd。
假设 3 台 Debian 机器:
| 主机名 | IP | Kafka broker id |
|---|---|---|
| kafka1 | 192.168.1.11 | 1 |
| kafka2 | 192.168.1.12 | 2 |
| kafka3 | 192.168.1.13 | 3 |
Kafka 依赖 ZooKeeper(Kafka 3.5 前)或 KRaft(新模式)
下面先用 ZooKeeper 模式(最常用、最稳)
sudo apt update
sudo apt install -y openjdk-17-jdk
java -version
sudo useradd -m -s /bin/bash kafka
在 每台机器 执行:
cd /opt
sudo wget https://archive.apache.org/dist/kafka/3.6.1/kafka_2.13-3.6.1.tgz
sudo tar -xzf kafka_2.13-3.6.1.tgz
sudo mv kafka_2.13-3.6.1 kafka
sudo chown -R kafka:kafka /opt/kafka
sudo vim /opt/kafka/config/zookeeper.properties
内容:
dataDir=/var/lib/zookeeper
clientPort=2181
maxClientCnxns=0
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
sudo mkdir -p /var/lib/zookeeper
echo "1" | sudo tee /var/lib/zookeeper/myid # kafka1=1, kafka2=2...
编辑:
sudo vim /opt/kafka/config/server.properties
broker.id=1
listeners=PLAINTEXT://192.168.1.11:9092
advertised.listeners=PLAINTEXT://192.168.1.11:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/var/lib/kafka-logs
num.partitions=3
default.replication.factor=3
min.insync.replicas=2
zookeeper.connect=192.168.1.11:2181,192.168.1.12:2181,192.168.1.13:2181
zookeeper.connection.timeout.ms=18000
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
kafka2 / kafka3 只改 broker.id 和 IP
sudo mkdir -p /var/lib/kafka-logs
sudo chown -R kafka:kafka /var/lib/kafka-logs
sudo vim /etc/systemd/system/zookeeper.service
[Unit]
Description=ZooKeeper
After=network.target
[Service]
User=kafka
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo vim /etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka
After=zookeeper.service
[Service]
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now zookeeper
sudo systemctl enable --now kafka
/opt/kafka/bin/zookeeper-shell.sh localhost:2181
> ls /brokers/ids
/opt/kafka/bin/kafka-topics.sh \
--create \
--topic test \
--bootstrap-server 192.168.1.11:9092 \
--partitions 3 \
--replication-factor 3
kafka-console-producer.sh --topic test --bootstrap-server 192.168.1.11:9092
kafka-console-consumer.sh --topic test --bootstrap-server 192.168.1.11:9092 --from-beginning
✅ 防火墙
sudo ufw allow 2181
sudo ufw allow 9092
✅ advertised.listeners 必须写 真实 IP
✅ replication.factor > broker 数量 会建不了 topic
如果你用的是 Kafka 3.5+,我可以单独给你 KRaft 集群配置。
如果你愿意,可以告诉我:
我可以直接给你 一份可直接用的配置文件。