Kafka使用JavaAPI-AdminClient操作topic
-
首先需要初始化AdminClient对象(具体编写位置与修饰权限看自己代码结构);
private static final String borker = "localhost:port"; public static AdminClient client; //初始化adminClient对象 if(client != null) { client.close(); client = null; } try { Properties admainProp = new Properties(); admainProp.put("bootstrap.servers", borker); //安全机制,如kafka服务无此配置可忽略 admainProp.put("sasl.jaas.config", "org.apache.kafka.common.security.scram.ScramLoginModule required username='bdc' password='bdcinfra';"); admainProp.put("security.protocol", "SASL_PLAINTEXT"); admainProp.put("sasl.mechanism", "PLAIN"); client = AdminClient.create(admainProp); System.out.println("初始化成功"); }catch (Exception e) { System.out.println("初始化失败:" + e.toString()); }
-
创建topic
/** * @Author: Hu.Yue * @Title: createTopics * @Description: 创建topic * @param topicName * @return void * @throws */ public void createTopics(String topicName) { try { //创建topic选项 CreateTopicsOptions createTopicsOptions = new CreateTopicsOptions(); createTopicsOptions.timeoutMs(20000); //创建需要新建的topic //1.topic名,2.分区数:1, 3.备份数:1 NewTopic newTopic = new NewTopic(topicName, 1,(short)1); //提交请求 CreateTopicsResult cr = client.createTopics(Arrays.asList(newTopic), createTopicsOptions); //等待创建,成功不会有任何报错,如果创建失败和超时会报错。 cr.all().get(); }catch (Exception e) { // TODO: handle exception System.out.println("创建失败!"); } }
-
查询指定的topic
/** * @Author: Hu.Yue * @Title: getTopicInfo * @Description: 查询指定的topic信息 * @param @param topicName * @return void * @throws */ public void getTopicInfo(String topicName) { DescribeTopicsResult topicsResult = client.describeTopics(Arrays.asList(topicName.split(","))); //返回一个future,该future只有在所有主题描述都成功时才会成功 KafkaFuture<Map<String, TopicDescription>> allInfo = topicsResult.all(); try { Map<String, TopicDescription> all = allInfo.get(); //TopicDescription: 集群中单个主题的详细描述。 TopicDescription t1 = all.get(topicName); System.out.println(t1.toString() + ":" + t1.isInternal()); }catch (Exception e) { System.out.println("没有此topic"); } }
-
删除指定的topic
/** * @Author: Hu.Yue * @Title: deleteTopic * @Description: 删除指定topic * @param @param topicName * @return void * @throws */ public void deleteTopic(String topicName){ DeleteTopicsResult topicsResult= client.deleteTopics(Arrays.asList(topicName)); System.out.println("topic删除成功!"); }