Что фактически делает KafkaConsumer.commitSyn c ()? - PullRequest
2 голосов
/ 28 апреля 2020

Делает KafkaConsumer.commitSyn c просто фиксирует "смещения, возвращенные в последнем опросе ()", как утверждает JavaDo c (что может пропустить некоторые разделы, не включенные в последний poll результат ), или он фактически фиксирует последние позиции для всех подписанных разделов? Запрашиваемая, потому что код предлагает последнее, учитывая allConsumed: https://github.com/apache/kafka/blob/2.4.0/clients/src/main/java/org/apache/kafka/clients/consumer/KafkaConsumer.java#L1387

@Override
public void commitSync(Duration timeout) {
    acquireAndEnsureOpen();
    try {
        maybeThrowInvalidGroupIdException();
        if (!coordinator.commitOffsetsSync(subscriptions.allConsumed(), time.timer(timeout))) {
            throw new TimeoutException("Timeout of " + timeout.toMillis() + "ms expired before successfully " +
                    "committing the current consumed offsets");
        }
    } finally {
        release();
    }
}

1 Ответ

2 голосов
/ 28 апреля 2020

Он фиксирует только те смещения, которые были фактически опрошены и обработаны. Если некоторые смещения не были включены в последний опрос, то эти смещения не будут зафиксированы.

Будет не фиксировать последние позиции для всех подписанных разделов. Это могло бы помешать концепции управления потребительскими смещениями Kafka, чтобы иметь возможность перезапустить приложение, где оно было остановлено.

Насколько я понимаю, allConsumed эквивалентно all offsets included in the last poll, что в комментарии commitSync также документы

Смещения коммитов, возвращенные при последнем опросе () для всех подписанных списков тем и разделов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...