初识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编辑  收藏  举报

导航