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()); } } } }
生产者发送消息,多个消费者订阅同一个主题,所有消费者都能收到消息(一对多):设置多个消费者组