KafkaConsumer不会读取主题中的所有记录

时间:2018-01-26 13:51:35

标签: apache-kafka kafka-consumer-api kafka-producer-api

我想测试一个kafka示例,即生产者:

object ProducerApp extends App {

  val topic = "topicTest"
  val  props = new Properties()
  props.put("bootstrap.servers", "localhost:9092")
  props.put(ConsumerConfig.GROUP_ID_CONFIG, "consumer")
  props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer")
  props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer")
  val producer = new KafkaProducer[String, String](props)
  for(i <- 0 to 125000)
  {    
    val record = new ProducerRecord(topic, "key "+i,new PMessage())    
    producer.send(record)       
  }
}

消费者:

object ConsumerApp extends App {
  val topic = "topicTest"  
  val properties = new Properties
  properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
  properties.put(ConsumerConfig.GROUP_ID_CONFIG, "consumer")  
  properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false")  
  properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest")
  properties.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
  properties.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer")
  val consumer = new KafkaConsumer[String, String](properties)  
  consumer.subscribe(scala.List(topic).asJava)    
  while (true) {
    consumer.seekToBeginning(consumer.assignment())
    val records:ConsumerRecords[String,String] = consumer.poll(20000)
    println("records size "+records.count())    
  }  
}

使用1分区创建主题“topicTest”。

预期结果是:

...
records size 125000
records size 125000
records size 125000
records size 125000
...

但获得的结果是:

...
records size 778
records size 778
records size 778
records size 778
...

消费者不会阅读主题中的所有记录。我想了解原因。但是,如果记录数量较小(例如20),则工作正常,消费者会读取所有记录。主题的大小是否有限? 是否对Kafka的配置进行了修改以允许处理大量记录?

1 个答案:

答案 0 :(得分:1)

max.poll.records个消费者参数,其中Kafka 1.0.0默认为500,因此您无法获得125000所需的结果。 出于这个原因,它可以使用20,但是你得到的结果很奇怪。