Что происходит, когда ISR не работает, но сообщение было записано в лидере

#apache-kafka #kafka-producer-api

#apache-kafka #kafka-producer-api

Вопрос:

Что происходит, когда происходит сбой при записи сообщения во все реплики ISR, но сообщение уже сохраняется в лидере?

Даже если запрос не выполняется, данные по-прежнему доступны для потребителей?

Могут ли потребители читать «незафиксированные» данные?

Ответ №1:

Сообщение не отображается для KafkaConsumer до тех min.insync.replicas пор, пока не будет выполнена настройка темы.

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

Обратите внимание, что этот сценарий актуален только в том случае, если для вашей конфигурации acks KafkaProducer установлено значение all . Если вы установите для него значение 0 или 1, потребитель сможет использовать сообщение, как только данные поступят в лидер раздела.

В общем случае клиент (здесь KafkaProducer ) взаимодействует только с лидером раздела и в зависимости от его режима, такого как синхронный, асинхронный или запуск и забывание, и его конфигурации acks ожидает или не ожидает ответа. Репликация самих данных не зависит от производителя и обрабатывается (однопоточным) посредником лидера раздела. Лидер будет уведомлять только об успешном или неудачном выполнении репликации, а лидер / реплики продолжают обеспечивать соответствие набора репликации конфигурации темы replication.factor .

Производитель все равно может попытаться повторно отправить сообщение в случае, если сообщение было подтверждено только производителем, но не репликами, в зависимости от его настройки acks и от того, является ли исключение повторяемым или нет. В этом случае у вас будут повторяющиеся значения. Вы можете избежать этого, включив идемпотентность.

Комментарии:

1. Спасибо за информацию. Просто чтобы уточнить, сообщения в сбойном запросе в конечном итоге будут присутствовать в журнале для использования (после того, как реплики догонят), без повторных попыток от производителя, верно?

2. Я добавил больше деталей к своему ответу, надеясь прояснить ваш вопрос. (Ответ ‘y

3. Однако производитель все равно может попытаться повторно отправить сообщение, в зависимости от его настройки acks и от того, является ли исключение повторяемым или нет. В этом случае у вас будут повторяющиеся значения. Вы можете избежать этого, включив идемпотентность.