在 Debian 上运行 Apache Kafka 时,有几个关键点需要特别注意,涉及 系统环境、Java、磁盘、网络、权限和运维。下面按类别给你一个比较实用的 checklist。
Kafka 对 Java 有明确要求:
| Kafka 版本 | Java 要求 |
|---|---|
| 3.x | Java 11 或 17(推荐 17) |
| 2.8 及以下 | Java 8 或 11 |
✅ 推荐:
apt install openjdk-17-jdk
验证:
java -version
Debian 下建议显式设置:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
可写入:
/etc/profile.d/kafka.sh
Kafka 对磁盘 IO 非常敏感。
ext4(稳定)xfs(推荐,性能更好)noatime,nodiratime
示例:
mount -o noatime,nodiratime /dev/sdb /data/kafka
mkdir -p /data/kafka
chown -R kafka:kafka /data/kafka
创建专用用户:
useradd -r -s /bin/bash kafka
chown -R kafka:kafka /opt/kafka
server.properties 关键项# broker id
broker.id=1
# 数据目录
log.dirs=/data/kafka
# 监听地址(不要只写 localhost)
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<服务器IP>:9092
# 分区与副本
num.partitions=3
default.replication.factor=2
# 日志保留
log.retention.hours=168
log.segment.bytes=1073741824
⚠️ 常见错误
advertised.listeners 写错 → 客户端连不上KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)
bin/kafka-storage.sh format \
-t $KAFKA_CLUSTER_ID \
-c config/kraft/server.properties
bin/kafka-server-start.sh config/kraft/server.properties
✅ 推荐新项目直接用 KRaft
不要给太大:
export KAFKA_HEAP_OPTS="-Xms2G -Xmx2G"
⚠️ Kafka 依赖 page cache,不是堆内存
Debian 默认可能不够:
ulimit -n
建议:
* soft nofile 100000
* hard nofile 100000
写入:
/etc/security/limits.conf
90929093ufw allow 9092
ufw allow 9093
示例 /etc/systemd/system/kafka.service:
[Unit]
Description=Apache Kafka
After=network.target
[Service]
Type=simple
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用:
systemctl daemon-reload
systemctl enable kafka
systemctl start kafka
host.name=<IP>
或 /etc/hosts 配置正确
/data/kafkajournalctl -u kafka
/opt/kafka/logs/server.log
✅ 至少 3 个 broker
✅ 开启监控(Prometheus + JMX)
✅ 日志目录单独磁盘
✅ 不使用 swap
✅ Debian 保持更新
如果你愿意,我可以:
直接把你的 Debian 版本 + Kafka 版本 + 报错日志贴出来即可。