温馨提示×

Debian运行Kafka要注意什么

小樊
46
2026-07-23 17:00:50
栏目: 智能运维

在 Debian 上运行 Apache Kafka 时,有几个关键点需要特别注意,涉及 系统环境、Java、磁盘、网络、权限和运维。下面按类别给你一个比较实用的 checklist。


一、系统与版本选择

1. Debian 版本

  • 推荐使用 Debian 11 (Bullseye)Debian 12 (Bookworm)
  • 内核尽量 ≥ 5.x(对 IO、epoll 更友好)

2. Kafka 版本

  • 生产环境建议:
    • Kafka 3.x +
    • 不再使用 ZooKeeper(推荐 KRaft 模式
  • 下载地址:
    https://kafka.apache.org/downloads

二、Java 环境(非常重要)

1. Java 版本

Kafka 对 Java 有明确要求:

Kafka 版本 Java 要求
3.x Java 11 或 17(推荐 17)
2.8 及以下 Java 8 或 11

推荐:

apt install openjdk-17-jdk

验证:

java -version

2. JAVA_HOME

Debian 下建议显式设置:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

可写入:

/etc/profile.d/kafka.sh

三、磁盘与文件系统

1. 磁盘类型(非常关键)

  • 强烈推荐 SSD
  • ❌ 不推荐 NFS / 网络盘

Kafka 对磁盘 IO 非常敏感。

2. 文件系统

  • ext4(稳定)
  • xfs(推荐,性能更好)

3. 挂载参数(建议)

noatime,nodiratime

示例:

mount -o noatime,nodiratime /dev/sdb /data/kafka

四、目录与权限

1. 数据目录

mkdir -p /data/kafka
chown -R kafka:kafka /data/kafka

2. 不要使用 root 运行 Kafka

创建专用用户:

useradd -r -s /bin/bash kafka
chown -R kafka:kafka /opt/kafka

五、Kafka 配置注意事项

1. 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 写错 → 客户端连不上
  • 数据目录权限不对 → broker 起不来

六、KRaft 模式(无 ZooKeeper)

1. 生成 cluster ID

KAFKA_CLUSTER_ID=$(bin/kafka-storage.sh random-uuid)

2. 格式化存储

bin/kafka-storage.sh format \
  -t $KAFKA_CLUSTER_ID \
  -c config/kraft/server.properties

3. 启动

bin/kafka-server-start.sh config/kraft/server.properties

✅ 推荐新项目直接用 KRaft


七、内存与 JVM 参数

1. 堆内存

不要给太大:

export KAFKA_HEAP_OPTS="-Xms2G -Xmx2G"

⚠️ Kafka 依赖 page cache,不是堆内存

2. 文件句柄数

Debian 默认可能不够:

ulimit -n

建议:

* soft nofile 100000
* hard nofile 100000

写入:

/etc/security/limits.conf

八、网络与防火墙

1. 端口

  • Kafka:9092
  • KRaft controller:9093

2. Debian 防火墙

ufw allow 9092
ufw allow 9093

九、Systemd 服务(生产必做)

示例 /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

十、常见问题

1. 启动慢

  • DNS 反解问题
  • 解决:
host.name=<IP>

/etc/hosts 配置正确

2. 磁盘爆满

  • 检查 retention 设置
  • 监控 /data/kafka

3. broker 自动退出

  • 查看:
journalctl -u kafka
/opt/kafka/logs/server.log

十一、生产建议

✅ 至少 3 个 broker
✅ 开启监控(Prometheus + JMX)
✅ 日志目录单独磁盘
✅ 不使用 swap
✅ Debian 保持更新


如果你愿意,我可以:

  • ✅ 给你一份 Debian + Kafka KRaft 完整安装脚本
  • ✅ 帮你排查具体报错
  • ✅ 对比 Debian vs Ubuntu vs CentOS 的 Kafka 差异

直接把你的 Debian 版本 + Kafka 版本 + 报错日志贴出来即可。

0