Kafka核心API -- 客户端操作

五类API

 Kafka客户端API类型

  • AdminClient API:允许管理和检测Topic、broker以及其它Kafka对象(类似于命令行的create topic)
  • Producer API:发送消息到1个或多个Topic
  • Consumer API:订阅一个或多个Topic,并处理产生的消息
  • Streams API:高效地将输入流转换到输出流
  • Connector API:从一些源系统或应用程序中拉取数据到kafka

初始化工程

创建一个SpringBoot项目

引入依赖

<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>2.4.0</version>
        </dependency>

AdminClient客户端API的使用

 客户端建立

public class AdminSample {

    public static void main(String[] args) {
        AdminClient adminClient = AdminSample.adminClient();
        System.out.println("adminClient: " + adminClient);
    }

    /**
     * 设置AdminClient
     */
    public static AdminClient adminClient(){
        Properties properties = new Properties();
        properties.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.75.136:9092");
        AdminClient adminClient = AdminClient.create(properties);
        return adminClient;
    }
}

连接测试成功

 

创建Topic

public final static String TOPIC_NAME = "topic_test";

    /**
     * 创建Topic实例
     */
    public static void createTopic(){
        AdminClient adminClient = adminClient();
        // 副本因子
        Short rs = 1;
        NewTopic newTopic = new NewTopic(TOPIC_NAME, 1, rs);
        CreateTopicsResult topics = adminClient.createTopics(Arrays.asList(newTopic));
        System.out.println("CreateTopicsResult: " + topics);
    }

    public static void main(String[] args) {
//        AdminClient adminClient = AdminSample.adminClient();
//        System.out.println("adminClient: " + adminClient);
        createTopic();
    }

创建成功

 

查看Topic列表及Internal

 查看是否成功创建topic

    /**
     * 获取Topic列表
     */
    public static void topicList() throws Exception {
        AdminClient adminClient = adminClient();
        ListTopicsResult listTopicsResult = adminClient.listTopics();
        Set<String> names = listTopicsResult.names().get();
        //打印
        names.stream().forEach(System.out::println);
    }

    public static void topicList() throws Exception {
        AdminClient adminClient = adminClient();
        //是否查看Internal选项
        ListTopicsOptions options = new ListTopicsOptions();
        options.listInternal(true);
        //ListTopicsResult listTopicsResult = adminClient.listTopics();
        ListTopicsResult listTopicsResult = adminClient.listTopics(options);
        Set<String> names = listTopicsResult.names().get();
        Collection<TopicListing> topicListings = listTopicsResult.listings().get();
        //打印
        names.stream().forEach(System.out::println);
        //打印topicListing
        topicListings.stream().forEach((topicList)->{
            System.out.println(topicList);
        });
    }

 删除Topic

    /**
     * 删除Topic
     */
    public static void delTopics() throws Exception {
        AdminClient adminClient = adminClient();
        DeleteTopicsResult deleteTopicsResult = adminClient.deleteTopics(Arrays.asList(TOPIC_NAME));
        deleteTopicsResult.all().get();
    }

成功删除

 

Topic描述信息查看

    /**
     * 描述Topic
     */
    public static void describeTopics() throws Exception {
        AdminClient adminClient = adminClient();
        DescribeTopicsResult describeTopicsResult = adminClient.describeTopics(Arrays.asList(TOPIC_NAME));
        Map<String, TopicDescription> stringTopicDescriptionMap = describeTopicsResult.all().get();
        Set<Map.Entry<String, TopicDescription>> entries = stringTopicDescriptionMap.entrySet();
        entries.stream().forEach((entry)->{
            System.out.println("name: " + entry.getKey() + ", desc: " + entry.getValue());
        });
    }

输出以下内容

 

Topic配置信息查看

    /**
     * 查看配置
     */
    public static void describeConfig() throws Exception {
        AdminClient adminClient = adminClient();
        //TODO 预留,用来做集群
        ConfigResource configResource = new ConfigResource(ConfigResource.Type.TOPIC, TOPIC_NAME);
        DescribeConfigsResult describeConfigsResult = adminClient.describeConfigs(Arrays.asList(configResource));
        Map<ConfigResource, Config> configResourceConfigMap = describeConfigsResult.all().get();
        configResourceConfigMap.entrySet().stream().forEach((entry)->{
            System.out.println("configResource: " + entry.getKey() + ", Config: " + entry.getValue());
        });
    }

输出信息

des:configResource: ConfigResource(type=TOPIC, name='topic_test'), 
                           Config: Config(entries=[ConfigEntry(name=compression.type, 
                                                               value=producer, 
                                                               source=DEFAULT_CONFIG, 
                                                               isSensitive=false, 
                                                               isReadOnly=false, 
                                                               synonyms=[]), 
                                   ConfigEntry(name=leader.replication.throttled.replicas, 
                                               value=, 
                                               source=DEFAULT_CONFIG, 
                                               isSensitive=false, 
                                               isReadOnly=false, 
                                               synonyms=[]), 
                                    。。。。。。

  

Topic修改描述信息

    /**
     * 修改配置
     */
    public static void alterConfig() throws Exception {
        AdminClient adminClient = adminClient();
        Map<ConfigResource, Config> configMaps = new HashMap<>();

        ConfigResource configResource = new ConfigResource(ConfigResource.Type.TOPIC, TOPIC_NAME);
        Config config = new Config(Arrays.asList(new ConfigEntry("preallocate", "true")));
        configMaps.put(configResource, config);
        AlterConfigsResult alterConfigsResult = adminClient.alterConfigs(configMaps);
        alterConfigsResult.all().get();
    }

 

Patition增加

    /**
     * 增加Partition数量
     */
    public static void incrPartitions(int partitions) throws Exception {
        AdminClient adminClient = adminClient();
        Map<String, NewPartitions> partitionsMap = new HashMap<>();
        NewPartitions newPartitions = NewPartitions.increaseTo(partitions);
        partitionsMap.put(TOPIC_NAME, newPartitions);
        CreatePartitionsResult createPartitionsResult = adminClient.createPartitions(partitionsMap);
        createPartitionsResult.all().get();
    }

 

posted on 2023-07-23 10:35  夏雪冬蝉  阅读(121)  评论(0编辑  收藏  举报