在 CentOS 上部署和配置 Kafka,有几个常见但容易踩坑的点,下面按「系统层面 → Kafka 配置 → 运维注意」给你梳理一下。
Kafka 依赖 JVM:
java -version
⚠️ 不要用太老或非官方 JDK(如 OpenJDK 早期版本可能有 GC 问题)
Kafka 对 hostname 解析非常敏感
hostname
cat /etc/hosts
建议:
127.0.0.1 localhost
192.168.1.10 kafka1
listeners 和 advertised.listeners 不要用 localhost(否则远程连不上)
CentOS 常见问题来源:
# 关闭防火墙(测试环境)
systemctl stop firewalld
systemctl disable firewalld
# 或开放端口
firewall-cmd --add-port=9092/tcp --permanent
firewall-cmd --reload
SELinux(生产建议配置而非关闭):
setenforce 0
broker.id=0
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://kafka1:9092
zookeeper.connect=localhost:2181
⚠️ 重点:
advertised.listeners = 客户端实际访问地址0.0.0.0 只能用于 listeners,不能用于 advertised默认:
log.dirs=/tmp/kafka-logs
⚠️ /tmp 会被清理,生产一定要改:
log.dirs=/data/kafka/logs
并确保目录权限:
mkdir -p /data/kafka/logs
chown -R kafka:kafka /data/kafka
Kafka 是高并发 IO 应用:
ulimit -n
建议 ≥ 100000
修改:
# /etc/security/limits.conf
kafka soft nofile 100000
kafka hard nofile 100000
num.partitions=3
default.replication.factor=3
min.insync.replicas=2
⚠️ 单节点只能 replication.factor=1
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181
⚠️ Kafka 3.3+ 开始支持 KRaft(无 Zookeeper)
bin/kafka-server-start.sh 或 server.properties 中:
export KAFKA_HEAP_OPTS="-Xms4G -Xmx4G"
⚠️ 不要超过物理内存 50%
建议开启:
-Xlog:gc*:file=/var/log/kafka/gc.log:time
不要用 & 随便跑:
nohup bin/kafka-server-start.sh config/server.properties > /var/log/kafka/server.log 2>&1 &
生产建议:
至少关注:
✅ hostname 解析
✅ advertised.listeners
✅ 防火墙 / SELinux
✅ 日志目录不在 /tmp
✅ 文件描述符
✅ JVM 内存别太大
如果你愿意,可以告诉我:
我可以直接给你一份 可复制的 server.properties + systemd 配置。