Apache Kafka
För en högnivådefinition, låt oss presentera en kort definition för Apache Kafka:
Apache Kafka är en distribuerad, feltolerant, horisontellt skalbar, åtagandelogg.
Det var några ord på hög nivå om Apache Kafka. Låt oss förstå begreppen i detalj här.
- Distribuerad: Kafka delar upp data som den innehåller i flera servrar och var och en av dessa servrar kan hantera förfrågningar från klienter för den del av data den innehåller
- Feltolerant: Kafka har inte en enda misslyckande punkt. I ett SPoF-system, som en MySQL-databas, skruvas applikationen om servern som är värd för databasen. I ett system som inte har en SPoF och består av flera noder, även om större delen av systemet går ner, är det fortfarande detsamma för en slutanvändare.
- Horisontellt skalbar: Denna typ av skräpning avser att lägga till fler maskiner i befintligt kluster. Det betyder att Apache Kafka kan acceptera fler noder i sitt kluster och tillhandahålla ingen stilleståndstid för nödvändiga uppgraderingar till systemet. Titta på bilden nedan för att förstå typen av skräckbegrepp:
- Åtagande logg: En engagemangslogg är en datastruktur precis som en länkad lista. Den bifogar alla meddelanden som kommer till den och behåller alltid sin ordning. Data kan inte tas bort från den här loggen förrän en viss tid har uppnåtts för dessa data.
Vertikal och horisontell svindling
Ett ämne i Apache Kafka är precis som en kö där meddelanden lagras. Dessa meddelanden lagras under en konfigurerbar tid och meddelandet raderas inte förrän den här tiden uppnås, även om det har konsumerats av alla kända konsumenter.
Kafka är skalbart eftersom det är konsumenterna som faktiskt lagrar att det budskap som hämtades av dem senast som ett "offset" -värde. Låt oss titta på en figur för att förstå detta bättre:
Ämnespartion och konsumentkompensation i Apache Kafka
Komma igång med Apache Kafka
För att börja använda Apache Kafka måste den installeras på maskinen. För att göra detta, läs Installera Apache Kafka på Ubuntu.
Se till att du har en aktiv Kafka-installation om du vill prova exempel vi presenterar senare i lektionen.
Hur fungerar det?
Med Kafka, Producent applikationer publiceras meddelanden som anländer till en Kafka Nod och inte direkt till en konsument. Från denna Kafka-nod konsumeras meddelanden av Konsument applikationer.
Kafka Producent och konsument
Eftersom ett enda ämne kan få mycket data på en gång, för att hålla Kafka horisontellt skalbar, är varje ämne uppdelat i partitioner och varje partition kan leva på vilken nodmaskin som helst i ett kluster. Låt oss försöka presentera det:
Ämnespartitioner
Återigen registrerar Kafka Broker inte vilken konsument som har konsumerat hur många datapaket. Det är konsumenternas ansvar att hålla reda på de uppgifter de har konsumerat.
Persistence to Disk
Kafka behåller meddelandeposterna som de får från producenter på disken och håller dem inte i minnet. En fråga som kan uppstå är hur detta gör saker genomförbara och snabba? Det fanns flera orsaker bakom detta vilket gör det till ett optimalt sätt att hantera meddelandeposterna:
- Kafka följer ett protokoll för gruppering av meddelandeposterna. Producenter producerar meddelanden som kvarstår till disk i stora bitar och konsumenter konsumerar även dessa meddelandeposter i stora linjära bitar.
- Anledningen till att skivan skriver är linjär är att detta gör läsningar snabbt på grund av mycket minskad linjär skivavläsningstid.
- Linjära diskoperationer optimeras av Operativsystem samt genom att använda tekniker för skriv-bakom och läs framåt.
- Modern OS använder också begreppet Sidcaching vilket innebär att de cachar vissa diskdata i ledigt tillgängligt RAM-minne.
- Eftersom Kafka fortsätter data i en enhetlig standarddata i hela flödet från producent till konsument använder den sig av nollkopiering optimering bearbeta.
Datadistribution och replikering
Som vi studerade ovan att ett ämne är uppdelat i partitioner replikeras varje meddelandepost på flera noder i klustret för att upprätthålla ordningen och data för varje post om en av noderna dör.
Även om en partition replikeras på flera noder finns det fortfarande en partitionsledare nod genom vilken applikationer läser och skriver data om ämnet och ledaren replikerar data på andra noder, som kallas anhängare av den partitionen.
Om meddelandepostdata är mycket viktigt för en applikation kan garantin för att meddelandeposten är säker i en av noderna ökas genom att öka replikationsfaktor av klustret.
Vad är Zookeeper?
Zookeeper är en mycket feletolerant, distribuerad nyckel-värdebutik. Apache Kafka är starkt beroende av Zookeeper för att lagra klustermekanik som hjärtslag, distribuera uppdateringar / konfigurationer, etc.).
Det gör att Kafka-mäklarna kan prenumerera på sig själva och veta när någon förändring angående en partitionsledare och noddistribution har hänt.
Producent- och konsumentapplikationer kommunicerar direkt med Zookeeper applikation för att veta vilken nod som är partitionsledaren för ett ämne så att de kan utföra läsningar och skrivningar från partitionsledaren.
Strömning
En strömprocessor är en huvudkomponent i ett Kafka-kluster som tar en kontinuerlig ström av meddelandepostdata från inmatningsämnen, bearbetar dessa data och skapar en dataström till utmatningsämnen som kan vara vad som helst, från papperskorgen till en databas.
Det är helt möjligt att utföra enkel bearbetning direkt med producent / konsument-API: er, men för komplex bearbetning som att kombinera strömmar tillhandahåller Kafka ett integrerat Streams API-bibliotek men observera att detta API är avsett att användas inom vår egen kodbas och det gör det inte kör inte på en mäklare. Det fungerar som konsumentens API och hjälper oss att skala ut strömbehandlingsarbetet över flera applikationer.
När ska jag använda Apache Kafka?
Som vi studerade i ovanstående avsnitt kan Apache Kafka användas för att hantera ett stort antal meddelandeposter som kan tillhöra ett nästan oändligt antal ämnen i våra system.
Apache Kafka är en idealisk kandidat när det gäller att använda en tjänst som gör att vi kan följa händelsestyrd arkitektur i våra applikationer. Detta beror på dess kapacitet att uthålla data, feletolerant och mycket distribuerad arkitektur där kritiska applikationer kan lita på dess prestanda.
Kafkas skalbara och distribuerade arkitektur gör integrering med mikrotjänster väldigt enkel och gör det möjligt för en applikation att koppla av sig själv med mycket affärslogik.
Skapa ett nytt ämne
Vi kan skapa ett testämne testning på Apache Kafka-server med följande kommando:
Skapa ett ämne
sudo kafka-ämnen.sh --create --zookeeper localhost: 2181 --replikationsfaktor 1--partitioner 1 - ämnetestning
Här är vad vi får tillbaka med det här kommandot:
Skapa nytt Kafka-ämne
Ett testämne skapas som vi kan bekräfta med nämnda kommando:
Bekräftelse av skapandet av ämnet Kafka
Skriva meddelanden om ett ämne
Som vi studerade tidigare är en av de API: er som finns i Apache Kafka Producent API. Vi kommer att använda detta API för att skapa ett nytt meddelande och publicera till det ämne vi just skapade:
Skrivande meddelande till ämnet
sudo kafka-konsol-producent.sh --broker-list localhost: 9092 - ämnetestningLåt oss se utdata för det här kommandot:
Publicera meddelande till Kafka Topic
När vi väl har tryckt på tangenten ser vi ett nytt piltecken (>) vilket innebär att vi kan komma in i data nu:
Skriva ett meddelande
Skriv bara in något och tryck för att starta en ny rad. Jag skrev in 3 rader med texter:
Läser meddelanden från ämnet
Nu när vi har publicerat ett meddelande om Kafka-ämnet som vi skapade kommer det här meddelandet att finnas där under en konfigurerbar tid. Vi kan läsa det nu med hjälp av Konsument-API:
Läser meddelanden från ämnet
sudo kafka-konsol-konsument.sh --zookeeper localhost: 2181 --ämnetestning - från början
Här är vad vi får tillbaka med det här kommandot:
Kommando att läsa Meddelande från Kafka Topic
Vi kommer att kunna se de meddelanden eller rader som vi har skrivit med Producer API enligt nedan:
Om vi skriver ett nytt nytt meddelande med Producer API, kommer det också att visas direkt på konsumentens sida:
Publicera och konsumera samtidigt
Slutsats
I den här lektionen tittade vi på hur vi börjar använda Apache Kafka, som är en utmärkt meddelandemäklare och som också kan fungera som en speciell datapersistensenhet.