Skip to main content

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​

ModellViselkedés
At-most-onceA feldolgozás előtti commit hiba után munkát veszíthet el
At-least-onceA feldolgozás utáni commit hiba után megismételheti a munkát
Exactly-onceMegfelelő 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.