Apache Hudi
Apache Hudi is een open tabelformaat dat een data lake op object storage transactioneel maakt. Het blinkt uit in snelle upserts, verwijderin...
Lees meerAt-least-once delivery is de garantie dat elk bericht minstens één keer aankomt. Verloren gaat het niet, maar door een retry na een gemiste bevestiging kan het wel dubbel binnenkomen. Daarom is het de standaard in message queues en streaming, en verwerk je events het best idempotent zodat een duplicaat niet dubbel telt.
At-least-once delivery is de garantie dat elk bericht minstens één keer aankomt. Verloren gaan doet het niet, maar dubbel aankomen kan wel. Zo werken de meeste message queues en streamingsystemen.
Het komt door de manier waarop de bezorging bevestigd wordt. De afzender stuurt een bericht en wacht op een ack, een bevestiging dat het aankwam. Blijft die ack uit, dan weet de afzender niet of het bericht verloren ging of dat alleen de bevestiging onderweg sneuvelde. Hij stuurt het dus opnieuw. Kwam het de eerste keer wel aan en ging enkel de ack verloren, dan heb je het bericht nu twee keer. Verlies sluit je op die manier uit, duplicaten niet.
Voor de meeste systemen is het de veilige middenweg. Data kwijtraken is bijna altijd erger dan een bericht twee keer zien, en een duplicaat kan je aan de ontvangende kant opvangen. Een verloren bericht kan je niet meer rechtzetten.
Je vindt die keuze terug bij de grote namen. AWS SQS standard queues bezorgen minstens één keer en waarschuwen dat er soms meer dan één kopie van een bericht aankomt. Google Cloud Pub/Sub levert standaard at-least-once en biedt exactly-once enkel als aparte optie. RabbitMQ geeft je at-least-once zodra je met acks werkt; zonder acks val je terug op at-most-once. En Apache Kafka staat standaard op at-least-once.
Er zijn drie klassieke garanties, en ze verschillen op één punt: wat er gebeurt bij een fout.
At-most-once. Hoogstens één keer. Bij een fout kan een bericht verloren gaan, maar het komt nooit dubbel. Snel en simpel, alleen accepteer je dat je af en toe iets mist.
At-least-once. Minstens één keer. Een bericht gaat nooit verloren, maar kan bij een retry dubbel aankomen. De gangbare standaard.
Exactly-once. Precies één keer, nooit verloren en nooit dubbel. Dat klinkt als het beste van beide, maar het vraagt coördinatie en werkt vaak enkel binnen één systeem. In de praktijk is exactly-once meestal at-least-once bezorging met idempotente verwerking eronder.
Omdat een bericht dubbel kan binnenkomen, moet de kant die het verwerkt daartegen bestand zijn. Er zijn twee wegen: verwerk elk bericht idempotent, zodat twee keer verwerken hetzelfde resultaat geeft als één keer, of dedupliceer op een unieke sleutel, zodat je een bericht dat je al zag gewoon overslaat.
Neem een order-event. Je systeem krijgt "bestelling 8842 geplaatst" binnen, verwerkt het, maar de bevestiging naar de bron gaat verloren. De bron stuurt het event opnieuw. Verwerk je dat naïef, dan staan er nu twee bestellingen 8842 in je systeem, met een dubbele factuur tot gevolg. Gebruik je het order-ID als sleutel en doe je een upsert of een check tegen een dedup-tabel, dan verandert de tweede keer niets. Eén event, één bestelling, ook al kwam het twee keer toe.
Datzelfde principe zie je overal waar at-least-once speelt: bij streaming data, bij webhooks die retryen tot ze een 200 terugkrijgen, en bij Change Data Capture die databasewijzigingen doorstuurt als events. Het systeem zorgt dat er niks verloren gaat, de deduplicatie aan jouw kant zorgt dat een duplicaat niet dubbel telt.
Apache Hudi is een open tabelformaat dat een data lake op object storage transactioneel maakt. Het blinkt uit in snelle upserts, verwijderin...
Lees meerApache Kafka is een open-source platform dat stromen van events opslaat en doorgeeft: producenten schrijven berichten naar een topic, afneme...
Lees meerEen API of Application Programming Interface is de afgesproken manier waarop software met andere software praat. Je stuurt een verzoek in ee...
Lees meerAPI-automatisering laat systemen via gedocumenteerde programmeerinterfaces gegevens en opdrachten uitwisselen. De automatisering gebruikt re...
Lees meerAt-most-once delivery betekent dat elk bericht hoogstens één keer aankomt: nul of één keer. Het kan verloren gaan, maar komt nooit dubbel to...
Lees meer