消息中间件-Kafka3-kafkaJavaClient小例

消息中间件-Kafka3-kafkaJavaClient小例

  • Kafak Java Client
java 复制代码
   private static final String KAFKA_TOPIC = "kafak-test";
   private static String bootstrapServers = "localhost:9092";

   private static AdminClient client = null;


   static {
       Properties config = new Properties();
       config.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
       client = AdminClient.create(config);
   }

在pom.xml 添加kafka client依赖

  • 客户端创建主题
java 复制代码
@Test
public  void createTopic() {
    try {
        NewTopic topic = new NewTopic(KAFKA_TOPIC, 1, (short) 1);
        // 提交创建topic请求
        client.createTopics(Collections.singleton(topic)).all().get();
        System.out.println("Topic created successfully");
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if (client != null) client.close();
    }
}
  • 客户端获取主题
java 复制代码
@Test
public  void fetchTopics() {
     try {
         ListTopicsResult result = client.listTopics();
         KafkaFuture<Set<String>> set = result.names();
         System.out.println(set.get());
     }
     catch (Exception e) {
         e.printStackTrace();
     }
     finally {
         if (client != null) client.close();
     }
 }
  • 客户端生产者发送消息
java 复制代码
@Test
public  void produceMsg() {
    Properties props = new Properties();
    props.put("bootstrap.servers", "localhost:9092"); // Kafka集群地址
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

    Producer<String, String> producer = null;
    try {

        // 创建生产者实例
        producer = new KafkaProducer<>(props);

        // 发送消息
        producer.send(new ProducerRecord<>(KAFKA_TOPIC, "MSG-1005","Hello, 1005!"), (metadata, exception) ->{
            if (exception == null) {
                System.out.println("消息发送成功,主题:" + metadata.topic() + ", 分区:" + metadata.partition());
            }
            else {
                exception.printStackTrace();
            }
        });
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        // 关闭生成者
        if (producer != null) producer.close();
    }
}
  • 客户端消费者消费消息
java 复制代码
@Test
public  void consumeMsg() {
   // 配置消费者
   Properties properties = new Properties();
   properties.put("bootstrap.servers", "localhost:9092");
   properties.put("group.id", "kafka-consumer-group-001");
   properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
   properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

   KafkaConsumer<String, String> consumer = null;
   try {
       // 创建消费者实例
       consumer = new KafkaConsumer<>(properties);

       // 订阅主题
       consumer.subscribe(Arrays.asList(KAFKA_TOPIC));

       // 轮询消费消息
       while(true) {
           ConsumerRecords<String, String> records = consumer.poll(100); // 每100ms执行一次
           for (ConsumerRecord record : records) {
               System.out.printf("Offset: %d, Key: %s, Value: %s\n", record.offset(), record.key(), record.value());
           }
       }
   }
   catch (Exception e) {
       e.printStackTrace();
   }
   finally {
       if (consumer != null) consumer.close();
   }
}

后续将使用这些测试小例来调试Kafka源码,当然也可以执行Kafka自带的可执行脚本与kafka交互,进行源码分析,只是通过java代码的方式更加直观。

相关推荐
失败又激情的man15 小时前
Scrapy进阶封装(第四阶段:中间件设置,动态UA,ip代理池)
爬虫·scrapy·中间件
亲爱的非洲野猪17 小时前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
摘星编程1 天前
深入理解责任链模式:从HTTP中间件到异常处理的实战应用
http·设计模式·中间件·责任链模式·实战应用
~山有木兮3 天前
LiteHub中间件之限流实现
网络·http·中间件
fo安方3 天前
运维的利器–监控–zabbix–第三步:配置zabbix–中间件–Tomcat–步骤+验证
运维·中间件·zabbix
Code季风3 天前
Gin 中间件详解与实践
学习·中间件·golang·go·gin
一只程序汪4 天前
【如何实现分布式压测中间件】
分布式·中间件
William一直在路上4 天前
主流分布式中间件及其选型
分布式·中间件
listhi52014 天前
深入浅出Node.js中间件机制
中间件·node.js