我正在使用Kafka 0.9使用者API来使用一些已发布的主题消息。我正在使用以下代码连续轮询来自代理的指定主题的消息。我正在使用consumer.seek(topic, offset)
开始从偏移量11700开始读取消息,并且我按预期收到以该偏移量开始的所有消息。但是,当我使用kafka-consumer-offset-checker.sh查看偏移量时,我总是使用以下命令看到相同的最后提交偏移量(12700)和滞后量(1000)。
bin/kafka-consumer-offset-checker.sh --zookeeper localhost:2181 --topic cardiac-dicom-message --group test7
输出:
Group Topic Pid Offset logSize Lag Owner
test7 cardiac-dicom-message 0 12700 13700 1000 none
基于Spark文档,如果我们在循环中进行轮询,对consumer.poll()
的调用将提交从前一个consumer.poll()
调用返回的最大偏移量(13699),所以我很困惑。 / p>
以下是示例代码:
Properties props = new Properties();
props.put("bootstrap.servers", "kafka-server:9092");
props.put("group.id", "test7");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "10");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
//consume specific partition
TopicPartition topicPartion = new TopicPartition("cardiac-dicom-message", 0);
consumer.assign(Arrays.asList(topicPartion));
consumer.seek(topicPartion, 11700);
while (true) {
ConsumerRecords<String, String> records = consumer.poll(1000);
System.out.println("number of messages = " + records.count());
int count=0;
for (ConsumerRecord<String, String> record : records) {
count++;
System.out.printf("partition = %d, offset = %d, key = %s, value = %s\n", record.partition(), record.offset(), record.key(), record.value());
}
}
任何人都可以对此有所了解吗?