kafka_demo
参考:
概念:https://zhuanlan.zhihu.com/p/74063251
代码运用:https://zhuanlan.zhihu.com/p/114209326
参考 kafka 在windows 平台的搭建和简单实用_一代键客的博客-CSDN博客,先验证本地是否能使用kafka成功生产消费消息,如果因为版本问题遇到报错“bootstrap-server is not a recognized option”,参考 Kafka踩坑记----bootstrap-server is not a recognized option如何解决_南望南山的博客-CSDN博客 、Kafka参数zookeeper和bootstrap-server的区别 - Clotho_Lee - 博客园 (cnblogs.com)解决。
启动zookeeper

启动kafka

创建topic,生产消息

能成功消费到消息

再用代码实现生产消费消息
Producer.java
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;
import java.util.Properties;
public class Producer implements Runnable {
    private KafkaProducer<String, String> producer;
    private String topic;
    public Producer(String topic) {
        Properties properties = new Properties();
        properties.put("bootstrap.servers", "localhost:9092");
        properties.put("acks", "all");
        properties.put("retries", 0);
        properties.put("batch.size", 16384);
        properties.put("key.serializer", StringSerializer.class.getName());
        properties.put("value.serializer", StringSerializer.class.getName());
        this.producer = new KafkaProducer<String, String>(properties);
        this.topic = topic;
    }
    @Override
    public void run() {
        int count = 0;
        while (count < 10) {
            String msg = "NO. " + count + " msg";
            System.out.println("produce NO." + count + " msg...");
            producer.send(new ProducerRecord<>(topic, "msg", msg));
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            count++;
        }
        producer.close();
    }
    public static void main(String[] args) {
        new Thread(new Producer("kafka")).start();
    }
}
Consumer.java
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringDeserializer;
import java.util.Arrays;
import java.util.Properties;
public class Consumer implements Runnable {
    private KafkaConsumer<String, String> consumer;
    private String groundId;
    private String topic;
    private ConsumerRecords<String, String> msgList;
    public Consumer(String topic, String groundId) {
        this.topic = topic;
        this.groundId = groundId;
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("group.id", groundId);
        props.put("enable.auto.commit", "true");
        props.put("auto.commit.interval.ms", "1000");
        props.put("session.timeout.ms", "30000");
        props.put("auto.offset.reset", "earliest");
        props.put("key.deserializer", StringDeserializer.class.getName());
        props.put("value.deserializer", StringDeserializer.class.getName());
        this.consumer = new KafkaConsumer<String, String>(props);
        this.consumer.subscribe(Arrays.asList(topic));
    }
    @Override
    public void run() {
        while (true) {
            msgList = consumer.poll(1000);
            System.out.println("poll msg,msgList size:" + msgList.count());
            if (msgList != null && msgList.count() > 0) {
                int idx = 0;
                for (ConsumerRecord<String, String> record : msgList) {
                    System.out.println("consume NO." + idx + " msg:key " + record.key() + " val " + record.value() +
                            " offset" + record.offset());
                    idx++;
                }
            } else {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
    public static void main(String[] args) {
        new Thread(new Consumer("kafka", "groundA")).start();
    }
}
先启动生产者,再启动消费者,运行结果:


 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号