Kafka alapok
Az Apache Kafka rekordok folyamait tárolja több szerverfolyamat között, amelyeket brokereknek hívunk. A MailGen tartós háttérmunkához használja. Ez az oldal azokat a fogalmakat magyarázza, amelyek a projekt architecture leírásához kellenek.
Producerek, consumerek és brokerek
A producer publikálja a rekordokat. A consumer olvassa őket. A broker a Kafka-klaszter részeként tárolja és szolgálja ki a rekordokat.
Topicok, partíciók és offsetek
A topic egy logikai folyamot nevez meg. A partíció a topic egy rendezett része. Az offset egy rekord pozícióját azonosítja egy partíción belül.
A Kafka a sorrendet partíción belül őrzi meg. Nem állapít meg globális sorrendet topicok vagy partíciók között. Válaszd ki az üzleti sorrend határát, például egy mailboxot, mielőtt a routinget választod.
Kulcsok és sorrend
Egy kulcs összetartozó rekordokat irányíthat egy partícióhoz. A MailGen mailbox-munkája egy explicit, tartós partíció-hozzárendelést is használ. A producer a key = String(userId) értéket és a hozzárendelt partíciót adja meg.
Önmagában a közös kulcs nem hoz létre sorrendet különböző topicok között. A partíciószám-változás az alapértelmezett kulcs szerinti hashelést is érintheti. Tartsd konzisztensen az explicit mailbox-leképezést és a broker partícióelrendezését.
Consumer groupok
Egy consumer group elosztja a topic partícióit a tagjai között. Egy csoporton belül egyszerre egy aktív consumer birtokol egy partíciót. Ha több a consumer, mint a partíció, az nem hoz létre több párhuzamos partíciótulajdonlást.
Különböző csoportok külön pozíciókat tartanak fenn, és egymástól függetlenül olvashatják ugyanazt a folyamot. Ez a fan-out. A közös alkalmazásadatbázisra gyakorolt hatásuk továbbra is az alkalmazás saját üzleti szabályaitól függ.
Kézbesítési szemantika
| Modell | Viselkedés |
|---|---|
| At-most-once | A feldolgozás előtti commit hiba után munkát veszíthet el |
| At-least-once | A feldolgozás utáni commit hiba után megismételheti a munkát |
| Exactly-once | Megfelelő atomikus tranzakciós vagy állapot-szerződést igényel, nem csak consumer-jelzőt |
A közös MailGen JSON-consumer a handler után commitál. Az adatbázis-deduplikáció a tranzakciósan rögzített hatásokat védi ugyanarra a group/topic/partition/offset azonosítóra. Nem teszi globálisan pontosan egyszer végrehajthatóvá a tetszőleges külső API-hívásokat. Lásd a projektmintákat.