Amazon DVA-C02: Messaging, Streaming & Event-driven architecturen (SNS, SQS, Kinesis, EventBridge, Step Functions) — Studiegids
Onderdeel van de AWS Developer Associate DVA-C02 — Studiegids. Oefen met geverifieerde antwoorden in het Amazon-examencentrum, of doe getimede oefentests op ExamRoll.io.
De juiste messaging- en streaming-primitive kiezen
De keuze tussen SNS, SQS (standard vs FIFO), Kinesis, EventBridge en Step Functions begint bij het communicatiepatroon: pub/sub, point-to-point, geordende streaming, event bus-routing of workflow-orkestratie. SNS is een fan-out pub/sub-publisher; gebruik Publish (SDK-call: Publish/PublishBatch) en abonneer SQS-endpoints, Lambda, HTTP/S of mobiele endpoints. SQS is een duurzame point-to-point buffer met ReceiveMessage/DeleteMessage-semantiek; maak queues aan met CreateQueue en attributen zoals VisibilityTimeout, ReceiveMessageWaitTimeSeconds (long polling), MessageRetentionPeriod en redrive policies die naar een DLQ verwijzen. FIFO-queues vereisen FifoQueue=true en gebruiken MessageGroupId plus MessageDeduplicationId (of ContentBasedDeduplication) voor ordening en deduplicatie. Kinesis Data Streams is geordende, op shards gebaseerde streaming; producers roepen PutRecord/PutRecords aan en consumers gebruiken GetShardIterator (TRIM_HORIZON, LATEST, AT_SEQUENCE_NUMBER) en vervolgens GetRecords. Kinesis Firehose beheert de aflevering naar S3/Redshift/OpenSearch en biedt BufferingHints (SizeInMBs, IntervalInSeconds) en Lambda-transformaties. EventBridge routeert events met PutEvents en op regels gebaseerde filtering, en ondersteunt een schema registry en cross-account buses. Step Functions orkestreert complexe flows; StartExecution (Standard) of StartSyncExecution voor synchrone Express-patronen, met Task-integraties zoals arn:aws:states:::lambda:invoke. Overweeg deze afwegingen wanneer throughput, ordening, aflevergaranties, retentie en orkestratiebehoeften met elkaar in conflict zijn.
- SNS: high-throughput fan-out, geen ordening, Publish/Subscribe, gebruik MessageAttributes voor routing.
- SQS Standard: at-least-once, best-effort ordening, long polling, goedkoper voor ontkoppeling.
- SQS FIFO: exactly-once ordening binnen een MessageGroupId, te gebruiken voor strikte ordening en deduplicatie.
- Kinesis Data Streams: geordend per shard, high-throughput streaming, PutRecord/PutRecords, schalen van shards vereist.
- Kinesis Firehose: beheerde aflevering en buffering, ondersteunt server-side encryptie en Lambda-transformaties.
- EventBridge: event bus met routeringsregels, schema registry, archive & replay, PutEvents API.
- Step Functions: stateful orkestratie, retries/Catch, afwegingen tussen Standard en Express voor duurzaamheid en throughput.
SQS- en SNS-patronen, deduplicatie en schalen van consumers
Wanneer je duurzame ontkoppeling nodig hebt, is SQS de aangewezen keuze; implementeer SendMessage/SendMessageBatch voor producers en gebruik ReceiveMessage met WaitTimeSeconds om long polling in te schakelen en het aantal lege ontvangsten te verminderen. Voor strikte ordening en deduplicatie, maak een FIFO-queue aan met CreateQueue (FifoQueue=true) en stel een MessageGroupId in voor geordende partities; gebruik MessageDeduplicationId of schakel ContentBasedDeduplication in zodat identieke payloads binnen het deduplicatievenster worden onderdrukt. Standard queues kunnen duplicaten afleveren — maak consumers daarom idempotent via conditionele schrijfacties naar de database (DynamoDB PutItem met ConditionExpression attribute_not_exists(pk)) of via unique constraints en upserts binnen transacties in RDS. Configureer redrive policies om falende berichten na maxReceiveCount naar een DLQ te routeren; monitor ApproximateNumberOfMessages en ApproximateNumberOfMessagesNotVisible via GetQueueAttributes. Lambda-integraties gebruiken CreateEventSourceMapping voor SQS: stel BatchSize en MaximumBatchingWindowInSeconds in, en schakel FunctionResponseTypes = [“ReportBatchItemFailures”] in om semantiek voor gedeeltelijke batch-responses te gebruiken en herverwerking van succesvolle records te voorkomen. Let op de semantiek van FIFO Lambda: de ordening van message groups dwingt single-threaded verwerking per MessageGroupId af, wat de concurrency per groep beperkt; schaal op door te partitioneren in veel group ID’s of door parallelle consumers te gebruiken met SNS naar meerdere queues. Houd ook rekening met de visibility timeout: stel ChangeMessageVisibility in wanneer de verwerking langer duurt, anders riskeer je dubbele verwerking.
Kinesis Data Streams en Firehose: ordening, retentie en omgaan met back-pressure
Kinesis Data Streams bieden ordening per shard en duurzame retentie voor streaming use cases. Producers roepen PutRecord of PutRecords (batch) aan met een PartitionKey die naar een shard mapt; consumers roepen GetShardIterator en GetRecords aan en slaan vervolgens de offsets op (checkpointing) met behulp van de KCL (Kinesis Client Library) of een custom DynamoDB-tabel voor checkpoints. De standaardretentie is 24 uur (aanpasbaar naar langere periodes via de stream-configuratie, en met ’extended retention’-features waar beschikbaar); plan het aantal shards met UpdateShardCount om aan te sluiten bij de write throughput en de parallelliteit van de readers. Het schalen van consumers is beperkt: een enkele Lambda event source mapping koppelt één shard aan één Lambda concurrency. Verhoog dus het aantal shards om de consumer concurrency te verhogen, of schakel enhanced fan-out in om elke consumer zijn eigen 2 MB/sec pipe en onafhankelijke schaling te geven via de SubscribeToShard API (consumer-registratie). Gebruik PutRecords voor efficiënte batching; back-pressure ontstaat wanneer consumers achterlopen (monitor GetRecords.IteratorAgeMilliseconds). Om pieken op te vangen, buffer je op Kinesis of plaats je er een SQS-queue voor, gebruik je producer-retries met exponential backoff en pas je stream-level encryptie toe met KMS voor PII. Kinesis Data Firehose vereenvoudigt de aflevering: configureer BufferingHints (SizeInMBs, IntervalInSeconds), CompressionFormat en een Lambda-datatransformatie. Firehose handelt retries/backoff naar bestemmingen af en kan mislukte records wegschrijven naar een back-up S3-bucket. Een veelvoorkomende valkuil is het onderprovisioneren van shards: consumers krijgen geen data (starvation) en de latency piekt; meet en schaal proactief.
EventBridge en Step Functions voor routering en orkestratie
EventBridge blinkt uit in schemagestuurde event-routering en integraties over accounts en met event-partners heen, door
undefined
te gebruiken om events te injecteren en
undefined
/
undefined
om te routeren naar SQS, Lambda, Kinesis, Step Functions of HTTP-eindpunten. EventBridge gebruikt event-patronen voor filtering en ondersteunt archivering en replay om de staat opnieuw op te bouwen. Gebruik dead-letter queues voor rules (Target met
undefined
of
undefined
) en wees je ervan bewust dat EventBridge retries met exponentiële backoff biedt, gevolgd door een DLQ bij een fout. Kies voor orkestratie Step Functions: Standard state machines voor langlopende, duurzame workflows met een uitvoeringsgeschiedenis en ingebouwde retries/Catch, en Express voor kortstondige workflows met hoge doorvoersnelheid, lagere kosten en best-effort uitvoering. Gebruik Task-integraties met service-integraties (
undefined
of
undefined
) en callback-patronen met “waitForTaskToken” om asynchrone externe goedkeuringen te implementeren. Implementeer retries en Catch met exponentiële backoff en gebruik
undefined
voor langdurige taken. Gebruik de Map state om grote collecties te parallelliseren, maar let op concurrency en downstream throttles. Een veelvoorkomende valkuil is het kiezen van Express voor workflows die een exact-once, duurzame geschiedenis vereisen — kies Standard voor auditeerbaarheid. Zorg ook voor idempotentie in taken die door Step Functions worden aangeroepen door een idempotentie-token mee te geven en de doelservices uniciteit te laten afdwingen op het moment van schrijven.
Praktijkprobleem: Gebruiksscenario
Scenario: StreamlyGames beheert een wereldwijde gaming-backend in een AWS-omgeving met meerdere accounts. Spelers uploaden gameplay-clips van 10 MB naar S3; een verwerkingspipeline moet video’s transcoderen, ML-analyses uitvoeren en de resultaten wegschrijven naar Aurora Serverless met een geordende, gededupliceerde verwerking en schaalbare consumers.
Uitdaging: Zorg ervoor dat elk geüpload bestand een exact-once verwerking triggert in de juiste volgorde per speler, verwerk pieken zonder events te verliezen en schaal consumers voor ML-inferentie terwijl dubbele schrijfacties naar de database worden voorkomen.
Aanbevolen Aanpak:
- Maak een S3 event-notificatie aan om object-created events te publiceren naar een EventBridge custom bus (
undefined
) en ook naar een SQS FIFO-wachtrij (
undefined
met
undefined
) met
undefined
als
undefined
en een
undefined
gebaseerd op de S3 ETag. 2. Configureer een Lambda-consumer met een SQS event source mapping (
undefined
) met
undefined
,
undefined
, en stel
undefined
in op een waarde hoger dan de maximale verwerkingstijd; gebruik
undefined
bij het aanroepen van ML-API’s van derden. 3. Lambda voert idempotente schrijfacties naar de database uit naar Aurora met een deterministische idempotentiesleutel (
undefined
of een unique constraint) en checkpoint de voortgang; gebruik voor langdurige ML-aanroepen asynchrone Step Functions met task-tokens (
undefined
) of Step Functions Express voor hoge doorvoersnelheid. 4. Om de inferentie te schalen, schrijf tussentijdse events naar Kinesis Data Streams per shard per regio voor consumers met hoge doorvoersnelheid en schakel enhanced fan-out consumers (
undefined
) in voor toegewijde ML-worker-vloten; monitor
undefined
en
undefined
om te schalen.
Redenering: Gebruik SQS FIFO om de volgorde per speler en deduplicatie bij inname te garanderen, idempotente schrijfacties naar de database om exact-once semantiek af te dwingen, en Kinesis plus enhanced fan-out of Step Functions om piekbelaste ML-verwerking met hoge doorvoersnelheid aan te kunnen, terwijl de consumers ontkoppeld en schaalbaar blijven.
Oefen deze vragen → · Getimede oefening op ExamRoll.io →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Slaag voor je examen →