Kafka Topic Java API操作

 private static AdminClient getAdminClient() {
   Properties admainProp = new Properties();
   admainProp.put("bootstrap.servers", "ip:9092");
   return AdminClient.create(admainProp);
 }
1. 创建主题
  @deprecated
 def create_topic(topicName: String): Unit = {
  try {
   val zkUtils = ZkUtils.apply("192.168.137.131:2181", 30000, 30000, JaasUtils.isZkSecurityEnabled)
   // 虽然过时了但是个人觉得是同步方法
   AdminUtils.createTopic(zkUtils, topicName, 10, 1, new Properties, RackAwareMode.Enforced)
   zkUtils.close()
   println(s"$topicName 创建成功~~~")
  } catch {
   case e: Exception =>
    println(s"$topicName 创建失败~~~")
    e.printStackTrace()
  }
 }
2. 删除主题
 @deprecated
 def delete_topic(topicName: String): Unit = {
  try {
   val zkUtils = ZkUtils.apply("192.168.137.131:2181", 30000, 30000, JaasUtils.isZkSecurityEnabled)
   // 同步方法
   AdminUtils.deleteTopic(zkUtils, topicName)
   zkUtils.close()
   println(s"$topicName 删除成功~~~")
  } catch {
   case e: Exception =>
    println(s"$topicName 删除失败~~~~")
    e.printStackTrace()
  }
 }
3. 获取top信息
 public static  Map<String, TopicDescription> SelectTopicInfo(String topicName) throws Exception {
   DescribeTopicsResult result = getAdminClient().describeTopics(Arrays.asList(topicName));
   KafkaFuture<Map<String, TopicDescription>> all = result.all();
   Map<String, TopicDescription> topicInfo =  all.get();
   // topic描述信息
   for(Map.Entry<String, TopicDescription> entry : topicInfo.entrySet()){
    String mapKey = entry.getKey();
    TopicDescription mapValue = entry.getValue();
    System.out.println(mapKey+":"+mapValue);
    }
   // 分区信息
   List<TopicPartitionInfo> mTopicPartitionInfo = all.get().get(topicName).partitions();
   System.out.println(mTopicPartitionInfo);
   return all.get();
  }
 4. 获取topic消息总数
  public static void getTopicTotalMessageCount(String topicName) throws Exception {
  // 借助Consumer来实现
  Properties props = new Properties();
  props.setProperty("bootstrap.servers", "ip:9092");
  props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
  props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.ByteArrayDeserializer");
  props.setProperty("group.id", "testToal");
  props.setProperty("enable.auto.commit", "true");
  props.setProperty("auto.commit.interval.ms", "1000");
  KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
  consumer.subscribe(Arrays.asList(topicStr));
  Map<String, TopicDescription> topicInfo = GetTopicInfo(topicStr);
  TopicDescription topicDescription = topicInfo.get(topicStr);
  List<TopicPartitionInfo> mTopicPartitionInfo = topicDescription.partitions();

  List<TopicPartition> partitions = new ArrayList<>();
  for (int i = 0; i < mTopicPartitionInfo.size(); ++i) {
  partitions.add(new TopicPartition(topicStr, i));
   }
  Map<TopicPartition, Long> offsets = consumer.endOffsets(partitions);
  Map<TopicPartition, Long> earlyOffsets = consumer.beginningOffsets(partitions);
  int totalCount = 0;
  for (TopicPartition tp : offsets.keySet()) {
  totalCount += (offsets.get(tp) - earlyOffsets.get(tp));
   }
  System.out.println("Total message count: " + totalCount);
  consumer.close();
  }
 5. 判断主题是否存在
 public static boolean topicExists(String topicName) {
  // 注意下面几个参数的值适当大一些,否则可能会出现连接异常
  // sessiontimeout in milliseconds
  // connectionTimeoutMs connection timeout in milliseconds
  // maxInFlightRequests
   KafkaZkClient kafkaClient = KafkaZkClient.apply("192.168.137.131:2181",false,20000,20000,40000,Time.SYSTEM,"","");
   return kafkaClient.topicExists(topicName);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值