java: kafka简单实用示例

1. 官网下载kafka,其支持在windows环境运行。

2. zookeeper不用单独下载,其已自带。

3. kafka下载完成后,windows平台解压缩即可使用,当然需要安装 java jdk。启动命令如下:

1、启动zookeeper
bin\windows\zookeeper-server-start.bat config\zookeeper.properties

2、启动kafka
bin\windows\kafka-server-start.bat config\server.properties

3、创建主题topic,topic = demo
bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092

4、启动生产者 producer
bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic demo

 5、启动消费者 customer
bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic demo --from-beginning

4. maven中加入

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

5. 消费者

public class Consumer1 {
    public void abc(){
        String sdz = StringDeserializer.class.getName();
        Properties prop = new Properties();
        prop.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
        prop.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, sdz);
        prop.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, sdz);
        prop.put(ConsumerConfig.GROUP_ID_CONFIG,"con-1");                // 指定消费者组id,在同一时刻消费组只有一个线程可以去消费一个分区的数据,不同的消费组可以消费同一个分区的消息
        prop.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");     // 自动提交偏移量
        prop.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000"); //自动提交时间

        ArrayList<String> topics = new ArrayList<>();
        topics.add("test");

        try (KafkaConsumer<String, String> consumer = new KafkaConsumer<>(prop)){
            consumer.subscribe(topics);
            while(true){
                ConsumerRecords<String, String> poll = consumer.poll(Duration.ofSeconds(20));
                for(ConsumerRecord<String, String> consumerRecord :poll){
                    System.out.println(consumerRecord.timestamp() + ":" + consumerRecord.topic() + ":" + consumerRecord.value());
                }
            }
        }catch (Exception ignored){
        }
    }
}

6. 生产者

public class Producer1 {
    KafkaProducer<String, String> producer = NewProducer();

    public KafkaProducer<String, String> NewProducer(){
        // 如果acks=0:表示需要Leader节点回复收到消息,这样生产者才会发送下一条数据
        // 如果acks=1:只要Partition Leader接收到消息而且写入本地磁盘了,就认为成功了,不管他其他的Follower有没有同步过去这条消息了。
        // 如果acks=all:表示需要所有Leader+副本节点回复收到消息(acks=-1),这样生产者才会发送下一条数 据
        // retries 如果当前请求失败,则生产者可以自动重新连接,但是要是设置retries=0参数,则意味着请示失败不会重新连接,这样可以避免重复发送的可能
        // key.serializer value.serializer 数据在网络中传输需要进行序列化

        String ssz = StringSerializer.class.getName();
        Properties prop = new Properties();
        prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092");
        prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, ssz);
        prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, ssz);
        prop.put(ProducerConfig.ACKS_CONFIG, "all");
        prop.put(ProducerConfig.RETRIES_CONFIG, 0);
        prop.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);
        prop.put(ProducerConfig.LINGER_MS_CONFIG, 1);
        prop.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 33554432);
        return new KafkaProducer<>(prop);
    }

    public void close(){
        producer.close();
    }

    public void send(String topic, String key, String val) {
        producer.send(new ProducerRecord<>(topic, key, val));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值