3.查询消费者组状态
用admin用户创建对应的JAAS文件acl_admin_jaas.conf
KafkaClient{
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin";
};
拷贝一份新的kafka-consumer-groups.sh,修改文件后保存退出。
cp kafka-consumer-groups.sh acl-kafka-consumer-groups.sh
# 把文件中的这一行
exec $(dirname $0)/kafka-run-class.sh kafka.admin.ConsumerGroupCommand "$@"
# 修改为
exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/opt/kafka/config/acl_admin_jaas.conf kafka.admin.ConsumerGroupCommand "$@"
同时也要设置以下两个参数,将期保存到bin/admin_sasl.config文件中:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
然后运行acl-kafka-consumer-groups.sh脚本查询消费者组的消费进度:
[root@kafka01 kafka]# bin/acl-kafka-consumer-groups.sh --bootstrap-server kafka01:9092 --group reader-group --describe --command-config bin/admin_sasl.config
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
reader-group first 0 8 8 0 consumer-reader-group-1-38c4bf8b-2a95-49e4-addd-572c8b25a3be /10.10.86.101 consumer-reader-group-1
使用go客户端操作:
func TestConsumerGroup(t *testing.T) {
config := sarama.NewConfig()
config.Consumer.Offsets.AutoCommit.Enable = true
config.Net.SASL.Enable = true
config.Net.SASL.User = "admin"
config.Net.SASL.Password = "admin"
admin, _ := sarama.NewClusterAdmin(addrs, config)
result, err := admin.DescribeConsumerGroups([]string{"reader-group"})
if err != nil {
t.Fatal(err)
}
for _, v := range result {
fmt.Println(v.GroupId, v.Members, v.State, v.Protocol, v.ProtocolType, v.Err)
}
}
ACL相关操作
在配置好SASL后,启动Zookeeper集群和Kafka集群之后,就可以使用kafka-acls.sh脚本来操作ACL机制。
(1)查看:在kafka-acls.sh脚本中传入list参数来查看ACL授权新
[hadoop@dn1 bin]$ kafka-acls.sh --list --authorizer-properties zookeeper.connect=kafka01:2181
(2)创建:创建待授权主题之前,在kafka-acls.sh脚本中指定JAAS文件路径,然后在执行创建操作
[hadoop@dn1 bin]$ kafka-topics.sh --create --zookeeper dn1:2181 --replication-factor 1 --partitions 1 --topic kafka_acl_topic
(3)生产者授权:对生产者执行授权操作
[hadoop@dn1 ~]$ kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=dn1:2181 --add --allow-principalUser:producer --operation Write --topic kafka_acl_topic
(4)消费者授权:对生产者执行授权后,通过消费者来进行验证
[hadoop@dn1 ~]$ kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=dn1:2181 --add --allow-principalUser:consumer --operation Read --topic kafka_acl_topic
(5)删除:通过remove参数来回收相关权限
[hadoop@dn1 bin]$ kafka-acls.sh --authorizer-properties zookeeper.connect=dn1:2181 --remove --allow-principal User:producer --operation Write --topic kafka_acl_topic3
(6)消费者组授权
kafkabin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=kafka01:2181 --add --allow-principal User:reader --operation Read --group reader-group1
注意:开启acl后,消费者消费的topic和消费者组都需要授权才能访问。