Является ли запись в Kafka topi c успешной только в случае успешной записи в реплики каждого раздела? - PullRequest
0 голосов
/ 06 марта 2020

Является ли запись в топику Кафки c успешной только в случае успешной записи в реплики каждого раздела? Или есть кворум, который можно настроить?

Предположим, у вас есть

  1. Производитель
  2. Сервер1 с Темой1 Раздел1 (Лидер)
  3. Сервер2 с Topic1 Partition1 (Replica)
  4. Сервер3 с Topic1 Partition1 (Replica)

Производитель пишет в Topic1. Является ли правилом, что сообщение сохраняется только в том случае, если от лидера и обеих реплик получено подтверждение? Или можно настроить кворум: только лидер?

Ответы [ 2 ]

2 голосов
/ 06 марта 2020

Если я правильно понимаю ваши вопросы, вы ищете конфигурацию API производителя, которая называется acks.

acks: количество подтверждений, которые производитель должен получить от лидера, прежде чем рассматривать запрос выполнен Это контролирует долговечность отправляемых записей. Допустимы следующие настройки:

acks = 0 Если установлено в ноль, то производитель вообще не будет ждать никакого подтверждения от сервера. Запись будет немедленно добавлена ​​в буфер сокета и будет считаться отправленной. Невозможно гарантировать, что сервер получил запись в этом случае, и конфигурация повторных попыток не вступит в силу (так как клиент обычно не знает о каких-либо сбоях). Смещение, возвращаемое для каждой записи, всегда будет установлено равным -1.

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

acks = all Это означает, что лидер будет ожидать полного набора in-syn c реплик для подтверждения записи. Это гарантирует, что запись не будет потеряна, пока хотя бы одна реплика in-syn c остается в живых. Это самая сильная из доступных гарантий. Это эквивалентно установке acks = -1.

Тип: stringDefault: 1 Допустимые значения: [all, -1, 0, 1] Важность: высокая

Проверка документация для API производителя для получения более подробной информации.

1 голос
/ 07 марта 2020

Помимо подтверждений, существует вопрос о том, когда сообщение является видимым для потребителей - оно не зависит от подтверждений для производителей и не относится к конфигурации брокера - это происходит, когда все подписчики получили сообщение, если они синхронизированы c. если кто-то отстал, то это когда min.insyn c .replicas получил сообщение. Я написал немного об этом в https://chrisg23.blogspot.com/2020/02/kafka-acks-configuration-apology.html?m=1

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