Если вы установите acks=all
, то брокер, являющийся лидером раздела, будет ждать все реплики in-syn c для репликации данных. In-syn c -replica - это реплика, которая не сильно отстает от лидера раздела.
Что я имею в виду, что не далеко позади: В Кафке, когда сообщение отправляется разделу topi c (сначала сообщение принимается и сохраняется в лидере), и если коэффициент репликации для этой топи c больше 1, то брокер (-ы) реплики отправляют запрос на выборку руководителю брокер и эти данные реплицируются на другой брокер (ы). Если replica.lag.time.max.ms
передается от последнего перехваченного, реплика считается несинхронной c и удаляется из списка ISR. (Это все еще реплика и извлечение сообщений, но ведущий брокер не ждет его, пока не догонит и снова не станет синонимом c -реплики)
Из документов Кафки:
Параметр конфигурации replica.lag.time.max.ms теперь относится не только к времени, прошедшему с момента последнего запроса на выборку из реплики, но и ко времени, прошедшему с момента последней реплики. Реплики, которые все еще извлекают сообщения от лидеров, но не отслеживают последние сообщения в replica.lag.time.max.ms, будут считаться несинхронными c.
Существует также min.insync.replicas
параметр в конфиге брокера. Он задает минимальное количество in-syn c -реплик для продолжения отправки сообщения, когда acks=all
.
min.insyn c .replicas: Когда производитель устанавливает acks to "all" (или "-1"), min.insyn c .replicas указывает минимальное количество реплик, которые должны подтвердить запись, чтобы запись считалась успешной. Если этот минимум не может быть достигнут, то производитель сгенерирует исключение (NotEnoughReplicas или NotEnoughReplicasAfterAppend). При совместном использовании min.insyn c .replicas и acks позволяет обеспечить более высокие гарантии долговечности. Типичным сценарием может быть создание темы с коэффициентом репликации 3, установка min.insyn c .replicas равной 2 и создание с подтверждением «all». Это будет гарантировать, что производитель выдаст исключение, если большинство реплик не получит запись.
Если коэффициент репликации равен 4, ISR равен 3, а подтверждения производителя установлены на все, сколько подтверждений будет ждать производитель?
Ответ : Брокер, являющийся лидером топи c, будет ждать 3 других брокера в списке ISR для репликации данных. и отправить подтверждение. Если количество реплик в списке ISR меньше min.insync.replicas
, тогда ваш производитель получает исключение и не может выдать данные.
Примечание. Вы можете проверить текущую реплику и список ISR с помощью следующей команды.
bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic myTopic --describe