对组中的消费者进行呼叫搜索是否为整个组设置了偏移量

时间:2017-08-31 12:42:54

标签: apache-kafka reset seek

我在同一组中有3个消费者,我调用seek()来设置一个消费者的一个分区的偏移量。是否会为组中的所有使用者设置偏移量,或者仅为该特定分区上的偏移量设置偏移量。

我希望能够重置组以重新开始日志中的所有记录。但我只会打电话给一个消费者。

2 个答案:

答案 0 :(得分:2)

seek()将仅回退到该分区中的指定偏移量。 然而,对于旧的高级消费者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

答案 1 :(得分:1)

在同一组中有3个消费者意味着只为这些消费者中的一个分配了一个分区,所以当你调用seek时,它只对那个只有一个消费者的分区产生影响,所以其他消费者不受影响