在 Debian 上给 Kafka 设置权限,通常包含 文件系统权限、运行用户权限、以及 Kafka 自身的 ACL(访问控制)。下面按常见场景一步步说明。
假设 Kafka 安装在 /opt/kafka:
sudo chown -R kafka:kafka /opt/kafka
sudo chmod -R 755 /opt/kafka
建议 Kafka 不要使用 root 运行
sudo useradd -r -m -s /bin/bash kafka
sudo usermod -aG kafka kafka
然后切换用户:
sudo su - kafka
Kafka 默认数据目录:
log.dirs=/tmp/kafka-logs
生产环境建议改到:
log.dirs=/var/lib/kafka-logs
设置权限:
sudo mkdir -p /var/lib/kafka-logs
sudo chown -R kafka:kafka /var/lib/kafka-logs
sudo chmod 750 /var/lib/kafka-logs
sudo mkdir -p /var/lib/zookeeper
sudo chown -R kafka:kafka /var/lib/zookeeper
sudo chmod 750 /var/lib/zookeeper
如果你用 systemd 管理 Kafka:
/etc/systemd/system/kafka.service[Unit]
Description=Apache Kafka
After=network.target
[Service]
Type=simple
User=kafka
Group=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
重载并启动:
sudo systemctl daemon-reload
sudo systemctl start kafka
sudo systemctl enable kafka
如果你启用了 Kafka ACL(安全模式),需要额外配置。
server.properties:
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_producer="producer-secret"
user_consumer="consumer-secret";
};
允许 producer 写 topic:
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:producer \
--producer \
--topic test-topic
允许 consumer 读 topic:
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:consumer \
--consumer \
--topic test-topic \
--group test-group
Permission denied
✅ 排查:
ls -ld /var/lib/kafka-logs
ps aux | grep kafka
| 目录 | 权限 |
|---|---|
| Kafka 安装目录 | 755 |
| 数据目录 | 750 |
| 运行用户 | 非 root |
| 日志目录 | kafka 可写 |
Debian 上 Kafka 的“权限设置” = 正确的用户 + 正确的目录权限 +(可选)Kafka ACL。
如果你愿意,可以告诉我:
我可以给你一套完全匹配你环境的权限配置方案。