初识kafka 之 本地IDEA发送消息(区分同步、异步,是否带回调函数)
基础环境
kafka集群
bigdata01、bigdata02、bigdata03、bigdata04、bigdata05
pom配置
<!-- kafka 客户端依赖--> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>3.0.1</version> </dependency>
创建包
com.lzh.kafka
实现代码
package com.lzh.kafka; import org.apache.kafka.clients.producer.*; import org.apache.kafka.common.serialization.StringSerializer; import java.util.Properties; import java.util.concurrent.ExecutionException; // 本地idea通过kafka发送消息 public class CustomProducer { public static void main(String[] args) throws ExecutionException, InterruptedException { // 1.配置 Properties properties = new Properties(); // 连接集群 // 给kafka对象添加配置信息 bootstrap.servers // 生产者连接集群所需的 broker 地址清单 properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"bigdata01:9092,bigdata02:9092"); // 指定发送消息的key和value的序列化类型。一定要写全类名。 // key,value序列化 key.serializer,value.serializer // key序列化 // 全类名与下等价: properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer"); properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // value序列化 properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName()); // 2.创建 kafka 生产者对象 KafkaProducer<String, String> kafkaProducer = new KafkaProducer<String, String>(properties); // 3.发送数据 // 调用 send 方法,发送消息 for (int i = 1; i < 5; i++) { // 异步发送,无回调函数 if (i == 1) { kafkaProducer.send(new ProducerRecord<String, String>("Mytopic","异步发送,无回调函数\n开始报数:" )); // 无回调函数 } // 异步发送,有回调函数 kafkaProducer.send(new ProducerRecord<String, String>("Mytopic", "" + i), new Callback() { // 有回调函数 public void onCompletion(RecordMetadata recordMetadata, Exception e) { if (e == null) { System.out.println("主题"+ recordMetadata.topic() +"已异步发送消息到"+ recordMetadata.partition() +"分区"); } } }); } // 同步发送,无回调函数 get() kafkaProducer.send(new ProducerRecord<String, String>("Mytopic","同步发送,无回调函数" )).get(); // 无回调函数 // 同步发送,有回调函数 get() kafkaProducer.send(new ProducerRecord<String, String>("Mytopic", "同步发送,有回调函数"), new Callback() { public void onCompletion(RecordMetadata recordMetadata, Exception e) { if (e == null) { System.out.println("主题"+ recordMetadata.topic() +"已同步发送消息到"+ recordMetadata.partition() +"分区"); } } }).get(); // 4.关闭资源 kafkaProducer.close(); } }
测试
启动kafka服务
cd /apps/kafka_2.12-3.0.1/bin ./kafka-server-start.sh -daemon ../config/server.properties
启动消费者(消息接收程序)
kafka-console-consumer.sh --bootstrap-server bigdata01:9092,bigdata02:9092 --topic Mytopic
本地IDEA运行程序
虚拟机查看结果:
世风之狡诈多端,到底忠厚人颠扑不破;
末俗以繁华相尚,终觉冷淡处趣味弥长。
posted on 2022-04-14 11:57 Simple-Sir 阅读(650) 评论(0) 编辑 收藏 举报