一、消费者的工作方式
一般有两种模式,分别为push和pull,消费者采用pull模式从broker中读取数据。
push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由broker决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而pull模式则可以根据consumer的消费能力以适当的速率消费消息。
pull(拉)模式不足之处是,如果kafka没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka的消费者在消费数据时会传入一个时长参数timeout,如果当前没有数据可供消费,consumer会等待一段时间之后再返回,这段时长即为timeout。
二、消费者基础代码
package com.hpu.kafka.consumer;
import org.apache.kafka.clients.consumer.*;
import java.time.Duration;
import java.util.ArrayList;
import java.util.Properties;
/**
* @author LS
* @date 2021/12/29 14:33
* @description
*/
public class kafkaconsumer01 {
public static void main(String[] args) {
Properties pro = new Properties();
pro.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "hadoop102:9092");
pro.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
pro.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
pro.put(ConsumerConfig.GROUP_ID_CONFIG,"ls");
KafkaConsumer<Object, Object> consumer = new KafkaConsumer<>(pro);
ArrayLi