通过 producer、consumer、admin 实现了写入、读取和 consumer-group 控制权限的分离。没有配置 zookeeper 的 SASL
Broker 端
1. 创建 JAAS 文件,注意结尾两个分号,保存为 kafka_server_jaas.conf
#vim config/kafka_server_jaas.conf KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin" user_admin="admin" user_reader="reader" user_writer="writer"; }; |
由于 kafka-server-start.sh 只接收 server.properties 的位置,故需要修改启动脚本,cp 一份修改最后一行为
vim ../bin/kafka-server-start.sh exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/workspace/kafka/kafka_2.11-0.11.0.3/config/kafka_server_jaas.conf kafka.Kafka "$@" |
2. 修改 broker 启动所需的 server.properties 文件,前五条必须
vim config/server.properties # 配置ACL入口类 authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer # 本例使用SASL_PLAINTEXT listeners=SASL_PLAINTEXT://:9092 security.inter.broker.protocol= SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=PLAIN sasl.enabled.mechanisms=PLAIN # 设置本例中admin为超级用户 super.users=User:admin #一个参数allow.everyone.if.no.acl.found #设置为true,ACL机制改为黑名单机制,只有黑名单中的用户无法访问 #设置为false,ACL机制改为白名单机制,只有白名单中的用户可以访问,默认值为false |
启动 broker
nohup bin/kafka-server-start.sh config/server.properties > /dev/null 2>&1 & |
console-producer 脚本
创建 kafka-prod-jaas.conf 认证文件
vim config/writer_jaas.conf KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username="writer" password="writer"; }; |
2. cp 一份脚本,修改最后一行
vim bin/kafka-console-producer.sh exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/workspace/kafka/kafka_2.11-0.11.0.3/config/writer_jaas.conf kafka.tools.ConsoleProducer "$@" |
使用 ACL 配置 producer 写入授权
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:writer --operation Write --topic test |
使用修改后的 console-producer 脚本发送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test --producer.config producer.config |
如果失败,请将localhost更改成brokerIP
console-cosnumer 脚本
1. 创建 kafka-cons-jaas.conf 认证文件
vim config/reader_jaas.conf KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username="reader" password="reader"; }; |
2. cp 一份脚本,修改最后一行
vim bin/kafka-console-consumer.sh exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/workspace/kafka/kafka_2.11-0.11.0.3/config/reader_jaas.conf kafka.tools.ConsoleConsumer "$@" |
3. 创建 consumer.config 文件或修改 /config/consumer.properties 文件
vim consumer.config security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN group.id=test-group #group.id=test-group #group可以指定,也可以不指定。 #一个问题:指定group后--from-beginning不生效,consumer会从记录的offset处继续消费 |
4. 使用 ACL 配置 consumer 读取授权
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:reader --operation Read --topic test |
5.使用修改后的 console-consumer 脚本接收消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning --consumer.config consumer.config |
仍然会报错
6.消费者组制授权
bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:reader --operation Read --group test-group |
就可以正常消费数据了
在 Kafka 配置 SASL 后,需要对 kafka-manager 增加相应配置,监控 offset 等指标
无 SASL zookeeper ,在勾选 poll consumer info 后注意以下三个选项对应 broker 的配置即可,升级到最新版本,账号密码使用管理员