Apache Kafka

Apache Kafka gebruikt sleutels voor partitie

Apache Kafka gebruikt sleutels voor partitie
Apache Kafka is een datastreamingplatform dat verantwoordelijk is voor het streamen van data van een aantal bronnen naar veel doelen. De bronnen worden ook wel producenten. De geproduceerde gegevens zijn nodig voor een geheel andere groep, genaamd consumenten voor verschillende doeleinden. Kafka is de laag die tussen de producenten en consumenten zit en de gegevens samenvoegt tot een bruikbare pijplijn. Ook Kafka zelf is een gedistribueerd platform, dus de Kafka-laag bestaat uit verschillende servers waarop een kafka draait, deze servers of knooppunten staan ​​daarom bekend als Kafka Makelaars.

Dat overzicht is een beetje abstract, dus laten we het in een realistisch scenario houden, stel je voor dat je verschillende webservers moet controleren. Elk heeft zijn eigen website en er worden elke seconde van de dag voortdurend nieuwe logboeken gegenereerd. Bovendien zijn er een aantal e-mailservers die u ook moet controleren.

Mogelijk moet u die gegevens opslaan voor archivering en facturering, wat een batchtaak is die niet onmiddellijke aandacht vereist. Misschien wilt u analyses op de gegevens uitvoeren om in realtime beslissingen te nemen, waarvoor nauwkeurige en onmiddellijke invoer van gegevens vereist is.  Plots heb je de behoefte om de gegevens op een verstandige manier te stroomlijnen voor alle verschillende behoeften. Kafka fungeert als die abstractielaag waarnaar meerdere bronnen verschillende gegevensstromen en een gegeven kunnen publiceren klant kan zich abonneren op de streams die het relevant vindt. Kafka zorgt ervoor dat de gegevens goed geordend zijn. Het is de binnenkant van Kafka die we moeten begrijpen voordat we naar het onderwerp Partitionering en Sleutels gaan.

Kafka-onderwerpen, makelaar en partities

Kafka Onderwerpen zijn als tabellen van een database. Elk onderwerp bestaat uit gegevens uit een bepaalde bron van een bepaald type. De status van uw cluster kan bijvoorbeeld een onderwerp zijn dat bestaat uit informatie over CPU- en geheugengebruik. Evenzo kan inkomend verkeer naar het hele cluster een ander onderwerp zijn.

Kafka is ontworpen om horizontaal schaalbaar te zijn. Dat wil zeggen, een enkele instantie van Kafka bestaat uit meerdere Kafka makelaars die over meerdere knooppunten lopen, elk kan gegevensstromen parallel aan de andere verwerken. Zelfs als een paar van de knooppunten uitvallen, kan uw gegevenspijplijn blijven functioneren. Een bepaald onderwerp kan dan worden opgesplitst in een aantal partities. Deze verdeling is een van de cruciale factoren achter de horizontale schaalbaarheid van Kafka.

Meerdere producenten, gegevensbronnen voor een bepaald onderwerp, kunnen tegelijkertijd naar dat onderwerp schrijven omdat elk op een bepaald punt naar een andere partitie schrijft. Nu worden gegevens meestal willekeurig toegewezen aan een partitie, tenzij we deze voorzien van een sleutel.

Partitioneren en bestellen

Om het samen te vatten, producenten schrijven gegevens naar een bepaald onderwerp. Dat onderwerp is eigenlijk opgesplitst in meerdere partities. En elke partitie leeft onafhankelijk van de andere, zelfs voor een bepaald onderwerp. Dit kan tot veel verwarring leiden als de volgorde van gegevens belangrijk is. Misschien heb je je gegevens in chronologische volgorde nodig, maar het hebben van meerdere partities voor je datastroom garandeert geen perfecte volgorde.

Je kunt maar één partitie per onderwerp gebruiken, maar dat gaat voorbij aan het hele doel van Kafka's gedistribueerde architectuur. Dus we hebben een andere oplossing nodig.

Toetsen voor partities

Gegevens van een producer worden willekeurig naar partities gestuurd, zoals we eerder vermeldden. Berichten zijn de feitelijke brokken gegevens. Wat producenten kunnen doen naast het verzenden van berichten, is een sleutel toevoegen die daarbij hoort.

Alle berichten die bij de specifieke sleutel horen, gaan naar dezelfde partitie. De activiteit van een gebruiker kan bijvoorbeeld chronologisch worden gevolgd als de gegevens van die gebruiker zijn getagd met een sleutel en deze dus altijd in één partitie terechtkomen. Laten we deze partitie p0 noemen en de gebruiker u0.

Partitie p0 zal altijd de u0-gerelateerde berichten oppikken omdat die sleutel ze samenbindt. Maar dat betekent niet dat p0 alleen daarmee verbonden is. Het kan ook berichten van u1 en u2 opnemen als het de capaciteit heeft om dit te doen. Evenzo kunnen andere partities gegevens van andere gebruikers verbruiken.

Het punt dat de gegevens van een bepaalde gebruiker niet over verschillende partities zijn verspreid, waardoor de chronologische volgorde voor die gebruiker wordt gegarandeerd. Echter, het algemene onderwerp van gebruikersgegevens, kan nog steeds gebruikmaken van de gedistribueerde architectuur van Apache Kafka.

Conclusie

Terwijl gedistribueerde systemen zoals Kafka enkele oudere problemen oplossen, zoals gebrek aan schaalbaarheid of het hebben van een enkel storingspunt. Ze komen met een reeks problemen die uniek zijn voor hun eigen ontwerp. Het anticiperen op deze problemen is een essentiële taak van elke systeemarchitect. Niet alleen dat, soms moet je echt een kosten-batenanalyse maken om te bepalen of de nieuwe problemen een waardige afweging zijn om van de oudere af te komen. Bestellen en synchroniseren zijn slechts het topje van de ijsberg.

Hopelijk kunnen artikelen zoals deze en de officiële documentatie je op weg helpen.

Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...
Beste Linux-distributies voor gaming in 2021
Het Linux-besturingssysteem heeft een lange weg afgelegd van zijn oorspronkelijke, eenvoudige, servergebaseerde uiterlijk. Dit besturingssysteem is de...
Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...