在使用kafka的时候,需要自己手动设置offset,于是在subscribe后调用seek方法,程序直接抛出异常:No current assignment for partition。通过搜索引擎搜了下,很多说是由于同一个 groupID 在同一时刻多次消费同一个 topic,引发 offset 记录问题。但在这里很明显不是。
seek正确的调用姿势应该是在调用subscribe的时候,添加一个回调函数:
consumer.subscribe(Arrays.asList(topic), new ConsumerRebalanceListener() {
@Override
public void onPartitionsRevoked(Collection<TopicPartition> collection) {
}
@Override
public void onPartitionsAssigned(Collection<TopicPartition> collection) {
consumer.seek(collection, 100);// consumer.seek(new TopicPartition("topic", 0), 100);
}
});