Apache Kafka API AdminClient Scram账户的创建与删除

7-4 二叉树的遍历!(简单) (25 分) 在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)如何准备面试?1、前期铺垫(技术沉积)程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。 阅读详情

前言

由于Apache官方一直没有提供AdminClient中对账户这一块的操作,因此这部分大多数时候都是用命令行去操作的,但是命令行毕竟不是很方便。为了解决这部分问题,笔者去读了Kafka Scala的源码,从中梳理出来这部分内容供给大家参考。重要:如果你的版本升级到2.7.0及其以上,请参考【Apache Kafka API AdminClient Scram账户的操作(增删改查)】。更多内容请点击【Apache Kafka API AdminClient 目录】。

Scala版本

为了操作Scala源码,必须有相应版本的包,怎么看你的Scala版本呢?这个就是在Kafka核心包的<artifactId>键值对里面,如下kafka_2.13后面对应的2.13就是Scala的版本,这个2.13版本同样也是Kafka官方推荐使用的版本,因此我们也就以这个版本为例子去操作账户的创建与删除。要提醒的是如果你使用的版本是Scala 2.12大概率会报错。

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka_2.13</artifactId> <!--此处对应的就是Scala版本-->
    <version>2.7.0</version>
</dependency>

获取JAAS认证文件

在开始之前首先得知道什么是Scram账户认证,如果不清楚建议参考【Kafka 如何给集群配置Scram账户认证】,这篇帖子里对Scram认证以及配置有很详细的介绍,这里就不多说废话了,我们已经有了一个kafka-broker-jaas.conf文件用来登陆Zookeeper。

Client{
	org.apache.zookeeper.server.auth.DigestLoginModule required
	username="kafka"
	password="kafka1234";
};

为什么要登陆Zookeeper呢?因为Kafka把认证机制做到了Zookeeper里,而要操作这些需要一个Zookeeper的登陆认证。在这里Zookeeper相当于一个分布式注册中心,随者Kafka的不断升级,Kafka官方也在不断地减少对Zookeeper的依赖。截止到2.7.0版本,当使用命令行创建账户的时候就会收到提示说未来版本可能会下线--zookeeper参数,转而使用参数--broker.server,但是目前还是兼容的。而且Kafka API的2.7.0版本,似乎也引入了操作Scram的API,但是之前的版本还是需要操作Zookeeper,因此我们还是需要这样进行账号的操作。希望2.7.0版本的Scram API会比较好用吧,等笔者弄明白了再分享出来。言归正传,我们可以通过下面几行代码先行把登陆Zookeeper的认证文件kafka-broker-jaas.conf加载到系统中来。

static {
    //获取文件路径,这里笔者使用的是项目路径,也可以用绝对路径,目的是访问到文件,什么方法自由选择
    String path = KafkaCreateUser.class.getClass().getResource("/").getPath();
    //拿到文件对象
    File f = new File(path+"kafka-broker-jaas.conf");
    //存储到系统参数对象中,以备后续使用
    System.setProperty("java.security.auth.login.config", f.getAbsolutePath());
}

使用Scala方法创建账户

获取了文件对象以后,就可以调用Scala中的方法了,我们主要调用的方法是AdminZkClient.changeConfigs(entityType: String, entityName: String, configs: Properties)方法,这个语法是Scala中的语法,有点类似Java,我们直接用就可以了,Sample如下。

public void createAccount() throws NoSuchAlgorithmException {
	//获取ZookeeperClient对象,这里的/kafka是笔者建了一个zk上的目录,如果直接用192.168.33.101:2181
    ZooKeeperClient zooKeeperClient=new ZooKeeperClient("192.168.33.101:2181/kafka",30000, 30000, Int.MaxValue(), Time.SYSTEM,"","");
    //通过ZookeeperClient对象和JDK自带的JaasUtils加载Sasl认证规则
    KafkaZkClient kafkaZkClient = new KafkaZkClient(zooKeeperClient, JaasUtils.isZkSaslEnabled(), Time.SYSTEM);
    //获取Kafka Scala AdminZkClient对象
    AdminZkClient adminZkClient = new AdminZkClient(kafkaZkClient);
    //构造Properties
    Properties properties=new Properties();
    //构造Scram认证机制ScramMechanism为SCRAM_SHA_512
    ScramMechanism scramMechanism=ScramMechanism.valueOf("SCRAM_SHA_512");
    //构造Scram证书credential,这里"password_1234"就是真实的密码
    ScramCredential credential = new ScramFormatter(scramMechanism).generateCredential("password_1234", scramMechanism.minIterations());
    //转化为认证串
    String credentialString=ScramCredentialUtils.credentialToString(credential);
    //添加到properties中备用
    properties.put(scramMechanism.mechanismName(),credentialString);
    //创建名为kaf_aaa的账户,并且把properties传递进去,那么kaf_aaa账户的密码就是上面设置的password_1234字符串
    adminZkClient.changeConfigs(ConfigType.User(),"kaf_aaa",properties);
}

使用Scala方法查询存在的账户

和创建一样也需要使用Scala中的方法,这次使用的是依然是AdminZkClient类中的方法,一个是fetchEntityConfig(rootEntityType: String, sanitizedEntityName: String)去查找指定的账户信息,其次是用fetchAllEntityConfigs(entityType: String)查找Kafka服务器中所有的账户信息,Sample如下。

public void findAccount() {
	 //获取ZookeeperClient对象
     ZooKeeperClient zooKeeperClient=new ZooKeeperClient("192.168.33.101:2181/kafka",30000, 30000, Int.MaxValue(), Time.SYSTEM,"","");
     //通过ZookeeperClient对象和JDK自带的JaasUtils加载Sasl认证规则
     KafkaZkClient kafkaZkClient = new KafkaZkClient(zooKeeperClient, JaasUtils.isZkSaslEnabled(), Time.SYSTEM);
     //获取Kafka Scala AdminZkClient对象
     AdminZkClient adminZkClient = new AdminZkClient(kafkaZkClient);
 	 //为了查看结果,构造一个Properties对象用来承接返回值
     Properties properties=new Properties();
     //指定账号查询
     properties=adminZkClient.fetchEntityConfig(ConfigType.User(),"kaf_aaa");
	 //构建一个接收参数
     Map<String, Properties> propertiesAll=new HashMap<>();
     //查询所有信息
     propertiesAll =adminZkClient.fetchAllEntityConfigs(ConfigType.User());
}

使用Scala方法删除账户

说完创建和查找,那就剩删除了。删除对象其实分为两步,第一步清空Kafka集群上保存的信息,第二部删除Zookeeper上对应的节点。清空信息用的还是changeConfigs()方法,删除节点用的则是Zookeeper包里的delete(final String path, int version)方法,Sample如下。

public void deleteAccount() throws InterruptedException, KeeperException {
	//获取ZookeeperClient对象
    ZooKeeperClient zooKeeperClient=new ZooKeeperClient("192.168.33.101:2181/kafka",30000, 30000, Int.MaxValue(), Time.SYSTEM,"","");
    //通过ZookeeperClient对象和JDK自带的JaasUtils加载Sasl认证规则
    KafkaZkClient kafkaZkClient = new KafkaZkClient(zooKeeperClient, JaasUtils.isZkSaslEnabled(), Time.SYSTEM);
    //获取Kafka Scala AdminZkClient对象
    AdminZkClient adminZkClient = new AdminZkClient(kafkaZkClient);
    adminZkClient.changeConfigs(ConfigType.User(),"kaf_aaa",new Properties()); 
    //获取Zookeeper对象
    ZooKeeper zooKeeper=kafkaZkClient.currentZooKeeper();
    //调用delete方法把对应的节点删除,版本设置为-1是不检测版本号
	//注意"/config/users/"这个路径是固定的,Zk里面就是这样存的,"kaf_aaa"是自己拼的账号名字
    zooKeeper.delete("/config/users/" +"kaf_aaa", -1);
}

总结

到此Kafka Scram账户相关的操作告一段落,如果想要删除账户同时清除账号下的权限,可以参考【Apache Kafka API AdminClient 账号对Topic权限赋予与移除】,自己做一个循环删除即可。

附:完整的Sample和注释

public class KafkaUserOperation {
    //加载zookeeper sasl机制授权登陆的配置文件
    static {
        String path = KafkaUserOperation.class.getClass().getResource("/").getPath();
        File f = new File(path+"zk-client-jaas.conf");
        System.setProperty("java.security.auth.login.config", f.getAbsolutePath());
    }
    
    public void createAccount() throws NoSuchAlgorithmException {
    	//获取ZookeeperClient对象
        ZooKeeperClient zooKeeperClient=new ZooKeeperClient("192.168.33.101:2181/kafka",30000, 30000, Int.MaxValue(), Time.SYSTEM,"","");
        //通过ZookeeperClient对象和JDK自带的JaasUtils加载Sasl认证规则
        KafkaZkClient kafkaZkClient = new KafkaZkClient(zooKeeperClient, JaasUtils.isZkSaslEnabled(), Time.SYSTEM);
        //获取Kafka Scala AdminZkClient对象
        AdminZkClient adminZkClient = new AdminZkClient(kafkaZkClient);
        //构造Properties
        Properties properties=new Properties();
        //构造Scram认证机制ScramMechanism为SCRAM_SHA_512
        ScramMechanism scramMechanism=ScramMechanism.valueOf("SCRAM_SHA_512");
        //构造Scram证书credential,这里"password_1234"就是真实的密码
        ScramCredential credential = new ScramFormatter(scramMechanism).generateCredential("password_1234", scramMechanism.minIterations());
        //转化为认证串
        String credentialString=ScramCredentialUtils.credentialToString(credential);
        //添加到properties中备用
        properties.put(scramMechanism.mechanismName(),credentialString);
        //创建名为kaf_aaa的账户,并且把properties传递进去,那么kaf_aaa账户的密码就是上面设置的password_1234字符串
        adminZkClient.changeConfigs(ConfigType.User(),"kaf_aaa",properties);
	}
    
    public void findAccount() {
    	//获取ZookeeperClient对象
        ZooKeeperClient zooKeeperClient=new ZooKeeperClient("192.168.33.101:2181/kafka",30000, 30000, Int.MaxValue(), Time.SYSTEM,"","");
        //通过ZookeeperClient对象和JDK自带的JaasUtils加载Sasl认证规则
        KafkaZkClient kafkaZkClient = new KafkaZkClient(zooKeeperClient, JaasUtils.isZkSaslEnabled(), Time.SYSTEM);
        //获取Kafka Scala AdminZkClient对象
        AdminZkClient adminZkClient = new AdminZkClient(kafkaZkClient);
    	//为了查看是否成功,构造一个Properties对象用来承接返回值
        Properties properties=new Properties();
        //指定账号查询
        properties=adminZkClient.fetchEntityConfig(ConfigType.User(),"kaf_aaa");
        Map<String, Properties> proAll=new HashMap<>();
        //查询所有信息
        proAll=adminZkClient.fetchAllEntityConfigs(ConfigType.User());
	}
	
    public void deleteAccount() throws InterruptedException, KeeperException {
    	//获取ZookeeperClient对象
        ZooKeeperClient zooKeeperClient=new ZooKeeperClient("192.168.33.101:2181/kafka",30000, 30000, Int.MaxValue(), Time.SYSTEM,"","");
        //通过ZookeeperClient对象和JDK自带的JaasUtils加载Sasl认证规则
        KafkaZkClient kafkaZkClient = new KafkaZkClient(zooKeeperClient, JaasUtils.isZkSaslEnabled(), Time.SYSTEM);
        //获取Kafka Scala AdminZkClient对象
        AdminZkClient adminZkClient = new AdminZkClient(kafkaZkClient);
        adminZkClient.changeConfigs(ConfigType.User(),"kaf_aaa",new Properties()); 
        //获取Zookeeper对象
        ZooKeeper zooKeeper=kafkaZkClient.currentZooKeeper();
        //调用delete方法把对应的节点删除,版本设置为-1是不检测版本号
        zooKeeper.delete("/config/users/"+"kaf_aaa", -1);
	}
}
Kafka查询以及删除消费者信息 kafka基础性操作 阅读详情

相关推荐

Kafka管理员API实战指南

通过以上示例,我们可以看到 Kafka Admin API 提供了一种强大的方式来管理和操作 Kafka 集群。无论是查看配置、列出主题还是创建新主题,Admin API 都提供了简洁的接口来实现这些功能。在实际的开发和运维工作中,合理利用这些 API 可以大大提高我们的工作效率。

m0_62153576的博客 668

Apache Kafka API AdminClient Scram账户的操作(增删改查)

很久没有更新Kafka API相关的文档了,因为笔者工作变动Kafka这部分内容在工作中接触的就相对于之前少了一些。但架不住kafka官方还是一如既往的勤奋,官方操作Scram账户的创建与删除这部分已经更新了好久了,这次也算是填坑吧,主要就是针对alterUserScramCredentials方法做一个功能说明和demo。给网上少之又少的Kafka API中文使用教程做个增补,本次基于Kafka API 2.8.0,同时适用于2.7.0版本。

Smallc0de的博客 2112

Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制

kafka系列文章 第一章 linux单机安装kafka 第二章 kafka——集群安裝部署(自带zookeeper) 第三章 Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制 Kafka SASL/SCRAM+ACL实现动态创建用户及权限控制** 使用SASL / SCRAM进行身份验证 请先在不配置任何身份验证的情况下启动Kafka 1. 创建SCRAM Credentials Kafka中的SCRAM实现使用Zookeeper作为凭证(credential)存储。 可以使用kafka

qq_34594142的博客 1144

Kafka系列——详解创建Kafka消费者及相关配置

详解kafka消费者以及消费者组;介绍分区如何分配给消费者,以及分配策略,介绍各种超时参数;介绍超时的行为,心跳发送的细节

zekser的博客 8689

【Qt】QML-01:使用QtCreator10创建QML工程,并讲解第一个程序:Hello World

QML第一讲:创建QML工程、详解QML第一个程序Hello World

郭老二 7795

ADNI数据集下载(详细)

刚刚接触到这个数据集的时候比较头疼,用了好长的时间才把下载过程和预处理过程弄明白。需要发送电子邮件给官方平台,收到回信后才能够下载到数据集。 1、ADNI账号注册 第一步:搜索百度打开ADNI 第二步,点击ADTA&amp;amp;SAMPLES 第三步:一直将鼠标往下拉 点击ADNI,进入里面填写信息。需要填写的信息还是挺多的,耐心填写,再等到邮件回复就可以了 2、ADNI数据集下载 登录申请的邮...

蜗牛遥遥 3万+

Apache Kafka API AdminClient 账号对Topic权限赋予与移除

Apache Kafka API AdminClient 账号权限赋予与移除

Smallc0de的博客 2184

Ubuntu22.04实战:基于VLLM高效部署Qwen3系列模型并构建Dify智能体

本文详细介绍了在Ubuntu22.04系统上使用VLLM高效部署Qwen3系列模型并集成Dify平台的实战指南。从环境配置、Conda管理到VLLM优化部署,再到Dify智能体构建,提供了全面的技术方案和性能调优建议,帮助开发者快速实现AI模型的高效部署与应用。

weixin_28323057的博客 161

kafka消费者组

阅读目录一、 误区澄清与概念明确 一直以来都想写一点关于kafka consumer的东西,特别是关于新版consumer的中文资料很少。最近Kafka社区邮件组已经在讨论是否应该正式使用新版本consumer替换老版本,笔者也觉得时机成熟了,于是写下这篇文章讨论并总结一下新版本consumer的些许设计理念,希望能把consumer这点事说清楚,从而对广大使用者有所帮助。 在开始之前,我想花一点时间先来明确一些概念和术语,这会极大地方便我们下面的讨论。另外请原谅这文章有点长,毕竟要讨论的东西.

E_Possible的博客 580

Coze智能体开发:搭建一个解析 PDF 文件的工作流

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 2813

AI Agent在医疗诊断中的智能应用研究

本文探讨了AIAgent在医疗诊断中的智能应用,分析了其技术原理、实际案例及发展挑战。AIAgent通过机器学习算法处理医疗数据,提升诊断准确性和效率,市场规模预计2025年达200亿美元。核心技术包括数据预处理、深度学习模型和隐私保护方法。应用案例涵盖肺癌筛查、阿尔茨海默病预测等,但面临数据偏差、伦理责任等挑战。未来趋势包括多模态学习、个性化医疗和量子计算融合。随着技术优化和伦理完善,AIAgent将成为医疗体系的重要组成部分。

郑伟强dev的专栏 96

Apache Kafka API AdminClient 目录

前言 最近工作上需要使用Java开发一个操作Kafka的Portal,因为使用命令行去操作比较反人类,尤其是需要进行大量的增删操作的时候。所以研究了一下Apache提供的官方JAVA API应用到了Portal上。在实施的过程中,发现这部分网上可用资料也比较稀少,即便找到几篇也十分的不详细,或者版本比较老旧,或者还在用Zookeeper提供的那一套API,更有甚者干脆互相抄,所以就决定写一个系列希望能帮助到大家了解AdminClient的使用。 笔者使用的Porm依赖如下: <dependency&g

Smallc0de的博客 2700

Host是如何与EC通信的

EC中有三个寄存器,分别为状态寄存器EC_SC、命令寄存器EC_SC和数据寄存器EC_DATA。而状态寄存器和命令寄存器同属于一个寄存器,这几个寄存器遵循着ACPI EC规范。host可以根据ACPI协议规范来与EC进行通信。 以下是个寄存器的详细介绍。 EC状态寄存器(EC_SC(R)),该寄存器是一个只读寄存器,它反映了此时EC接口的状态。下图为该寄存器表。 EC状态寄存器表中各位的具体含义: OBF(Output Buffer is Full),该状态位置1...

qq_30135687的博客 3695

zookeeper功能应用及原理二

本篇zookeeper内容要点 zoo.cfg里面配置信息的讲解 zookeeper的一些常见概念模型 zookeeper java客户端的使用 zookeeper的zoo.cfg配置文件分析 tickTime=2000 zookeeper中最小的时间单位基数(ms) intiLimit=10 follower节点启动后与leader节点完成数据同步的时间(eg:10xtickTim...

@Bean 230

海康威视 2024届 数字逻辑设计 实习笔试分析

记录一下 5月11日晚,做的海康威视的一场笔试。分享给需要的IC人。 岗位:数字逻辑设计工程师(浙江 杭州) 转载需要本人同意! 我的见解不一定都是准确的,欢迎评论区交流指正~~

记录所学,分享知识,结识挚友 1万+

matlab 一维相位解缠

一维相位解缠算法的matlab代码实现。

点云侠的博客 372

Kafka:KafkaAdminClient应用

Kafka:KafkaAdminClient应用

程序员无羡的博客 1522

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java创建kafka的topic

kafka 0.10及其以下版本创建topic 这个版本创建topic必须使用zookeeper,一般可以使用如下命令手动创建topic: bin/kafka-topics.sh --create --zookeeper 127.0.0.1:2181 --replication-factor 3 --partitions 3 --topic test 那如何使用代码自动创建topic呢,可以使用AdminZkClient,示例如下: KafkaZkClient zkClient = KafkaZkClie

旋风的技术 7273

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Kafka——AdminClient API详解

在创建Topic时我们需要设定Partition的数量,但如果觉得初始设置的Partition数量太少了,那么就可以使用createPartitions方法来调整Topic的Partition数量,但是需要注意在Kafka中Partition只能增加不能减少。自0.ll.0.0版本起,Kafka社区推出了AdminClient和KafkaAdminClient,意在统一所有的集群管理API。一个Topic会有自身的描述信息,例如:partition的数量,副本集的数量,是否为internal等等。

吴声子夜歌的博客 2778

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

有了这个网络安全面试题,面试就像开了挂!(附PDF)

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!【完整版领取方式在文末!!​​​​内容实在太多,不一一截图了。

lvaolan的博客 2507

Kafka 基础教程 — AdminClient API详解

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。

smart_an的专栏 1221

Kafka 源码解析 - Kafka 0.11客户端集群管理工具AdminClient

是一个强大且灵活的集群管理工具,它的源码设计和实现体现了对集群管理操作的高度抽象和封装,使得用户能够以简洁、一致的方式与Kafka集群进行交互。,这是一个强大的API,用于管理和监视Kafka集群的各种元数据和状态。Apache Kafka 0.11 引入了全新的客户端集群管理工具。总之,Kafka 0.11 中的。

qq_33240556的博客 514

java kafka的AdminClient创建、查看、删除topic、修改Config信息、增加partition

记录个人学习

qq_37432174的博客 1904

Go 使用kafka读写

go 语言 使用kafka 读写

Rao的博客 1482

Spring Boot 基于 SCRAM 认证集成 Kafka 的详解

在本篇文章中,我们将探讨如何在Spring Boot应用中集成Kafka并使用SCRAM认证机制进行安全连接;并实现动态创建账号、ACL 权限、Topic,以及生产者和消费者等操作。

zlt2000的博客 839

20 KafkaAdminClient

初识KafkaAdminClient 一般情况下,我们习惯使用 kafka-topics.sh 脚本来管理主题。但有些时候我们希望将主题管理类的功能集成到公司内部系统中,集管理、监控、运维、警告等一体,那么就需要以程序调用API的方式去实现。这节主要记录 KafkaAdminClient 的基本使用方式,以及采用这种方式创建主题时的合法性验证。 基本使用 在代码清单16-1中使用了 TopCom...

, 740
上一篇: Eclipse把Git项目转换成Springboot项目
下一篇: Eclipse SpringBoot Maven 打包所有依赖到Jar包
Smallc0de
博客等级 码龄15年 148粉丝 147原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值