第一次调用后,KafkaConsumer poll()每次返回分区大小为0

时间:2018-07-06 21:40:32

标签: apache-kafka kafka-consumer-api

按照以下文档的说明: https://kafka.apache.org/0100/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html

我正在使用“手动偏移控制”,并且正在尝试使用commitSync()方法进行简单的测试,以将偏移设置为静态值。然后,我想再次调用poll()方法以使用该偏移量。这应该通过while循环处理:

 try {
     while(true) {
         System.out.println("outer loop");
         ConsumerRecords<String, String> records = consumer.poll(Long.MAX_VALUE);
         System.out.println("partition size: " + records.partitions().size());

         for (TopicPartition partition : records.partitions()) {
             List<ConsumerRecord<String, String>> partitionRecords = records.records(partition);
             for (ConsumerRecord<String, String> record : partitionRecords) {
                 System.out.println(record.offset() + ": " + record.value());

                 long offset = record.offset();
                 if (SOME CONDITION) {
                 consumer.commitSync(Collections.singletonMap(partition, new OffsetAndMetadata(offset+1)));
                 }
             }
         }
     }
 } finally {
   consumer.close();
 }

但是,在第一次调用poll()之后,似乎总是得到大小为0的分区。

在输出中,我永远看到以下循环:

outer loop
partition size: 0

但是,如果我终止程序并重新运行它,我可以看到commitSync()可以正常工作,并且它从偏移6开始读取。我想知道如何做到这一点而无需手动终止并重新运行程序。

0 个答案:

没有答案