KerndataAchtergrondwerk

Eventstreaming met consumer groups

Append-only eventstreams met consumer groups, bevestigingen en automatisch herstel van berichten die een gecrashte consumer heeft achtergelaten.

append-only log
Duurzaam
consumer groups per stream
N
verloren berichten bij een crash
0
Stap 1 van 5
Een event publiceren

De bestelservice voegt een event toe en krijgt zijn id terug.

Voorbeeldsessieplaying
# Een event publiceren
hotkv> XADD orders * type created order 1182 total 49.00
"1790985600123-0"

Een geanimeerde walkthrough met echte HotKV-commando's en voorbeeldantwoorden. Klik op een stap om ernaartoe te springen. Commando's en antwoorden blijven Engels, precies zoals je ze in HotKV typt en ziet.

Het probleem

Services die op events reageren hebben meer nodig dan een wachtrij. Meerdere onafhankelijke consumers willen dezelfde events, elke consumer group moet werk verdelen over instanties, en wanneer een instantie sterft met berichten in handen moet iemand dat merken en ze overnemen.

Hoe HotKV het aanpakt

Een stream is een append-only log. Elke consumer group leest hem onafhankelijk, levert elk bericht af bij één lid van de groep en houdt het in behandeling totdat het lid het bevestigt. XAUTOCLAIM geeft berichten die te lang in behandeling zijn aan een gezonde consumer.

Stap voor stap

Wat er gebeurt, commando voor commando

  1. 01

    Een event publiceren

    De bestelservice voegt een event toe en krijgt zijn id terug.

    XADD orders * type created order 1182 total 49.00
  2. 02

    Twee groepen, één stream

    Facturering en verzending hebben elk een eigen groep en ontvangen allebei het event.

    XGROUP CREATE orders billing 0 MKSTREAM
  3. 03

    Consumeren

    Een factureringsinstantie leest nieuwe berichten voor zijn groep en blokkeert totdat er iets binnenkomt.

    XREADGROUP GROUP billing billing-1 COUNT 10 BLOCK 5000 STREAMS orders >
  4. 04

    Bevestigen

    Zodra de factuur is aangemaakt, bevestigt facturering en verlaat het bericht zijn lijst met berichten in behandeling.

    XACK orders billing 1790985600123-0
  5. 05

    Herstellen na een crash

    Een verzendinstantie is gestorven terwijl hij berichten vasthield. Na 60 seconden inactiviteit worden ze door een gezonde overgenomen.

    XAUTOCLAIM orders shipping shipping-2 60000 0-0 COUNT 25
Waar het past

Praktijkscenario's

Orderpipelines

Bestellingen stromen naar facturering, verzending en analytics, die elk dezelfde stream in hun eigen tempo lezen.

Audit- en activiteitenfeeds

Gebruikersacties worden aan een stream toegevoegd en opnieuw afgespeeld door elke service die de geschiedenis nodig heeft.

IoT-ingestie

Apparaatberichten worden gebufferd in streams en verwerkt door een groep workers die meeschaalt met de belasting.

Ingebouwd

Wat je krijgt

Append-only log

Items krijgen in tijd geordende id's en kunnen worden ingekort op lengte of leeftijd.

XADDXTRIM

Consumer groups

Elke groep krijgt elk bericht en verdeelt het werk over haar leden.

XGROUPXREADGROUP

Bevestigingen

Berichten blijven in behandeling totdat ze worden bevestigd.

XACKXPENDING

Automatisch herstel

Berichten die te lang inactief zijn, worden door een andere consumer overgenomen.

XAUTOCLAIMXCLAIM

Veelgestelde vragen

Kan ik oude events opnieuw afspelen?

Ja. XRANGE leest elk deel van de stream op id, en een nieuwe consumer group kan vanaf het begin starten.

Hoe voorkom ik dat een stream eindeloos groeit?

Kort hem in met XTRIM of met de optie MAXLEN of MINID van XADD.

Kan XADD dubbele events voorkomen?

XADD ondersteunt idempotente producer-id's (IDMP), zodat een opnieuw geprobeerde publicatie geen tweede item aanmaakt. Zie de XADD-referentie.

Verwante use cases

Probeer het op je eigen workload

HotKV spreekt het Redis-protocol, dus je kunt een bestaande client erop richten en dezelfde commando's uitvoeren.