在 Debian 上部署 Kafka 时,“权限”通常涉及 3 个层面:
下面按常见场景说明。
创建一个专用用户:
sudo useradd -m kafka
sudo passwd kafka
Kafka 数据目录(如 /var/lib/kafka):
sudo mkdir -p /var/lib/kafka
sudo chown -R kafka:kafka /var/lib/kafka
sudo chmod 750 /var/lib/kafka
sudo mkdir -p /var/log/kafka
sudo chown -R kafka:kafka /var/log/kafka
sudo -u kafka \
/opt/kafka/bin/kafka-server-start.sh \
/opt/kafka/config/server.properties
前提:必须启用 SASL 或 SSL,否则 ACL 不生效
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
allow.everyone.if.no.acl.found=false
# server.properties
listeners=SASL_PLAINTEXT://:9092
security.interceptor.classes=org.apache.kafka.common.security.plain.PlainLoginModule
sasl.enabled.mechanisms=PLAIN
kafka_server_jaas.conf:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_test="test-secret";
};
允许 test 用户生产消息:
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:test \
--producer \
--topic test-topic
允许消费:
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:test \
--consumer \
--topic test-topic \
--group test-group
如果只是内部使用,可不做 ACL:
allow.everyone.if.no.acl.found=true
⚠️ 生产环境不推荐
sudo ufw allow 9092/tcp
sudo ufw allow from 192.168.1.0/24 to any port 9092
/etc/systemd/system/kafka.service
[Unit]
Description=Apache Kafka
After=network.target
[Service]
User=kafka
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable kafka
sudo systemctl start kafka
❌ 用 root 跑 Kafka
❌ 数据目录权限 777
❌ 没开 SASL 却配 ACL
❌ 防火墙没放行 9092
如果你能告诉我:
我可以直接给你一份可用的配置文件。