栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

kafka基础消费者API

kafka基础消费者API

kafka基础消费者API kafka消费者的消费方式

kafka有两种消费方式:pull(拉)模式和push(推)模式.

  • pull模式的不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka的消费者在消费数据时会传入一个时长参数timeout(没有默认值,需要手动设置Duration.ofSeconds(1)),如果当前没有数据可供消费,consumer会等待一段时间之后再返回,这段时长即为timeout。
  • push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。
    consumer采用pull(拉)模式从broker中读取数据。

1.添加依赖

 
        
            org.apache.kafka
            kafka-clients
            2.4.1
        
    

2.编写代码
在消费者代码中必须配置消费者组,命令行启动消费者不填写消费者组会被自动填写随机的消费者组。ConsumerRecords实现了Iterable接口,则可以用iterator()遍历,也可以用增强for循环遍历。

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.ArrayList;
import java.util.Properties;

public class CustomConsumer {
    public static void main(String[] args) {
        //创建消费者的配置对象
        Properties properties = new Properties();
        //2.给消费者配置对象添加参数
        properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop102:9092");
        //配置序列化(必须进行的操作)
        properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
        properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
        //配置消费者组(这个可以随便写,但是同一个组名就必须分在同一个组中,组id是为了实现断点续传)
        properties.put(ConsumerConfig.GROUP_ID_CONFIG,"Group1");
        //创建消费者对象
        KafkaConsumer consumer = new KafkaConsumer<>(properties);
        //注册一个主题,传一个collection
        ArrayList strings = new ArrayList<>();
        strings.add("producer");
        consumer.subscribe(strings);
        //拉取数据打印
        while(true){
            //手动设置Duration.ofSeconds(1),等1s没有就关了
            ConsumerRecords consumerRecords = consumer.poll(Duration.ofSeconds(1));
            for (ConsumerRecord consumerRecord : consumerRecords) {
                System.out.println(consumerRecord);
            }
        }

    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/304078.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号