想要获取Kafka的全部主题,首先要连接Kafka,连接Kafka有多种方式,目前最常用的就是采用AdminClient的客户端对象连接Kafka集群。
在通过AdminClient连接到Kafka集群后,得到了AdminClient对象。
再根据AdminClient对象获取listTopics,得到主题列表,通过get到具体的name列表,打印出来的就是Kafka集群中的全部主题名。
配置文件:
4.0.0 com.lmz springBootKafkaTest 1.0-SNAPSHOT spring-boot-starter-parent org.springframework.boot 2.2.5.RELEASE org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.projectlombok lombok org.apache.kafka kafka-clients org.apache.kafka kafka_2.11
注意springboot和Kafka的版本
代码展示:
import java.util.*;
import java.util.concurrent.ExecutionException;
import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.ListTopicsResult;
import org.apache.kafka.clients.admin.TopicListing;
import org.apache.kafka.common.KafkaFuture;
public class KafkaTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
toAllTopic(adminClient());
}
public static void toAllTopic(AdminClient adminClient) {
//根据adminClient获取主题列表
ListTopicsResult listTopicsResult = adminClient.listTopics();
KafkaFuture> names1 = listTopicsResult.names();
Set names = null;
try {
//listTopicsResult.names()是KafkaFuture>类型的,调用get方法后得到set类型的值
names = listTopicsResult.names().get();
//打印得到的topic列表
names.forEach(c -> System.out.println("name:" + c));
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
public static AdminClient adminClient(){
//配置文件操作类,我们除了编写.properties后缀的文件外,可以采用Properties类配置,省去了.properties文件
Properties properties = new Properties();
//put采用key,value的形式("bootstrap.servers"为Kafka配置集群地址的参数;"集群地址"为具体的集群地址,可以为自己配置的虚拟机中的Kafka集群地址)
properties.put("bootstrap.servers","集群地址");
return AdminClient.create(properties);
}
}
注:AdminClient 类是在 org.apache.kafka.clients.admin.AdminClient 包中的



