Кафка потери сообщения и Acks = все - PullRequest
0 голосов
/ 11 апреля 2019

Я понимаю, что если Acks = all и min ISR установлены на> = 2, это уменьшает вероятность потери сообщения, так как сообщение хранится в памяти более чем у одного брокера. Что происходит при одновременном сбое соединения между производителем и брокерами 1, прежде чем сообщение будет подтверждено, но запрос отправлен руководителю для записи. 2 сообщения были написаны, но потерпели неудачу во время подтверждения

Есть ли вероятность потери сообщения?

1 Ответ

1 голос
/ 11 апреля 2019

Когда производитель отправляет данные брокерам, фактически он отправляет только одному - лидер . Leader брокер должен подтвердить, что сообщение было получено.Если вы настроите посредника, как описано, leader будет ожидать подтверждений от реплик.Если что-то идет не так, лидер не отправляет собственное подтверждение.Когда производитель не получает подтверждения от лидера , он понимает, что сообщение НЕ было доставлено.Для простоты я пропустил, что перед любым сообщением о сбое есть несколько выходов из системы.

Предполагая, что

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

  2. Если сообщение было записано leader , но реплики не были подтверждены, то leader будет рассматривать такое сообщение как не сохраненное и удалять изего хранение.

...