下面以 Linux 环境下 Kafka 集群部署 为例,给你一份实操向、生产可用的部署说明(基于 Kafka 3.x,自带 Zookeeper 或 KRaft 模式都可,这里先讲最常用、最稳定的 Zookeeper 模式)。
假设 3 台服务器:
| 主机名 | IP | 角色 |
|---|---|---|
| kafka1 | 192.168.1.101 | broker + zookeeper |
| kafka2 | 192.168.1.102 | broker + zookeeper |
| kafka3 | 192.168.1.103 | broker + zookeeper |
Kafka 依赖 Java,推荐 JDK 8 / 11 / 17(对应 Kafka 版本)
每台机器执行:
# 关闭防火墙或放行端口
systemctl stop firewalld
systemctl disable firewalld
# 安装 JDK
yum install -y java-11-openjdk
# 创建用户(可选)
useradd kafka
wget https://archive.apache.org/dist/kafka/3.6.1/kafka_2.13-3.6.1.tgz
tar -zxvf kafka_2.13-3.6.1.tgz -C /opt
ln -s /opt/kafka_2.13-3.6.1 /opt/kafka
编辑:
vi /opt/kafka/config/zookeeper.properties
统一配置(3 台一致):
dataDir=/data/zookeeper
clientPort=2181
maxClientCnxns=0
server.1=192.168.1.101:2888:3888
server.2=192.168.1.102:2888:3888
server.3=192.168.1.103:2888:3888
每台机器不同:
# kafka1
echo 1 > /data/zookeeper/myid
# kafka2
echo 2 > /data/zookeeper/myid
# kafka3
echo 3 > /data/zookeeper/myid
/opt/kafka/bin/zookeeper-server-start.sh -daemon /opt/kafka/config/zookeeper.properties
vi /opt/kafka/config/server.properties
broker.id=1
listeners=PLAINTEXT://192.168.1.101:9092
advertised.listeners=PLAINTEXT://192.168.1.101:9092
zookeeper.connect=192.168.1.101:2181,192.168.1.102:2181,192.168.1.103:2181
log.dirs=/data/kafka-logs
num.partitions=3
default.replication.factor=3
min.insync.replicas=2
broker.id=2
listeners=PLAINTEXT://192.168.1.102:9092
advertised.listeners=PLAINTEXT://192.168.1.102:9092
broker.id=3
listeners=PLAINTEXT://192.168.1.103:9092
advertised.listeners=PLAINTEXT://192.168.1.103:9092
⚠️ broker.id 必须唯一
/opt/kafka/bin/kafka-server-start.sh -daemon /opt/kafka/config/server.properties
kafka-topics.sh --create \
--bootstrap-server 192.168.1.101:9092 \
--replication-factor 3 \
--partitions 3 \
--topic test-topic
kafka-topics.sh --describe \
--bootstrap-server 192.168.1.101:9092 \
--topic test-topic
# 生产
kafka-console-producer.sh \
--bootstrap-server 192.168.1.101:9092 \
--topic test-topic
# 消费(另一台)
kafka-console-consumer.sh \
--bootstrap-server 192.168.1.102:9092 \
--topic test-topic --from-beginning
如果你用的是 Kafka 3.3+,可以用 KRaft:
# 生成集群 ID
kafka-storage.sh random-uuid
# 格式化
kafka-storage.sh format -t <uuid> -c config/kraft/server.properties
适合:
acks=alllog.retention.hours如果你愿意,我可以:
你现在是测试还是生产环境?