1基础
首先了解一下KafkaApi类型,本次全是AdminClient API
1.1Kafka客户端API类型
◆AdminClient API:允许管理和检测Topic、broker以及其它Kafka对象
◆Producer API:发布消息到1个或多个topic
◆Consumer API:订阅- -个或多个topic,并处理产生的消息
◆Streams API:高效地将输入流转换到输出流
◆Connector API:从一些源系统或应用程序中拉取数据到kafka
1.2AdminClient API
API | 作用 |
AdminClient | AdminClient客户端对象 |
NewTopic | 创建Topic |
CreateTopicsResult | 创建Topic的返回结果 |
ListTopicsResult | 查询Topic列表 |
ListTopicsOptions | 查询Topic列表及选项 |
DescribeTopicsResult | 查询Topics |
DescribeConfigsResult | 查询Topics配置项 |
2代码整合
2.1pom环境
由于是整合SpringBoot一起使用,pom加入SpringBoot的基础引用以及,目前只展示AdminClient API,所以只Kafka client的引用
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.mystudys</groupId>
<artifactId>KafkaStudy</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.5.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
</dependencies>
</project>
2.2代码
因为敲码过程中,并不是所有内容都记得。本段内容更像一个字段/目录效果。没什么特别含义。供以后使用时候作为参考。
package com.item.kafka.admin;
import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.admin.*;
import org.apache.kafka.common.KafkaFuture;
import org.apache.kafka.common.config.ConfigResource;
import org.apache.kafka.common.internals.Topic;
import org.apache.kafka.server.quota.ClientQuotaEntity;
import java.util.*;
import java.util.concurrent.ExecutionException;
@Slf4j
public class AdminSample {
final static String TOPIC_NAME = "demo_topic1";
public static void main(String[] args) throws Exception {
// //配置连接kafka
// AdminClient adminClient = AdminSample.adminClient();
// //打印信息
// System.out.println("adminClient:{}" + adminClient);
//创建
//创建Topic
// topicCreate();
//查看Topic
// topicList();
// //删除
// topicDelete();
// 描述Topic
// describeTopics();
// 查询Config
// describeConfig();
// 修改Config
// alterConfig();
// 增加partition数量
// incrPartitions(2);
}
//1配置连接kafka
public static AdminClient adminClient() {
Properties properties = new Properties();
// properties.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "111.230.182.125:9092");//腾讯云所在路径
properties.setProperty(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");//本机
AdminClient adminClient = AdminClient.create(properties);
return adminClient;
}
//2创建Topic
public static void topicCreate() {
//配置连接kafka
AdminClient adminClient = adminClient();
//多少个副本集
Short rs = 1;
//名称 分区 副本集
NewTopic newTopic = new NewTopic(TOPIC_NAME, 1, rs);
CreateTopicsResult topics = adminClient.createTopics(Arrays.asList(newTopic));
log.info("createTopic2233:{}", topics);
}
//3查看Topic
public static void topicList() throws Exception {
// log.info("2233");
//
// AdminClient adminClient=adminClient();
// ListTopicsResult listTopicsResult = adminClient.listTopics();
// Set<String> strings = listTopicsResult.names().get();
// strings.forEach(c-> System.out.println("2233"+c));
//region 普通打印
try {
AdminClient adminClient = adminClient();
ListTopicsResult listTopicsResult = adminClient.listTopics();
Set<String> names = listTopicsResult.names().get();
names.forEach(c -> System.out.println("2233" + c));
Collection<TopicListing> topicListings = listTopicsResult.listings().get();
//打印topicListings
topicListings.forEach((topicList) -> {
System.out.println(topicList);
log.info("2233topicList:{}", topicList);
});
} catch (Exception e) {
log.error("2233error:{}", e.toString());
e.printStackTrace();
}
//endregion
}
//4删除Topic
public static void topicDelete() {
//配置连接kafka
AdminClient adminClient = adminClient();
DeleteTopicsResult deleteTopicsResult = adminClient.deleteTopics(Arrays.asList(TOPIC_NAME));
log.info("delete topic deleteTopicsResult:{}", deleteTopicsResult);
}
//5 describeTopics
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(c -> {
System.out.println("describeTopics:name:" + c.getKey() + "\n value:" + c.getValue());
});
}
//6 查看配置信息
public static void describeConfig() throws Exception {
AdminClient adminClient = adminClient();
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(c -> {
System.out.println("describeConfig:configResource : " + c.getKey() + " \n Config : " + c.getValue());
});
}
//7 修改配置信息
public static void alterConfig() throws Exception {
AdminClient adminClient = adminClient();
//region 2.3.x版本之前
// Map<ConfigResource, Config> configMaps = new HashMap<>();
// ConfigResource configResource = new ConfigResource(ConfigResource.Type.TOPIC, TOPIC_NAME);
// //将配置文件中的 preallocate 修改为true
// Config config = new Config(Arrays.asList(new ConfigEntry("preallocate", "true")));
// configMaps.put(configResource,config);
// AlterConfigsResult alterConfigsResult = adminClient.alterConfigs(configMaps);
//endregion
//region 2.3.x之后,对于单体不太好、推荐集群使用
Map<ConfigResource, Collection<AlterConfigOp>> configMaps = new HashMap<>();
ConfigResource configResource = new ConfigResource(ConfigResource.Type.TOPIC, TOPIC_NAME);
AlterConfigOp alterConfigOp = new AlterConfigOp(new ConfigEntry("preallocate", "false"), AlterConfigOp.OpType.SET);
configMaps.put(configResource, Arrays.asList(alterConfigOp));
AlterConfigsResult alterConfigsResult = adminClient.incrementalAlterConfigs(configMaps);
//endregion
}
//8 增加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);
}
}