- Опубликовано
🐎 Проблема двух генералов
- Автор
- Имя
- Максим | Системный анализ
- Telegram
- Максим | Системный анализ349 подписчиков95 постовКак войти в IT через системный анализ и получить оффер от 200к+. Опыт Senior аналитика из топ-банков. Разборы, практика, собесы, техника мышления аналитика. Бесплатная консультация - в закрепе.
Кратко
🐎 Проблема двух генераловПредставьте: две армии стоят на двух холмах. Между ними враг. Победить можно, только если обе армии атакуют...
🐎 Проблема двух генералов
Атакуем в 6:00Второй генерал получает сообщение. Теперь он знает время. Но первый не знает, получил ли второй это сообщение. Если второй не получил, первый будет атаковать один и погибнет. Поэтому первый ждёт подтверждения.
Понял, атакуем в 6:00Первый получает подтверждение. Теперь он знает, что письмо дошло. Но второй не знает, дошло ли его подтверждение. Он думает:
А вдруг мой гонец не дошёл, и первый не уверен, что я в курсе? Тогда он может не атаковать. А я атакую и погибну...И так до бесконечности
В доставке электронных сообщений ситуация ничем не отличается, поэтому есть три вида договоренности, как мы доставляем:
At most once
В лучшем случае сообщение дойдет, но может и не дойти. Используется, когда нужна скорость, но можно что-нибудь потерять (например, в стриминге видео).
Настройки kafka:
acks=0
retries=0
enable.auto.commit=true
At least once
Сообщение точно будет доставлено, но возможны дубли.
Настройки kafka:
acks=all
min.insync.replicas=2
retries=Integer.MAX_VALUE (ретраим, пока не отправится)
enable.auto.commit=false
Exactly once
Доставка точно один раз без дубликатов. Теоретически невозможно, но на практике используют проверку на дубли со стороны консьюмера, специальные механизмы транзакционности и к at least once настройкам добавляют:
enable.idempotence=true
isolation.level=read_committed
@maximbelovmentor







