Пойми общие гарантии брокеров, затем сравни Kafka как сохраняемый лог с RabbitMQ как маршрутизатором очередей. Научись связывать публикацию, транзакцию БД, ack, повторы и дедупликацию так, чтобы дубли и временный отказ не теряли бизнес-операцию.
Начни с того, кто инициирует передачу, где хранится сообщение и что означает подтверждение. Разбери at-most-once, at-least-once и идемпотентность на временной линии, а затем оцени, где порядок вообще существует.
Представь Kafka как упорядоченный лог с независимыми offset, а не как очередь, где сообщение исчезает после чтения. Свяжи partition key с порядком, consumer group с распределением работы и commit offset с повторной доставкой.
Сопоставь Kafka и RabbitMQ по жизненному циклу сообщения: в RabbitMQ сообщение маршрутизируется в очередь и обычно удаляется после ack, а в Kafka сохраняется в логе независимо от чтения. Разбери routing, prefetch, confirms и dead-letter retry на примерах.
Разбери двойную запись между БД и брокером и собери outbox/inbox вокруг локальных транзакций. Затем проверь, что сообщение достаточно версионировано, конкурентно опубликовано без потери и обработано при at-least-once доставке.