在 Debian 上配置 Kafka 权限,需要分几个层面来看:系统层权限、Kafka 自身 ACL 权限、以及 Kafka 与 ZooKeeper 的权限。下面按“由浅入深”的方式给你一个完整说明。
不建议用 root 运行 Kafka。
sudo useradd -r -m -s /bin/bash kafka
假设 Kafka 安装在 /opt/kafka
sudo chown -R kafka:kafka /opt/kafka
sudo chmod -R 750 /opt/kafka
sudo mkdir -p /var/lib/kafka /var/log/kafka
sudo chown -R kafka:kafka /var/lib/kafka /var/log/kafka
编辑:
/opt/kafka/config/server.properties
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin
⚠️ 生产环境一定要关闭
allow.everyone.if.no.acl.found=true
Kafka 使用 ACL(Access Control Lists) 控制:
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
listeners=SASL_PLAINTEXT://localhost:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
/opt/kafka/config/kafka_server_jaas.conf
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";
};
启动时加载:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:producer \
--producer \
--topic test-topic
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--add \
--allow-principal User:consumer \
--consumer \
--topic test-topic \
--group test-group
kafka-acls.sh \
--bootstrap-server localhost:9092 \
--list \
--topic test-topic
zookeeper.set.acl=true
kafka-configs.sh \
--zookeeper localhost:2181 \
--alter \
--entity-type brokers \
--entity-name 0 \
--add-config "zookeeper.client.acl=world:anyone"
或配置 SASL + ZK Digest(较复杂,适合生产)。
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="producer" \
password="producer-secret";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
username="consumer" \
password="consumer-secret";
group.id=test-group
✅ Java 必须安装
sudo apt install openjdk-17-jdk
✅ 防火墙放行端口
sudo ufw allow 9092
sudo ufw allow 2181
✅ systemd 权限
[Service]
User=kafka
Group=kafka
| 层级 | 建议 |
|---|---|
| 系统 | 专用 kafka 用户 |
| Kafka | 启用 ACL |
| 用户 | SASL PLAIN / SCRAM |
| 生产 | 禁用 everyone |
| ZK | 开启 ACL |
如果你愿意,我可以:
你现在用的是 Kafka 几?是否有 ZooKeeper?