Piszę sobie różne poc. Natrafiłem na problem, który nie wiem czy w ogóle jest problemem?

Chciałbym zrozumieć czy jest sens stosować transactional outbox do rozwiązywania problemu dual writes, jeśli problem pojawia się w trakcie processingu w ramach Kafkowego consumera z gwarancją at-least-once delivery?

Problem Dual writes objawia się tym, że pierwsza operacja może zmienić stan poprawnie (tutaj: zapis do bazy danych), ale już kolejna operacja może się wywalić (tutaj: publish na Kafkę).

Książki / artykuły reklamują transactional outbox jako przykładowy pattern który rozwiązuje ten problem. Jeszcze inną reklamowaną opcją jest Event Sourcing, ale ten temat nie o tym.

Nakreślę pseudokod:

@KafkaConsumer
consume_from_kafka(Message m) {
  // ...
  save_to_database();
  publish_message();
}

Po co miałbym chcieć korzystać z outboxa jeśli całość wykonuje się w consumerze Kafki ? Nie rozumiem czy jest taki sens w ogóle.

Skoro processing wiadomości się wywali, a mam at least once delivery, czyli nie było commita, to po prostu processing wykona się jeszcze raz...