kafka入门案例

 

生产者发送消息,多个消费者只能有一个消费者接收到消息

生产者发送消息,多个消费者都可以接收到消息

 

一、生产者发送消息

(1)导入kafka客户端依赖

     <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
        </dependency>

 

(2)编写消息生产者类ProducerQuicstart

   ①.设置kafka的配置信息

   ②.创建生产者对象

   ③.发送消息

   ④.关闭消息通道

package com.heima.kafka.sample;


import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

public class ProducerQuickStart {
    public static void main(String[] args) {
        //1、kafka连接配置信息
        Properties prop = new Properties();
        //kafka连接地址
        prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.200.130:9092");
        //key和value的序列化
        prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
        prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");

        //2、创建kafka生产者对象
        KafkaProducer<String, String> producer = new KafkaProducer<String, String>(prop);

        //3、发送消息
        /**
         * 第一个参数,topic
         * 第二个参数,消息的key
         * 第三个参数,消息的value
         */
        ProducerRecord<String, String> producerRecord = new ProducerRecord<String, String>("topic-first", "key-001", "hello,kafka");

        producer.send(producerRecord);
        //4、关闭消息通道 必须关闭否则消息发送不成功
        producer.close();
    }



}

 

(3)消费者接收消息

  ①:设置kafka的配置信息

  ②:创建消费者对象

  ③:订阅主题

  ④:获取消息

生产者发送消息,多个消费者订阅同一个主题,只能有一个消费者收到消息(一对一):同一个消费者组下只能有一个消费者收到消息。

package com.heima.kafka.sample;

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;

import java.time.Duration;
import java.util.Collections;
import java.util.Properties;

public class ConsumerQuickStart {
    public static void main(String[] args) {
        //1、设置kafka的配置信息
        Properties prop = new Properties();
        //连接地址
        prop.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.200.130:9092");
        //key和value的反序列化器
        prop.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.ShortDeserializer");
        prop.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.ShortDeserializer")
        //设置消费者组
        prop.put(ConsumerConfig.GROUP_ID_CONFIG, "group1");
        //2、创建消费者对象
        KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(prop);
        //3、订阅主题
        consumer.subscribe(Collections.singletonList("topic-first"));
        //4、拉取消息
        //一直处于监听状态
        while (true){
            ConsumerRecords<String, String> consumerRecords = consumer.poll(Duration.ofMillis(1000));
            for (ConsumerRecord<String, String> consumerRecord : consumerRecords) {
                System.out.println(consumerRecord.key());
                System.out.println(consumerRecord.value());
            }
        }
        
    }
}

 

生产者发送消息,多个消费者订阅同一个主题,所有消费者都能收到消息(一对多):设置多个消费者组

 

 

    

posted @ 2023-07-06 14:40  佛系粥米  阅读(89)  评论(0编辑  收藏  举报