Streamingdata

Toepassingen ontwikkelen op AWS

Ricardo Sueiras

Principal Technologist

Basis van streamingdata

 

streaming-gegevens

  • Records worden continu verwerkt zodra ze binnenkomen.
  • Producers schrijven naar een stream.
  • Consumers lezen onafhankelijk en parallel.
  • Vangt piekverkeer op zonder te wachten op batchjobs.
Toepassingen ontwikkelen op AWS

Waaruit bestaat streamingdata?

 

onderdelen van een streamingsysteem

  • Producers: applicaties die records uitsturen.
  • Streams: duurzame, geordende buffers die producers loskoppelen van consumers.
  • Consumers: applicaties die records lezen en verwerken.
  • Storage en retentie: bepaalt hoelang records beschikbaar blijven voor replay.
Toepassingen ontwikkelen op AWS

Shards

 

shards

 

  • Shards zijn eenheden voor throughput en parallelle verwerking.
  • Partitiesleutels verdelen records over shards.
  • Ordening is alleen binnen een shard gegarandeerd.
  • Consumers gebruiken checkpointing om voortgang te volgen en te herstellen na fouten.
Toepassingen ontwikkelen op AWS

Door AWS beheerde services voor streamingdata

  • Amazon Kinesis Data Streams.
  • Amazon Data Firehose.
  • Fundamentele bouwstenen voor streamingdata-applicaties.

 

aws-services

Toepassingen ontwikkelen op AWS

Kinesis Data Streams

  • Streaming met lage latentie.
  • Configureerbare retentie: 24 uur (standaard) tot 365 dagen.
  • Duurzame, opnieuw af te spelen streams.
  • Meerdere consumers kunnen parallel lezen.
  • Ontwikkelaars schalen met shards.

 

kinesis data streams

Toepassingen ontwikkelen op AWS

Wanneer gebruik je Kinesis Data Streams

  • Kies dit bij realtimelatentie.
  • Je wilt records kunnen replayen.
  • Je hebt meerdere, onafhankelijke consumers.
  • Je hebt eigen transformatielogica nodig.

 

kinesis data streams

Toepassingen ontwikkelen op AWS

Records schrijven

 

clientbibliotheken

  • Partitiesleutels bepalen shard-toewijzing en volgorde.
  • PutRecords bundelt tot 500 records of 5 MB per request.
  • Fouten worden per record gemeld.
  • FailedRecordCount helpt mislukte records vinden.
Toepassingen ontwikkelen op AWS

Records consumeren: classic

 

classic

 

  • Consumers pollen on demand via de Kinesis API.
  • Schrijflimieten: 1 MB/sec of 1.000 records/sec.
  • Leeslimieten: 2 MB/sec of 5 GetRecords-aanroepen/sec.
Toepassingen ontwikkelen op AWS

Records consumeren: streamstart

 

stream-start

  • Consumers geven aan waar in de stream ze beginnen met lezen.
  • TRIM_HORIZON: oudste beschikbare record in de shard.
  • LATEST: het eerstvolgende nieuwe record.
  • AT_SEQUENCE_NUMBER of AFTER_SEQUENCE_NUMBER: vanaf een specifiek sequencenummer.
  • AT_TIMESTAMP: op of na een opgegeven timestamp.
Toepassingen ontwikkelen op AWS

Records consumeren: enhanced fan-out

  • Elke geregistreerde consumer krijgt 2 MB/sec per shard.
  • Records worden via HTTP/2 push geleverd.
  • Gebruik dit als meerdere onafhankelijke consumers lage latentie nodig hebben.
  • En hoge throughput naar dezelfde stream.

 

patroon - enhanced fan-out

Toepassingen ontwikkelen op AWS

Lambda event source mapping

  • Lambda polt Kinesis en roept aan in batches.
  • BatchSize en MaximumBatchingWindow bepalen batchvorm.
  • ParallelizationFactor: gelijktijdige aanroepen per shard.
  • BisectBatchOnFunctionError: splitst een falende batch om poison pills te isoleren.
  • ReportBatchItemFailures: voorkomt retries voor al geslaagde records.
  • OnFailure: stuurt onbruikbare batches naar een SQS- of SNS-DLQ.

 

lambda event sourcing

Toepassingen ontwikkelen op AWS

Data Firehose

  • Beheerde service die streamingdata naar bestemmingen levert.
  • Doelen zijn onder meer Amazon S3, Redshift en HTTP-eindpunten.
  • Ondersteunt buffering, formaatconversie en Lambda-transformaties.
  • Hogere latentie, gebufferd van seconden tot minuten.
  • Geen replay of langdurige retentie.
  • Ideaal om data simpelweg naar een bestemming te krijgen.

 

data firehose

Toepassingen ontwikkelen op AWS

Patroon: hot-cold

 

patroon - hot/cold

 

  • Hot-coldpatroon combineert Data Streams en Data Firehose.
  • Data Streams biedt realtimeverwerking voor producers.
  • Firehose archiveert records van dezelfde bron in S3.
Toepassingen ontwikkelen op AWS

Kinesis vs SQS

 

sqs vs kinesis

 

  • Gebruik Kinesis voor geordende, opnieuw af te spelen streams met meerdere consumers.
  • Kinesis past bij tijdreeks- en geordende data.
  • Gebruik SQS voor taaksverdeling.
Toepassingen ontwikkelen op AWS

Streamingdata schalen

 

schalen

  • Datastreams zijn opgedeeld in shards.
  • Partitiesleutels sturen records naar een specifieke shard.
  • Dezelfde sleutel komt altijd op dezelfde shard: volgorde blijft behouden.
  • Oneven verdeling leidt tot hot shards.
  • Beperk dit met sleutels met hoge cardinaliteit.
  • Reshard om op of af te schalen.
Toepassingen ontwikkelen op AWS

Capaciteitsmodi: provisioned

  • Er zijn twee capaciteitsmodi.
  • Provisioned-modus gebruikt een vast aantal shards, handmatig beheerd.
  • Biedt voorspelbare kosten en capaciteit.
  • Vereist monitoring om throttling en overprovisioning te voorkomen.

 

capaciteitsmodi

Toepassingen ontwikkelen op AWS

Capaciteitsmodi: on-demand

  • On-demand-modus schaalt automatisch op basis van verkeer.
  • Geen handmatig shardbeheer.
  • Vereenvoudigt operations bij onvoorspelbare workloads.
  • Hogere kosten bij aanhoudend zwaar verkeer.

 

capaciteitsmodi

Toepassingen ontwikkelen op AWS

Kinesis Producer Library (KPL)

  • AWS-bibliotheken maken schaalbare producers en consumers eenvoudiger.
  • De Kinesis Producer Library (KPL) bundelt en aggregeert records.
  • Comprimeert ook records en probeert opnieuw bij fouten.
  • Buffert asynchroon om producent-throughput te maximaliseren.

 

clientbibliotheken

Toepassingen ontwikkelen op AWS

Kinesis Consumer Library (KCL)

 

clientbibliotheken

 

  • De Kinesis Consumer Library (KCL) regelt shardcoördinatie.
  • Beheert workerleasing en checkpointing.
  • Status wordt opgeslagen in een DynamoDB-tabel.
  • Consumers gebruiken die status om te bepalen waar ze hervatten.
Toepassingen ontwikkelen op AWS

Fouten afhandelen: idempotentie

 

fouten afhandelen

 

  • Kinesis levert at-least-once, dus duplicaten zijn mogelijk.
  • Ontwerp consumers idempotent.
  • Dedupliceer met het sequencenummer of een business key in DynamoDB.
  • Consumers kunnen bewaarde records herlezen vanaf een sequencenummer of timestamp.
Toepassingen ontwikkelen op AWS

Fouten afhandelen: throughput-fouten

 

fouten afhandelen

 

  • ProvisionedThroughputExceededException duidt op throttling.
  • Los op door het aantal shards te verhogen.
  • Verbeter de verdeling van partitiesleutels.
  • Retry met backoff.
  • Schakel van capaciteitsmodus.
Toepassingen ontwikkelen op AWS
  • Volg IncomingBytes en IncomingRecords in CloudWatch.
  • Let op WriteProvisionedThroughputExceeded voor throttling.
  • Consumer lag ontstaat als je langzamer consumeert dan produceert.
  • Volg GetRecords.IteratorAgeMilliseconds: hoge leeftijd duidt op lag.

 

loggen en monitoren

Toepassingen ontwikkelen op AWS

Beveiliging

  • Server-side encryptie in rust met AWS KMS.
  • Encryptie tijdens transport met TLS.
  • IAM-beleid regelt toegang.

 

beveiliging

Toepassingen ontwikkelen op AWS

Laten we oefenen!

Toepassingen ontwikkelen op AWS

Preparing Video For Download...