Idag designar och bygger företag av alla storlekar inom alla vertikaler händelsedrivna arkitekturer centrerade kring realtidsströmning och strömbearbetning. Amazon Managed Streaming för Apache Kafka (Amazon MSK) är en helt hanterad tjänst som gör det enkelt för dig att bygga och köra applikationer som använder Apache Kafka att bearbeta streaming- och händelsedata. Apache Kafka är en öppen källkodsplattform för att bygga realtidsströmningsdatapipelines och applikationer. Med Amazon MSK kan du fortsätta att använda inbyggda Apache Kafka API:er för att bygga händelsedrivna arkitekturer, strömma ändringar till och från databaser och driva maskininlärnings- och analysapplikationer.
Du kan använda streaming i ett brett utbud av branscher och organisationer, till exempel för att fånga och analysera data från IoT-enheter, spåra och övervaka fordon eller försändelser, övervaka patienter i medicinska anläggningar eller övervaka finansiella transaktioner.
I det här inlägget går vi igenom hur man bygger en applikation för realtidsströmbehandling med Amazon MSK, AWS Fargate, och Apache Kafka Streams API. De Kafka Streams API är ett klientbibliotek som förenklar utvecklingen av streamapplikationer. Bakom kulisserna är Kafka Streams bibliotek verkligen en abstraktion över standarden Kafka producent och Kafka Consumer API. När du bygger applikationer med Kafka Streams-biblioteket görs dina dataströmmar automatiskt feltoleranta och är transparent och elastiskt fördelade över applikationernas instanser. Kafka Streams applikationer är stöds av Amazon MSK. Fargate är en serverlös beräkningsmotor för containrar som fungerar med AWS containerorkestreringstjänster som Amazon Elastic Container Service (Amazon ECS), som låter dig enkelt köra, skala och säkra containeriserade applikationer.
Vi har valt att köra vår Kafka Streams-applikation på Fargate, eftersom Fargate gör det enkelt för dig att fokusera på att bygga dina applikationer. Fargate tar bort behovet av att tillhandahålla och hantera servrar, låter dig specificera och betala för resurser per applikation och förbättrar säkerheten genom applikationsisolering genom design. Fargate allokerar rätt mängd beräkningar, vilket eliminerar behovet av att välja instanser och skala klusterkapacitet. Du betalar bara för de resurser som krävs för att köra dina behållare, så det finns ingen överprovisionering och betalning för ytterligare servrar. Fargate kör varje uppgift eller pod i sin egen kärna och tillhandahåller uppgifterna och poddar sin egen isolerade datormiljö. Detta gör att din applikation har arbetsbelastningsisolering och förbättrad säkerhet genom design.
Arkitekturöversikt
Vår strömningsapplikationsarkitektur består av en strömproducent, som ansluter till Twitter Stream API, läser tweets och publicerar dem till Amazon MSK. En Kafka Streams-processor förbrukar dessa meddelanden, utför fönsteraggregation, skickar till ämnesresultat och skriver ut till loggar. Båda apparna finns på Fargate.
Stream producer-applikationen ansluter till Twitter API (en ström av exempel tweets), läser strömmen av tweets, extraherar endast hashtags och publicerar dem till MSK-ämnet. Följande är ett kodavsnitt från applikationen:
MSK-klustret är spritt över tre tillgänglighetszoner, med en mäklare per tillgänglighetszon. Vi använder den AWS-rekommenderade (när detta skrivs) versionen av Apache Kafka 2.6.1. Apache Kafka-ämnen har en replikeringsfaktor och partitioner på tre, för att dra fördel av parallellitet och motståndskraft.
Logiken i vår streamingapp för konsumenter är följande; den räknar antalet Twitter-hashtags, med en minsta längd på 1, som har nämnts mer än fyra gånger under ett 20-sekunders fönster:
Förutsättningar
Se till att slutföra följande steg som förutsättningar:
- Skapa ett AWS-konto. För det här inlägget konfigurerar du de nödvändiga AWS-resurserna i
us-east-1
orus-west-2
Område. Om du inte har registrerat dig, slutför följande uppgifter:- Skapa ett konto. För instruktioner, se Registrera dig för AWS.
- Skapa ett AWS identitets- och åtkomsthantering (IAM) användare. För instruktioner, se Skapa en IAM-användare.
- Ha en bärartoken kopplad till din Twitter-app. För att skapa ett utvecklarkonto, se Kom igång med Twitters utvecklarplattform.
- installera Hamnarbetare på din lokala maskin.
Lösningsöversikt
För att implementera denna lösning genomför vi följande steg:
- Sätt upp ett MSK-kluster och Amazon Elastic Container Registry (Amazon ECR).
- Bygg och ladda upp program JAR-filer till Amazon ECR.
- Skapa ett ECS-kluster med en Fargate-uppgift och tjänstdefinitioner.
- Kör vår streamingapplikation.
Konfigurera ett MSK-kluster och Amazon ECR
Använd den medföljande AWS molnformation mall för att skapa VPC (med andra nödvändiga nätverkskomponenter), säkerhetsgrupper, MSK-kluster med erforderliga Kafka-ämnen (twitter_input
och twitter_output
), och två Amazon ECR-förråd, en per varje applikation.
Bygg och ladda upp program JAR-filer till Amazon ECR
För att bygga och ladda upp JAR-filerna till Amazon ECR, utför följande steg:
- Ladda ner applikationskoden från GitHub repa.
- Bygg applikationerna genom att köra följande kommando i roten av projektet:
- Skapa dina Docker-bilder (
kafka-streams-msk
ochtwitter-stream-producer
):
- Hämta en autentiseringstoken och autentisera din Docker-klient till ditt register. Använd följande AWS-kommandoradsgränssnitt (AWS CLI) kod:
- Tagga och skicka dina bilder till Amazon ECR-förvaret:
- Kör följande kommando för att skicka bilder till dina Amazon ECR-förråd:
Nu bör du se bilder i ditt Amazon ECR-förråd (se följande skärmdump).
Skapa ett ECS-kluster med en Fargate-uppgift och tjänstdefinitioner
Använd den medföljande CloudFormation mall för att skapa ditt ECS-kluster, Fargate-uppgifts- och tjänstdefinitioner. Se till att ha Twitter API Bearer Token redo.
Kör streamingapplikationen
När CloudFormation-stacken är klar distribuerar den automatiskt dina applikationer. Efter cirka 10 minuter bör alla dina appar vara igång, samlas och ge resultat. Du kan se resultatet i amazoncloudwatch loggar eller genom att navigera till Loggar fliken i Fargate-uppgiften.
Förbättringar, överväganden och bästa praxis
Tänk på följande när du implementerar den här lösningen:
- Fargate gör att du kan köra och underhålla ett specificerat antal instanser av en uppgiftsdefinition samtidigt i ett kluster. Om någon av dina uppgifter skulle misslyckas eller stoppas av någon anledning, startar Fargate-schemaläggaren en annan instans av din uppgiftsdefinition för att ersätta den för att behålla det önskade antalet uppgifter i tjänsten. Fargate rekommenderas inte för arbetsbelastningar som kräver privilegierade Docker-behörigheter eller arbetsbelastningar som kräver mer än 4v CPU eller 30 Gb minne (tänk på om du kan dela upp din arbetsbelastning i fler, mindre behållare som var och en använder färre resurser).
- Kafka Streams motståndskraft och tillgänglighet tillhandahålls av statliga butiker. Dessa tillståndsbutiker kan antingen vara en hash-karta i minnet (som används i det här inlägget), eller en annan bekväm datastruktur (till exempel en RocksDB-databas som rekommenderas i produktion). Kafka Streams-applikationen kan bädda in mer än en lokal tillståndsbutik som kan nås via API:er för att lagra och fråga efter data som krävs för bearbetning. Dessutom ser Kafka Streams till att de lokala statliga butikerna är robusta mot misslyckanden. För varje tillståndsbutik upprätthåller den en replikerad ändringslogg Kafka-ämne där den spårar eventuella tillståndsuppdateringar. Om din app startar om efter en krasch, spelar den upp Changelog Kafka-ämnet och återskapar en minnesbutik.
- Smakämnen AWS Glue Schema Registry är utanför räckvidden för detta inlägg, men bör övervägas för att centralt upptäcka, validera och kontrollera utvecklingen av strömmande data med hjälp av registrerade Apache Avro-scheman. Några av fördelarna som följer med det är upprätthållande av datapolicy, dataupptäckt, kontrollerad schemautveckling och feltoleranta strömmande (data) pipelines.
- För att förbättra tillgängligheten, aktivera tre (maximalt när detta skrivs) Tillgänglighetszon-replikationer inom en region. Amazon MSK övervakar kontinuerligt klustrets hälsa och om en komponent misslyckas ersätter Amazon MSK den automatiskt.
- När du aktiverar tre tillgänglighetszoner för ditt MSK-kluster förbättrar du inte bara tillgängligheten utan förbättrar också klustrets prestanda. Du sprider belastningen mellan ett större antal mäklare och kan lägga till fler partitioner per ämne.
- Vi rekommenderar starkt att du aktiverar kryptering i vila, TLS-kryptering under överföring (klient-till-mäklare, mäklare-till-mäklare), TLS-baserad certifikatautentiseringoch SASL/SCRAM-autentisering, som kan säkras genom AWS Secrets Manager.
Städa upp
För att rensa upp dina resurser, ta bort CloudFormation-stackarna som du lanserade som en del av det här inlägget. Du kan ta bort dessa resurser via AWS CloudFormation-konsolen eller via AWS-kommandoradsgränssnitt (AWS CLI).
Slutsats
I det här inlägget visade vi hur man bygger en skalbar och motståndskraftig applikation för strömbehandling i realtid. Vi bygger lösningen med hjälp av Kafka Streams API, Amazon MSK och Fargate. Vi diskuterade också förbättringar, överväganden och bästa praxis. Du kan använda den här arkitekturen som referens i dina migreringar eller nya arbetsbelastningar. Prova det och dela din upplevelse i kommentarerna!
Om författaren
- &
- 11
- 9
- tillgång
- Konto
- Annat
- Fördel
- Alla
- amason
- analytics
- Apache
- Apache Kafka
- api
- API: er
- app
- Ansökan
- tillämpningar
- appar
- arkitektur
- runt
- Autentisering
- tillgänglighet
- AWS
- bakom kulisserna
- BÄST
- bästa praxis
- mäklare
- mäklare
- SLUTRESULTAT
- Byggnad
- Kapacitet
- certifikat
- koda
- Företag
- komponent
- Compute
- Konsumenten
- Behållare
- Behållare
- fortsätta
- Crash
- datum
- Databas
- databaser
- Designa
- Utvecklare
- Utveckling
- enheter
- Upptäckten
- Hamnarbetare
- kryptering
- Miljö
- händelse
- Utvecklingen
- erfarenhet
- extrakt
- finansiella
- Fokus
- hash
- Hälsa
- Hur ser din drömresa ut
- How To
- HTTPS
- IAM
- Identitet
- industrier
- iot
- iot enheter
- isolering
- IT
- Nyckel
- senaste
- lanserar
- ledande
- inlärning
- Bibliotek
- linje
- läsa in
- lokal
- Lång
- maskininlärning
- karta
- medicinsk
- nät
- beställa
- Övriga
- patienter
- Betala
- prestanda
- plattform
- pods
- policy
- kraft
- privat
- producent
- Produktion
- projektet
- område
- realtid
- Resurser
- REST
- Resultat
- Körning
- rinnande
- Skala
- säkerhet
- Server
- Tjänster
- in
- Dela
- So
- spridning
- igång
- Ange
- lagra
- lagrar
- streaming
- TLS
- token
- ämnen
- spår
- Transaktioner
- transitering
- Uppdateringar
- fordon
- inom
- fungerar
- skrivning