Kafka AdminClient配置SCRAM

2021-05-01  本文已影响0人  淡淡的小番茄

kafka2.7.0才支持通过API的方式,配置SCRAM。

因为我们使用的2.3.9版本,目前没有直接的JAVA API来调用。熟悉的味道,开始查看源代码。通过查看

kafka-configs.sh脚本,找到class的代码入口:

kafka.admin.ConfigCommand。这个类是通过scala编写的,然后编译成class文件,放在了kafka-client包内。然后我们尝试第一种方式,直接通过java代码调用scala代码的main方法:

public static void main(String[] args) throws NoSuchAlgorithmException {

long a = System.currentTimeMillis();

    kafka.admin.ConfigCommand.main(args);

    long b = System.currentTimeMillis();

    System.out.println(b-a);

    }

    参数传递与命令行方式一样:

    --zookeeper 172.30.233.149:2181 --alter --add-config SCRAM-SHA-256=[iterations=8192,password=cons-sec],SCRAM-SHA-512=[password=cons-sec] --entity-type users --entity-name consumer

本地main方法执行后,发现耗时很长,需要4-5s时间。

然后继续深入查看kafka.admin.ConfigCommand的源代码,其对entity-type users的情况大体思路是本地生成相应的加解密需要的相关信息,然后操作zk,所以就有了第二种方式的尝试。我们自己生产加密信息串,然后自己操作zk。

如下:

salt=aTM5MzJkYnJncXZib2pzb3l0b3kwaGJybg==,stored_key=KiMC/9Utm/9GIG2QQ/WY+CyqmiYq379QmucRMCDYWZc=,server_key=kiKf8pEwVNRM2r+ZQsyzQ2dlpGb6dWqZyj3+FqLksiQ=,iterations=8192

java代码如下:

ScramFormatter formatter = new ScramFormatter(ScramMechanism.SCRAM_SHA_256);

ScramCredential scramCredential = formatter.generateCredential("admin-sec", 8192);

String s = ScramCredentialUtils.credentialToString(scramCredential);

此种方式有待验证。

上一篇下一篇

猜你喜欢

热点阅读