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...