使用java创建kafka的consumer和producer

直接上步骤:
1、先看一下项目结构:
使用java创建kafka的consumer和producer_第1张图片
2、对于pom.xml:



    4.0.0

    com.tanxin.ai.kg
    kafka-demo
    1.0-SNAPSHOT
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    8
                    8
                
            
        
    
    
        
            org.apache.kafka
            kafka-clients
            2.0.0
        
        
            org.slf4j
            slf4j-nop
            1.7.6
        

    



3、对于ConsumerDemo:

package com.greedy.ai.kafka;
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.Arrays;
import java.util.Properties;
/*需要注意的是:
* 需要先启动zookeeper、kafka
* 再分别运行ConsumerDemo、ProducerDemo*/
public class ConsumerDemo {
    public static void main(String[] args) {
        Properties pros=new Properties();
        pros.put("bootstrap.servers","localhost:9092");
        pros.put("group.id","test");//用来表示consumer进程所在组的一个字符串,如果设置同样的group id,表示这些进程都是属于同一个consumer group
        pros.put("enable.auto.commit","true");//如果设置为真,consumer所接收到的消息的offset将会自动同步到zookeeper
        pros.put("auto.commit.interval.ms","1000");//consumer向zookeeper提交offset的频率,单位是秒
        pros.put("key.deserializer","org.apache.kafka.common.serialization.StringDeserializer");
        pros.put("value.deserializer","org.apache.kafka.common.serialization.StringDeserializer");
        KafkaConsumer consumer= new KafkaConsumer(pros);
        consumer.subscribe(Arrays.asList("my_test"));
        while(true){
            //ConsumerRecords records = consumer.poll(100);
            ConsumerRecords records = consumer.poll(Duration.ofSeconds(1));
            for (ConsumerRecord record:records){
                System.out.printf("offset= %d ,key= %s ,value= %s%n" ,record.offset(),record.key(),record.value());

            }
        }
    }
}

4、ProcducerDemo:

package com.greedy.ai.kafka;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;
/*需要注意的是:
* 需要先启动zookeeper、kafka
* 再分别运行ConsumerDemo、ProducerDemo*/
public class ProcducerDemo {
    public static void main(String[] args) {
        Properties prop = new Properties();
        prop.put("bootstrap.servers","localhost:9092");
        prop.put("acks","all");//生产者需要server接收到数据之后,要发出一个确认接收的信号
        /*0 producer不需要等待任何确认的消息
        * 1 意味着至少要等待leader已经成功将数据写入本地local,并不意味着所有的follower已经写入
        * all 这意味着leader需要等待所有备份都成功的写入到日志中*/
        prop.put("retries",0);//重试次数
        //比如有两条消息1和2。1先发,但是1发送失败了。重试次数为1。2会接着就发送数据,然后1再发一次。改变了我们消息发送的顺序
        prop.put("buffer.memory",33554432);
        prop.put("batch.size",16384);//producer试图批处理消息记录。目的是减少请求次数。改善客户端和服务端之间的性能。
        /*这个配置是能控制批处理消息的字节数。
        * 如果这个值小,就降低了吞吐量,如果设置为0,那么就是禁用批处理。
        * 如果这个值设置的很大,就会浪费很多的内存空间。*/
        prop.put("linger.ms",1);
        prop.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
        prop.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
        Producer producer = new KafkaProducer(prop);
        for (int i = 0; i < 100; i++){
            producer.send(new ProducerRecord("my_test",Integer.toString(i+1),Integer.toString(i)));
        }
        producer.close();
    }
}

5、问题参考:SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.解决方案

你可能感兴趣的:(知识图谱)