SpringBoot如何获取Kafka的Topic列表
作者:AnthonyJing 发布时间:2023-11-26 16:01:52
标签:SpringBoot,Kafka,Topic
写在前面
众所周知,kafka是现代流行的消息队列,它使用经典的消息订阅发布模式实现消息的流转,大部分代码结合kafka使用都是使用它的生产者和消费者来实现消息的传递,那么对于kafka的主题的管理怎么使用代码实现呢,这是今天要讲的主题
命令行模式
kafka要结合zookeeper使用,因为它把元数据信息交给了zookeeper管理,其实使用命令行命令很容易就能对topic进行管理,主要使用的命令是kafka-topics.sh
创建主题
kafka-topics.sh --zookeeper localhost:2181 --create --topic my-topic --replication-factor 3 --partitions 3
查看主题列表
kafka-topics.sh --zookeeper localhost:2181 --list
查看主题状态
kafka-topics.sh --describe --zookeeper 127.0.0.1:2181 --topic TestTopic
代码模式
那么话说回来如何使用代码实现topic的管理呢,那么现在就来看一下代码的实现方式,此处使用springboot2框架实现。
首先引进依赖kafka的相关
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
创建一个测试类进行测试
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("bootstrap.servers", "10.0.59.11:9093");
properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
AdminClient adminClient = AdminClient.create(properties);
ListTopicsResult result = adminClient.listTopics();
KafkaFuture<Set<String>> names = result.names();
try {
names.get().forEach((k)->{
System.out.println(k);
});
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
adminClient.close();
}
这里面最主要的就是AdminClient这个类,AdminClient实现了Admin接口,Admin里面定义了许多和kafka配置相关的东西
让我们依次来看一下
public abstract class AdminClient implements Admin {
public AdminClient() {
}
public static AdminClient create(Properties props) {
return (AdminClient)Admin.create(props);
}
public static AdminClient create(Map<String, Object> conf) {
return (AdminClient)Admin.create(conf);
}
}
而Admin接口里有以下方法
static Admin create(Properties props) {
return KafkaAdminClient.createInternal(new AdminClientConfig(props, true), (TimeoutProcessorFactory)null);
}
static Admin create(Map<String, Object> conf) {
return KafkaAdminClient.createInternal(new AdminClientConfig(conf, true), (TimeoutProcessorFactory)null);
}
default void close() {
this.close(9223372036854775807L, TimeUnit.MILLISECONDS);
}
/** @deprecated */
@Deprecated
default void close(long duration, TimeUnit unit) {
this.close(Duration.ofMillis(unit.toMillis(duration)));
}
void close(Duration var1);
default CreateTopicsResult createTopics(Collection<NewTopic> newTopics) {
return this.createTopics(newTopics, new CreateTopicsOptions());
}
CreateTopicsResult createTopics(Collection<NewTopic> var1, CreateTopicsOptions var2);
default DeleteTopicsResult deleteTopics(Collection<String> topics) {
return this.deleteTopics(topics, new DeleteTopicsOptions());
}
DeleteTopicsResult deleteTopics(Collection<String> var1, DeleteTopicsOptions var2);
default ListTopicsResult listTopics() {
return this.listTopics(new ListTopicsOptions());
}
ListTopicsResult listTopics(ListTopicsOptions var1);
default DescribeTopicsResult describeTopics(Collection<String> topicNames) {
return this.describeTopics(topicNames, new DescribeTopicsOptions());
}
DescribeTopicsResult describeTopics(Collection<String> var1, DescribeTopicsOptions var2);
default DescribeClusterResult describeCluster() {
return this.describeCluster(new DescribeClusterOptions());
}
DescribeClusterResult describeCluster(DescribeClusterOptions var1);
default DescribeAclsResult describeAcls(AclBindingFilter filter) {
return this.describeAcls(filter, new DescribeAclsOptions());
}
DescribeAclsResult describeAcls(AclBindingFilter var1, DescribeAclsOptions var2);
通过名称我们可以看出,里面有创建Topic,有删除Topic,有列出所有Topic,有描述Topic
我们通过这些方法可以管理Kafka的Topic
最后我们来看一下实现效果
控制台打印里面有3个Topic
去服务器命令行验证一下
也是3个说明代码没问题
来源:https://blog.csdn.net/qq_25464557/article/details/108290280


猜你喜欢
- 前言众所周知,微信聊天中我们输入一些关键词会有表情雨下落,比如输入「生日快乐」「么么哒」会有相应的蛋糕、亲吻的表情雨下落,今天就来完成这个表
- 一、在学习枚举之前,首先来听听枚举的优点。1、枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值。2、枚举使代码更易于维护,有助于确保
- 基础概念百度百科是这么描述归并排序的: 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。设有数列{6,
- 密封类和密封接口是 Kotlin 中允许创建受限类层次结构的两个特性。这两个构造用于定义一组有限的可能子类型,并防止在声明的层次结构之外定义
- 麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的.今天在做
- 一、什么是抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂模式是所有形态的工厂模式中最为抽象和最具
- 本人一般也很少上传照片之类的女生喜欢玩的东西,但是偶尔还是要传一传的,为什么?因为现在与各种以前的朋友同学都很少联系,但是只要一发有个人照片
- 本文实例为大家分享了Android自定义View实现公交成轨迹图的具体代码,供大家参考,具体内容如下总体分析下:水平方向recyclewvi
- 首先为大家介绍Andorid5.0原生下拉刷新简单实现。先上效果图;相对于上一个19.1.0版本中的横条效果好看了很多。使用起来也很简单。
- 该方法使用的jdk1.6以后自带的分页工具类实现public static void main(String[] args) {  
- 本文实例为大家分享了Android刮刮卡效果,供大家参考,具体内容如下android实现底层一张图片,上层一个遮罩层,触摸滑动按手指滑动路径
- 在C#中 “\”是特殊字符,要表示它的话需要使用“\\”。由于这种写法不方便,C#语言提供了@对其简化。只要在字符串前加上@即可直接使用“\
- 系统的基本架构 我们假设一个系统System包含Service客户服务中心、Shop网上购物中心和Office网上办公中心三个独立的网站。
- 总之是用jdbc 的游标移动package com.sp.person.sql.util; import java.sql.Connecti
- 1、首先创建一个按钮<Buttonandroid:id="@+id/click"android:layout_wi
- 零碎记事距离上次发博客已经有一年半了,转眼间我也是从做图像研究到了做游戏开发,说起来看看前面的博文,本来就有前兆的东西呢(笑)......因
- 一、引言以前在饿了么上面订餐的时候,曾经看到过这么一个特效,就是将商品加入订单时,会有一个小球呈抛物线状落入购物车中,然后购物车中的数量会改
- 这篇文章主要介绍了SpringMVC Mybatis配置多个数据源并切换代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- 当我们需要制作动态炫酷科技感很强的UI时,美术一般会给我们提供一些序列图,这时候我们只需在程序里实现序列动画。一.动画机unity自带的帧动
- 前言有时候我们在项目中,会用到一些本地 jar 包文件,比如隔壁公司自己打包的;此时无法从maven远程仓库拉取;那么我们可以考虑把 jar