【发布时间】:2022-02-11 17:06:00
【问题描述】:
我无法理解这种 API 设计!
在下面的代码中,我们订阅了具有动态分配分区的主题列表。这完全没问题。
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(properties);
consumer.subscribe(Arrays.asList("some-topic"));
while(true){
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
StreamSupport.stream(records.spliterator(), false)
.forEach(r -> {
System.out.println(r.key() + "::" + r.value());
});
}
混乱来了。
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(properties);
//seek for specific partition
TopicPartition partition = new TopicPartition("some-topic", 0);
consumer.assign(Arrays.asList(partition));
consumer.seek(partition, 0);
while(true){
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
StreamSupport.stream(records.spliterator(), false)
.forEach(r -> {
System.out.println(r.key() + "::" + r.value());
});
}
问题:
- 我们已经使用
assign方法分配了分区列表。为什么seek方法还要查找分区信息?不知何故,我觉得它是多余的。 -
seek方法具有带有主题和偏移量的分区。为什么需要先assign才能调用seek?
【问题讨论】:
标签: java apache-kafka kafka-consumer-api