我有3名消费者在同一组,我打电话寻求()来设置一个用户在一个分区的偏移量。这会否设置偏移为所有消费者的组或只是在那个特定的分区偏移。
我希望能够重置组与日志中的所有记录的开始。但我只能打电话寻求一个消费者。
求()将回滚到仅该分区指定的偏移量。然而,旧的高层次消费的API,也没有办法做到这一点。但在调用方法
public void seek(TopicPartition partition,
long offset);
它会倒带在分区提供TopicPartition的话题来抵消。
如果你想重置集团消费,那么你就必须做出寻求电话TopicPartition与每个分区的偏移。
或者你可以使用offsetsForTimes并呼吁组分区如下:
Map<TopicPartition, Long> query = new HashMap<>();
query.put(new TopicPartition("topic-name", 0),Instant.now().minus(10, MINUTES).toEpochMilli());
Map<TopicPartition, OffsetAndTimestamp> result = consumer.offsetsForTimes(query);
result.entrySet().stream().forEach(entry -> consumer.seek(entry.getKey(), entry.getValue().offset()));
如果您使用的是旧的高层次的消费,目前还没有API中的消费者复位偏移。唯一的办法是停止所有消费者和复位偏移量为ZK消费者群体手动。
然而,在0.11.0版本中加入一个工具来重置偏移量与不同的范围如主题,分区等群体。你可以在这里找到细节:https://cwiki.apache.org/confluence/display/KAFKA/KIP-122%3A+Add+Reset+Consumer+Group+Offsets+tooling。和https://issues.apache.org/jira/browse/KAFKA-4743
具有3名消费者在同一组是指一个分区只分配给这些消费者之一,所以当你打电话寻求,它只有该分区上只有一个消费者,因此其他人不会受到影响的效果。