我正在使用“手动偏移控制”,并且正在尝试使用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开始读取。我想知道如何做到这一点而无需手动终止并重新运行程序。