Strömmande data

Utveckla applikationer på AWS

Ricardo Sueiras

Principal Technologist

Grunderna i strömmande data

 

streaming-data

  • Poster bearbetas löpande när de anländer.
  • Producenter skriver till en ström.
  • Konsumenter läser oberoende av varandra och parallellt.
  • Hanterar trafikspikar utan att vänta på batchjobb.
Utveckla applikationer på AWS

Vad består strömmande data av?

 

streaming system components

  • Producenter: applikationer som sänder ut poster.
  • Strömmar: beständiga, ordnade buffertar som frikopplar producenter från konsumenter.
  • Konsumenter: applikationer som läser och bearbetar poster.
  • Lagring och kvarhållning: definierar hur länge poster är tillgängliga för uppspelning.
Utveckla applikationer på AWS

Shards

 

shards

 

  • Shards är enheter för genomströmning och parallell bearbetning.
  • Partitionsnycklar fördelar poster över shards.
  • Ordning garanteras bara inom en shard.
  • Konsumenter använder check-pointing för att spåra framsteg och återhämta sig vid fel.
Utveckla applikationer på AWS

AWS-hanterade tjänster för strömmande data

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Grundläggande byggstenar för strömningsdataapplikationer.

 

aws services

Utveckla applikationer på AWS

Kinesis Data Streams

  • Strömning med låg latens.
  • Konfigurerbar kvarhållning: 24 timmar (standard) upp till 365 dagar.
  • Beständiga, uppspelningsbara strömmar.
  • Flera konsumenter kan läsa parallellt.
  • Utvecklare hanterar skalning med shards.

 

kinesis data streams

Utveckla applikationer på AWS

När ska du använda Kinesis Data Streams?

  • Välj det när du behöver realtidslatens.
  • Du behöver kunna spela upp poster på nytt.
  • Du har flera oberoende konsumenter.
  • Du behöver anpassad transformationslogik.

 

kinesis data streams

Utveckla applikationer på AWS

Skriva poster

 

client libraries

  • Partitionsnycklar styr shard-placering och ordning.
  • PutRecords batchar upp till 500 poster eller 5 MB per förfrågan.
  • Fel rapporteras per post.
  • FailedRecordCount hjälper dig identifiera misslyckade poster.
Utveckla applikationer på AWS

Konsumera poster: klassisk metod

 

classic

 

  • Konsumenter pollar Kinesis API vid behov.
  • Skrivgränser: 1 MB/sek eller 1 000 poster/sek.
  • Läsgränser: 2 MB/sek eller 5 GetRecords-anrop/sek.
Utveckla applikationer på AWS

Konsumera poster: strömstart

 

stream-start

  • Konsumenter anger var i strömmen de ska börja läsa.
  • TRIM_HORIZON: äldsta tillgängliga post i sharden.
  • LATEST: nästa nya post.
  • AT_SEQUENCE_NUMBER eller AFTER_SEQUENCE_NUMBER: från ett specifikt sekvensnummer.
  • AT_TIMESTAMP: vid eller efter en angiven tidsstämpel.
Utveckla applikationer på AWS

Konsumera poster: enhanced fan-out

  • Varje registrerad konsument får dedikerade 2 MB/sek per shard.
  • Poster levereras via HTTP/2-push.
  • Använd det när flera oberoende konsumenter behöver låg latens.
  • De behöver också hög genomströmning till samma ström.

 

pattern - enhanced fan-out

Utveckla applikationer på AWS

Lambda event source mapping

  • Lambda pollar Kinesis och anropar i batchar.
  • BatchSize och MaximumBatchingWindow styr batchens form.
  • ParallelizationFactor: parallella anrop per shard.
  • BisectBatchOnFunctionError: delar en felaktig batch för att isolera problemposter.
  • ReportBatchItemFailures: undviker omförsök för poster som redan lyckades.
  • OnFailure: skickar obearbetningsbara batchar till en SQS- eller SNS-DLQ.

 

lambda event sourcing

Utveckla applikationer på AWS

Data Firehose

  • Hanterad tjänst som levererar strömmande data till destinationer.
  • Mål inkluderar Amazon S3, Redshift och HTTP-slutpunkter.
  • Stöder buffring, formatkonvertering och Lambda-transformationer.
  • Högre latens, buffrad i sekunder till minuter.
  • Ingen uppspelning eller långsiktig kvarhållning.
  • Utmärkt för att enkelt skicka data till en destination.

 

data firehose

Utveckla applikationer på AWS

Mönster: hot-cold

 

pattern - hold/cold

 

  • Hot-cold-mönstret kombinerar Data Streams och Data Firehose.
  • Data Streams möjliggör realtidsbearbetning för producenter.
  • Firehose arkiverar poster från samma källa i S3.
Utveckla applikationer på AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Använd Kinesis för ordnade, uppspelningsbara strömmar med flera konsumenter.
  • Kinesis passar tidsseriedata och ordnad data.
  • Använd SQS för uppgiftsdistribution.
Utveckla applikationer på AWS

Skala strömmande data

 

scaling

  • Dataströmmar delas upp i shards.
  • Partitionsnycklar dirigerar poster till en specifik shard.
  • Samma nyckel hamnar alltid på samma shard, vilket bevarar ordningen.
  • Ojämna partitionsnycklar leder till heta shards.
  • Motverka detta med nycklar med hög kardinalitet.
  • Omsharda för att skala ut eller in.
Utveckla applikationer på AWS

Kapacitetslägen: provisionerat

  • Det finns två kapacitetslägen.
  • Provisionerat läge använder ett fast antal shards som hanteras manuellt.
  • Det ger förutsägbar kostnad och kapacitet.
  • Kräver övervakning för att undvika begränsning och överprovisionering.

 

capacity modes

Utveckla applikationer på AWS

Kapacitetslägen: on-demand

  • On-demand-läge skalas automatiskt baserat på trafik.
  • Ingen manuell shard-hantering.
  • Förenklar driften för oförutsägbara arbetsbelastningar.
  • Högre kostnad vid ihållande hög trafik.

 

capacity modes

Utveckla applikationer på AWS

Kinesis Producer Library (KPL)

  • AWS-bibliotek förenklar skapandet av skalbara producenter och konsumenter.
  • Kinesis Producer Library (KPL) batchar och aggregerar poster.
  • Den komprimerar också poster och försöker igen vid fel.
  • Buffrar asynkront för att maximera producentens genomströmning.

 

client libraries

Utveckla applikationer på AWS

Kinesis Consumer Library (KCL)

 

client libraries

 

  • Kinesis Consumer Library (KCL) hanterar shard-koordinering.
  • Den sköter worker-leasing och check-pointing.
  • Tillstånd lagras i en DynamoDB-tabell.
  • Konsumenter använder det tillståndet för att ta reda på var de ska återuppta.
Utveckla applikationer på AWS

Felhantering: idempotens

 

handling failures

 

  • Kinesis levererar minst en gång, så dubbletter kan förekomma.
  • Designa konsumenter att vara idempotenta.
  • Deduplicera med hjälp av sekvensnumret eller en affärsnyckel i DynamoDB.
  • Konsumenter kan läsa om kvarhållna poster från ett sekvensnummer eller en tidsstämpel.
Utveckla applikationer på AWS

Felhantering: genomströmningsfel

 

handling failures

 

  • ProvisionedThroughputExceededException signalerar begränsning.
  • Åtgärda det genom att öka antalet shards.
  • Förbättra partitionsnyckelfördelningen.
  • Försök igen med backoff.
  • Byt kapacitetsläge.
Utveckla applikationer på AWS
  • Spåra IncomingBytes och IncomingRecords i CloudWatch.
  • Bevaka WriteProvisionedThroughputExceeded för begränsning.
  • Konsumentfördröjning uppstår när konsumtionen är långsammare än produktionen.
  • Spåra GetRecords.IteratorAgeMilliseconds: hög ålder indikerar fördröjning.

 

monitoring

Utveckla applikationer på AWS

Säkerhet

  • Serversideskryptering i vila med AWS KMS.
  • Kryptering under överföring med TLS.
  • IAM-policyer styr åtkomst.

 

security

Utveckla applikationer på AWS

Nu kör vi en övning!

Utveckla applikationer på AWS

Preparing Video For Download...