关于springboot创建kafkaTopic

工具类提供,方法名见名知意。使用kafka admin

java 复制代码
import org.apache.kafka.clients.admin.*;
import org.apache.kafka.common.KafkaFuture;

import java.util.*;
import java.util.concurrent.ExecutionException;



import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.ListTopicsOptions;
import org.apache.kafka.clients.admin.TopicDescription;
import org.apache.kafka.common.KafkaFuture;
import org.apache.kafka.common.TopicPartitionInfo;

import java.util.Properties;
import java.util.Set;
import java.util.concurrent.ExecutionException;
/**
 * @author: zhoumo
 * @data: 2024/6/24 16:37
 * @descriptions:
 */
public class KafkaTopicInfo {

    final static String ip="127.0.0.1:9090";


    public static void main(String[] args) {
        getListDetail();
    }


    
    public static void createTopic(String topicName) throws ExecutionException, InterruptedException {
        // Kafka 配置
        Properties props = new Properties();
        // Kafka 服务器地址和端口
        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, ip);

        // 创建 AdminClient 实例
        try (AdminClient adminClient = AdminClient.create(props)) {
            // 创建一个新的主题
            // 指定分区数量
            // 指定复制因子
            int numPartitions = 2;
            short replicationFactor = 1;

            NewTopic newTopic = new NewTopic(topicName, numPartitions, replicationFactor);

            // 创建主题
            adminClient.createTopics(Collections.singletonList(newTopic)).all().get();
            System.out.println("Topic created successfully: " + topicName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void deleteTopic(String topicName) {
        // Kafka 配置
        Properties props = new Properties();
        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, ip);

        try (AdminClient adminClient = AdminClient.create(props)) {
            // 要删除的主题名称
         //   String topicName = "myTopic";

            // 删除主题
            DeleteTopicsResult deleteResult = adminClient.deleteTopics(Collections.singletonList(topicName));
            deleteResult.all().get();

            System.out.println("Topic deleted successfully: " + topicName);

        } catch (ExecutionException | InterruptedException e) {
            e.printStackTrace();
        }
    }
    public static void getList() {
        // Kafka 配置
        Properties props = new Properties();
        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, ip);

        try (AdminClient adminClient = AdminClient.create(props)) {
            // 列出所有主题
            ListTopicsOptions options = new ListTopicsOptions();
            // 是否包括内部主题,默认为 false
            options.listInternal(true);
            ListTopicsResult topicsResult = adminClient.listTopics(options);
            Set<String> topics = topicsResult.names().get();

            System.out.println("Existing topics:");
            for (String topic : topics) {
                System.out.println(topic);
            }

        } catch (ExecutionException | InterruptedException e) {
            e.printStackTrace();
        }
    }



    public static void getListDetail() {
        // Kafka 配置
        Properties props = new Properties();
        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, ip);

        try (AdminClient adminClient = AdminClient.create(props)) {
            // 列出所有主题
            ListTopicsOptions options = new ListTopicsOptions();
            // 是否包括内部主题,默认为 false
            options.listInternal(true);
            KafkaFuture<Set<String>> topics = adminClient.listTopics(options).names();

            System.out.println("Existing topics:");
            for (String topic : topics.get()) {
                System.out.println(topic);
                // 获取主题的详细信息(包括分区情况)
                /*
                回退jdk1.8 版本
                KafkaFuture<TopicDescription> topicDescription = adminClient.describeTopics(Set.of(topic)).values().get(topic);
                printTopicDetails(topicDescription.get());
                */
                Set<String> topicSet = new HashSet<>();
                topicSet.add(topic);
                KafkaFuture<TopicDescription> topicDescriptionFuture = adminClient.describeTopics(topicSet).values().get(topic);
                TopicDescription topicDescription = topicDescriptionFuture.get();
                printTopicDetails(topicDescription);
            }

        } catch (ExecutionException | InterruptedException e) {
            e.printStackTrace();
        }
    }
    private static void printTopicDetails(TopicDescription topicDescription) {
        System.out.println("Topic: " + topicDescription.name());
        System.out.println("Partitions:");

        for (TopicPartitionInfo partition : topicDescription.partitions()) {
            System.out.printf("  Partition %d, Leader: %d, Replicas: %s, Isrs: %s%n",
                    partition.partition(),
                    partition.leader().id(),
                    partition.replicas(),
                    partition.isr());
        }
        System.out.println();
    }
}
相关推荐
小哇6666 分钟前
SpringBoot整合Minio
java·spring boot·spring
知其然亦知其所以然10 分钟前
深入Kafka:如何保证数据一致性与可靠性?
后端·面试·kafka
WHYBIGDATA35 分钟前
Scala中高级的函数编程
开发语言·后端·scala
吃青椒的小新40 分钟前
独一无二的设计模式——单例模式(Java实现)
java·后端·单例模式·设计模式
知识分享小能手41 分钟前
从新手到高手:Scala函数式编程完全指南,Scala 访问修饰符(6)
大数据·开发语言·后端·python·数据分析·scala·函数式编程
蝎子莱莱爱打怪1 小时前
maven卸载旧版本3.1.0 并安装新版本3.8.8
后端
虫小宝2 小时前
Spring Boot中集成MySQL数据库的步骤和技巧
数据库·spring boot·mysql
Mero技术博客2 小时前
第三节:如何理解Spring的两个特性IOC和AOP(自学Spring boot 3.x第一天)
java·spring boot·spring
java一只鱼2 小时前
基于Spring Boot的先进时尚室内管理系统
spring boot·mysql·elementui·vue·layui
肖哥弹架构2 小时前
使用MarshallingView实现自动化的XML响应生成
后端