Kafka安装配置(SASL/SCRAM动态认证)

本文详细介绍了如何在Kafka中配置SASL/SCRAM动态认证,包括Zookeeper的安装,Kafka的配置,以及SASL/SCRAM用户的证书设置、服务端和客户端配置,确保在业务频繁变动时提供灵活的权限管理。同时,文章提供了全面的测试步骤以验证配置的有效性,并引用了多个相关资源作为参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        SASL/SCRAM验证方法可以在Kafka服务启动之后,动态的新增用户分并配权限,在业务变动频繁,开发人员多的情况下比SASL/PLAIN方法更加灵活。

Zookeeper:3.4.13,kafka依赖zookeeper,

Kafka:kafka_2.12-2.8.1

ZooInspector:zookeeper客户端查看工具

安装根目录:/app/kafka/

Zookeeper下载地址:Apache ZooKeeper

Kafka下载地址:Apache Kafka

1.安装zookeeper

1.1.上传到目录并解压

-- 进入zookeeper安装目录
cd /app/kafka
-- 选择zookeeper压缩包上传
rz
-- 解压文件
tar -zxvf zookeeper-3.4.13.tar.gz
-- 重命名
mv zookeeper-3.4.13 zookeeper

1.2.修改配置

-- 进入配置文件根目录
cd /app/kafka/zookeeper/conf
-- 复制配置文件
cp zoo_sample.cfg zoo.cfg
-- 修改配置文件zoo.cfg
vi zoo.cfg
    -- 配置2个配置项
    dataDir=/app/kafka/zookeeper/data
    dataLogDir=/app/kafka/zookeeper/logs

1.3.服务脚本

-- 进入zookeeper的bin目录
cd /app/kafka/zookeeper/bin
-- 启动服务,指定配置文件
./zkServer.sh start ../conf/zoo.cfg
-- 停止服务
./zkServer.sh stop
-- 查看状态
./zkServer.sh status
-- 启动客户端
./zkCli.sh
-- 查看zookeeper中的所有topic主题
ls /brokers/topics/
-- 删除test-topic主题
delete /brokers/topics/test-topic

2.安装kafka

2.1.上传到目录并解压

-- 进入kafka安装目录
cd /app/kafka
-- 选择kafka压缩包上传
rz
-- 解压文件
tar -zxvf kafka_2.12-2.8.1.tgz
-- 重命名
mv kafka_2.12-2.8.1 kafka

2.2.修改配置

-- 进入配置文件根目录
cd /app/kafka/kafka/config
-- 修改配置文件
vi server.properties
	broker.id=0		# broker.id属性在kafka集群中必须要是唯一
	listeners=PLAINTEXT://localhost:9092	# kafka部署的ip和端口号
	log.dir=/kafka/kafka-logs	# kafka的消息存储文件
	zookeeper.connect=localhost:2181	# kafka连接zookeeper服务的地址

2.3.服务脚本

-- 进入kafka的bin目录
cd /app/kafka/kafka/bin
-- 非后台启动脚本
./kafka-server-start.sh ../config/server.properties
-- 后台启动脚本
./kafka-server-start.sh -daemon ../config/server.properties 1>> kafka-server.log 2>> kafka-server.log &
-- 停止服务
./kafka-server-stop.sh
-- 创建test_topic主题
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 11 --topic test_topic
-- 扩容分区
./kafka-topics.sh -alter --partitions 20 --zookeeper localhost:2181 --topic test_topic
-- 查看主题列表
./kafka-topics.sh --list --zookeeper localhost:2181
-- 查看test_topic情况
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic test_topic
-- 删除test_topic主题
./kafka-topics.sh --delete --topic test_topic --zookeeper localhost:2181
-- 给test_topic主题生产消息
./kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
-- 从test_topic主题消费消息
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test_topic

3.配置SASL/SCRAM动态认证

        SASL/SCRAM认证是把凭证(credential)存储在Zookeeper,使用kafka-configs.sh在Zookeeper中创建凭据。对于每个SCRAM机制,必须添加具有机制名称的配置来创建凭证,在启动Kafka broker之前创建代理间通信的凭据。所以第一步,在没有设置任何权限的配置下启动Kafka和Zookeeper。

3.1.SCRAM用户证书配置

-- 进入kafka的bin目录
cd /app/kafka/kafka/bin
-- 创建broker通信用户:admin(在使用sasl之前必须先创建,否则启动报错)
./kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=admin-sec]' --entity-type users --entity-name admin
-- 创建生产者证书
./kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=producer-sec]' --entity-type users --entity-name producer
-- 创建消费者证书
./kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[password=consumer-sec]' --entity-type users --entity-name consumer
-- 查看用户[producer]的SCRAM证书
./kafka-configs.sh --zookeeper localhost:2181 --describe --entity-type users --entity-name producer
-- 删除用户[producer]的SCRAM证书
./kafka-configs.sh --zookeeper localhost:2181 --alter --delete-config 'SCRAM-SHA-256' --entity-type users --entity-name producer

3.2.服务端配置

-- 进入kafka目录
cd /app/kafka/kafka
-- 创建JAAS配置文件
vi config/kafka-server-jaas.conf
	-- 文件内容如下
	KafkaServer {
	org.apache.kafka.common.security.scram.ScramLoginModule required
	username="admin"
	password="admin-sec";
	};
-- 创建sasl启动脚本
cp bin/kafka-server-start.sh bin/kafka-server-start-sasl.sh
-- 修改sasl启动脚本
vi bin/kafka-server-start-sasl.sh
	-- 最后一行配置修改为如下
	exec $base_dir/kafka-run-class.sh $EXTRA_ARGS -Djava.security.auth.login.config=/app/kafka/kafka/config/kafka-server-jaas.conf kafka.Kafka "$@"
-- 创建sasl服务属性配置
cp config/server.properties config/server-sasl.properties
-- 修改sasl服务属性配置
vi config/server-sasl.properties
    -- 配置修改如下
	# 认证配置
	listeners=SASL_PLAINTEXT://localhost:9092
	security.inter.broker.protocol=SASL_PLAINTEXT
	sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
	sasl.enabled.mechanisms=SCRAM-SHA-256
	# ACL配置
	allow.everyone.if.no.acl.found=false
	super.users=User:admin
	authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

-- 重启Kafka和Zookeeper
cd /app/kafka/kafka/bin
./kafka-server-stop.sh
./kafka-server-start-sasl.sh ../config/server-sasl.properties
# 后台启动
./kafka-server-start-sasl.sh -daemon ../config/server-sasl.properties 1>> kafka-server-sasl.log 2>> kafka-server-sasl.log &
cd /app/kafka/zookeeper/bin
./zkServer.sh stop
./zkServer.sh start ../conf/zoo.cfg

3.3.客户端配置

-- 进入kafka目录
cd /app/kafka/kafka
-- 创建admin用户客户端JAAS配置文件
vi config/kafka-client-scram-admin-jaas.conf
	-- 文件内容如下
	KafkaServer {
	org.apache.kafka.common.security.scram.ScramLoginModule required
	username="admin"
	password="admin-sec";
	};
-- 创建producer用户客户端JAAS配置文件
vi config/kafka-client-scram-producer-jaas.conf
	-- 文件内容如下
	KafkaServer {
	org.apache.kafka.common.security.scram.ScramLoginModule required
	username="producer"
	password="producer-sec";
	};
-- 创建consumer用户客户端JAAS配置文件
vi config/kafka-client-scram-consumer-jaas.conf
	-- 文件内容如下
	KafkaServer {
	org.apache.kafka.common.security.scram.ScramLoginModule required
	username="consumer"
	password="consumer-sec";
	};
-- 创建生产者sasl启动脚本
cp bin/kafka-console-producer.sh bin/kafka-console-producer-sasl.sh
-- 修改生产者sasl启动脚本
vi bin/kafka-console-producer-sasl.sh
	-- 配置修改为如下
	exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/app/kafka/kafka/config/kafka-client-scram-producer-jaas.conf
-- 创建消费者sasl启动脚本
cp bin/kafka-console-consumer.sh bin/kafka-console-consumer-sasl.sh
-- 修改消费者sasl启动脚本
vi bin/kafka-console-consumer-sasl.sh
	-- 配置修改为如下
	exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/app/kafka/kafka/config/kafka-client-scram-consumer-jaas.conf
-- 修改属性配置consumer.properties和producer.properties,修改方式相同
vi consumer.properties
	-- 修改配置如下
	security.protocol=SASL_PLAINTEXT
	sasl.mechanism=SCRAM-SHA-256

3.4.读写权限配置

-- 进入kafka的bin目录
cd /app/kafka/kafka/bin
-- 对生产者producer指定主题(test-topic)赋予写的权限
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:producer --operation Write --topic test-topic
-- 对消费者consumer指定主题(test-topic)赋予读的权限
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:consumer --operation Read --topic test-topic
-- 对消费者组(groupid='test-group')授权
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:consumer --operation Read --group test-group
-- 查看权限
./kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=localhost:2181 --list

4.测试

4.1.Kafka自带客户端测试

-- 启动zookeeper服务(如未启动)
cd /app/kafka/zookeeper/bin
./zkServer.sh start zoo.cfg
-- 启动kafka服务(如未启动)
cd /app/kafka/kafka/bin
./kafka-server-start-sasl.sh -daemon ../config/server-sasl.properties 1>> kafka-server-sasl.log 2>> kafka-server-sasl.log &
-- 创建主题
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test-topic
-- 启动生产者
./kafka-console-producer.sh --broker-list localhost:9092 --topic test-topic
-- 启动消费者
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test-topic
-- 消息服务验证测试
#生产者窗口输入内容,消费者窗口能马上消费到

参考:
https://blog.youkuaiyun.com/qq_41688840/article/details/123031628
https://www.cnblogs.com/niun/articles/15504275.html
https://blog.youkuaiyun.com/qq_38616503/article/details/117529690
https://blog.youkuaiyun.com/weixin_30367543/article/details/98409382

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值