kafka读书笔记-消费者-poll调用及返回

消费者订阅主题或者分区之后就会对主题和分区中的消息进行消费,Kafka中的消费是基于拉模式的,即客户端主动请求服务器拉取消息。与之对应的另一种常见消费模式是推模式,即服务端主动将消息推送给客户端。拉模式减少了服务端的压力,对于Kafka处理大数据量的时候能起到高效的作用。

简单的消费者消费代码如下:

while (true){
	//拉取消息
    ConsumerRecords<String,String> records=consumer.poll(Duration.ofMillis(1000));
    //消费消息
    dealWith(records);
 }

即不断轮询,重复调用poll方法,poll方法返回的是所订阅主题或分区的一组消息,若订阅的主题或分区中无消息,则返回空的消息集合。poll中的参数代表消费者缓冲区无数据时的阻塞时间。有下面两种传参方式,long类型的参数代表毫秒(ms),已过时,推荐使用Duration类型参数,Duration为java8新增的时间类型。

@Deprecated
ConsumerRecords<K, V> poll(long timeout);
ConsumerRecords<K, V> poll(Duration timeout);    

返回ConsumerRecords是ConsumerRecord的可迭代序列,封装了主题(Topic)和list的map,ConsumerRecords的代码如下:

	//主题
    private final String topic;
    //分区
    private final int partition;
    //消费位移
    private final long offset;
    //时间戳
    private final long timestamp;
    //时间戳类型 CreateTime表示消息常见时间戳,LogEndTime表示消息追加到日志时间戳
    private final TimestampType timestampType;
    //key序列化后的大小
    private final int serializedKeySize;
    //value序列化后的大小
    private final int serializedValueSize;
    //消息的头部内容
    private final Headers headers;
    //消息的键
    private final K key;
    //消息的值
    private final V value;
    //消费者leaderEpoch 用于避免单纯依靠HW造成的数据丢失或不一致问题
    private final Optional<Integer> leaderEpoch;
	//CRC32的校验值
    private volatile Long checksum;

你可能感兴趣的:(读书,笔记)