KAFKA STREAMS
FROM USE CASE TO PRODUCTION
KAFKA STREAMS CLOUD MONITORING AWS CLOUD MONITORING AWS APP - - PowerPoint PPT Presentation
FROM USE CASE TO PRODUCTION KAFKA STREAMS CLOUD MONITORING AWS CLOUD MONITORING AWS APP CLOUD MONITORING AWS HTTP APP CLOUD MONITORING AWS METRICS NRDB HTTP APP CLOUD MONITORING SCHDLR JOBS AWS NRDB METRICS HTTP WORKER CLOUD
FROM USE CASE TO PRODUCTION
CLOUD MONITORING
AWS
CLOUD MONITORING
AWS APP
CLOUD MONITORING
AWS HTTP APP
CLOUD MONITORING
AWS NRDB METRICS HTTP APP
CLOUD MONITORING
WORKER SCHDLR JOBS AWS METRICS HTTP NRDB
CLOUD MONITORING
AWS SCHDLR JOBS WORKER WORKER WORKER WORKER WORKER WORKER METRICS HTTP NRDB
CLOUD MONITORING
AWS JOBS WORKER WORKER WORKER WORKER WORKER WORKER SCHDLR SCHDLR SCHDLR METRICS HTTP NRDB
CLOUD MONITORING
AWS METRICS HTTP SCHDLR JOBS WORKER WORKER WORKER WORKER WORKER WORKER SCHDLR SCHDLR ZK NRDB
CLOUD MONITORING
▸ horizontally scalable ▸ stateless ▸ failsafe ▸ a few Kafka topics
AGGREGATION
WHAT METRICS?
APP METRICS NRDB
WHAT METRICS?
APP METRICS NRDB
{ "id": 1, “timestamp": 5, "max.cpu": 10 }
WHAT METRICS?
APP METRICS NRDB
{ "id": 1, “timestamp": 5, "max.cpu": 10 }
WHAT METRICS?
APP METRICS NRDB
{ "id": 1, “timestamp": 5, "max.cpu": 10 }
WHAT METRICS?
APP METRICS NRDB
{ "id": 1, “timestamp": 0, "max.cpu": 10 }
WHAT METRICS?
APP METRICS NRDB
{ "id": 1, “timestamp": 0, "max.cpu": 10 } { "id": 1, "timestamp": 60, "max.cpu": 20 }
WHAT METRICS?
APP METRICS NRDB
{ "id": 1, “timestamp": 0, "max.cpu": 10 } { "id": 1, "timestamp": 60, "max.cpu": 20 } { "id": 1, "timestamp": 120, "max.cpu": 5 }
AGGREGATION
{ "id": 1, “timestamp": 0, "max.cpu": 10 } { "id": 1, "timestamp": 60, "max.cpu": 20 } { "id": 1, "timestamp": 120, "max.cpu": 5 }
60 120 T
AGGREGATION
{ "id": 1, "timestamp": 3600, "max.cpu": 20 }
3600 T
AGGREGATION
AGGREGATION
APP METRICS 1M NRDB
AGGREGATION
APP METRICS 1M NRDB METRICS 1H APP
AGGREGATION
▸ batch? ▸ local storage? ▸ summon Redis?
AGGREGATION
✓ exactly once ✓ stateful (local state with failsafe mechanism) ? own cluster vs managed cluster ? framework vs library
AGGREGATION
AGGREGATION
NRDB APP METRICS 1H
AGGREGATION
NRDB APP KAFKA CLIENT LIBRARY METRICS 1H
AGGREGATION
METRICS 1H NRDB APP + DSL KSTREAMS LIBRARY KAFKA CLIENT LIBRARY
AGGREGATION
▸ same deployment mechanism ▸ no new external dependencies
AGGREGATION
AGGREGATION
NRDB METRICS 1H APP METRICS 1M
AGGREGATION
NRDB METRICS 1H APP METRICS 1M
AGGREGATION
NRDB METRICS 1H APP METRICS 1M CHANGE-LOG
AGGREGATION
NRDB METRICS 1H APP METRICS 1M CHANGE-LOG
{ "id": 1, "timestamp": 0, "max.cpu": 10 } { "id": 1, "max.cpu": 10 }
AGGREGATION
NRDB METRICS 1H APP METRICS 1M CHANGE-LOG
{ "id": 1, "timestamp": 120, "max.cpu": 20 } { "id": 1, "max.cpu": 20 }
AGGREGATION
NRDB METRICS 1H APP METRICS 1M CHANGE-LOG
{ "id": 1, "timestamp": 3600, "max.cpu": 20 } { "id": 1, "max.cpu": 20 }
AGGREGATION
NRDB METRICS 1H METRICS 1M METRICS 1M METRICS 1M APP P1 PO P2 CHANGE-LOG
AGGREGATION
NRDB METRICS 1H METRICS 1M METRICS 1M METRICS 1M APP APP APP PO P1 P2 P1 PO P2 CHANGE-LOG
CHANGE-LOG CHANGE-LOG
AGGREGATION
NRDB METRICS 1H METRICS 1M METRICS 1M METRICS 1M APP APP APP PO P1 P2 P1 PO P2 CHANGE-LOG P1 PO P2 PO P1 P2
CHANGE-LOG CHANGE-LOG
AGGREGATION
NRDB METRICS 1H METRICS 1M METRICS 1M METRICS 1M APP APP APP PO P1 P2 P1 PO P2 CHANGE-LOG P1 PO P2 CONSUMER GROUP PO P1 P2
AGGREGATION
NRDB METRICS 1H METRICS 1M METRICS 1M METRICS 1M APP APP APP PO P1 P2 P1 PO P2 P1 PO P2 PO P1 P2 CONSUMER GROUP CHANGE-LOG CHANGE-LOG CHANGE-LOG
AGGREGATION
NRDB METRICS 1H METRICS 1M METRICS 1M METRICS 1M APP APP PO P1 P2 P1 PO P2 P1 PO P2 P1 CONSUMER GROUP PO P2 CHANGE-LOG CHANGE-LOG CHANGE-LOG
AGGREGATION
▸ key-value storage for stateful computations, failsafe ▸ time windows calculation ▸ scalable with number of partitions ▸ a bunch of new Kafka topics
AGGREGATION
ENRICHMENT
AWS NRDB HTTP APP METRICS
{ "id": 1, "timestamp": 5, "max.cpu": 10 }
ENRICHMENT
AWS HTTP APP METADATA HTTP APP
{ "id": 1, "name": "host-1", "region": "eu" }
NRDB METRICS
{ "id": 1, "timestamp": 5, "max.cpu": 10 }
ENRICHMENT
AWS APP APP NRDB HTTP METADATA HTTP
{ "id": 1, "name": "host-1", "region": "eu" }
METRICS
{ "id": 1, "timestamp": 5, "max.cpu": 10 }
ENRICHMENT
AWS APP APP NRDB HTTP METADATA HTTP
{ "id": 1, "name": "host-1", "region": "eu" }
METRICS
{ "id": 1, "timestamp": 5, "max.cpu": 10 }
ENRICHMENT
AWS APP APP NRDB HTTP METADATA HTTP
{ "id": 1, "name": "host-1", "region": "eu" }
METRICS
{ "id": 1, "timestamp": 5, "max.cpu": 10 }
ENRICHMENT
NRDB M&M APP
{ "id": 1, "name": "host-1", "region": "eu" } { "id": 1, "timestamp": 5, "max.cpu": 10 }
METADATA METRICS
ENRICHMENT
APP M&M
{ "id": 1, "timestamp": 5 "max.cpu": 10 "name": "host-1", "region": "eu" }
NRDB
{ "id": 1, "name": "host-1", "region": "eu" } { "id": 1, "timestamp": 5, "max.cpu": 10 }
METADATA METRICS
ENRICHMENT
APP M&M
{ "id": 1, "timestamp": 5 "max.cpu": 10 "name": "host-1", "region": "eu" }
NRDB
{ "id": 1, "name": "host-1", "region": "eu" } { "id": 1, "timestamp": 5, "max.cpu": 10 }
METADATA METRICS
ENRICHMENT
APP M&M METADATA NRDB METRICS METADATA
ENRICHMENT
METADATA APP METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 M&M NRDB METADATA
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 METADATA METADATA PO P1 M&M NRDB METADATA
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 METADATA METADATA PO P1 M&M NRDB METADATA
K:1, V:42 K:1, V:eu
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 PO P1 P2 PO P1 METADATA METADATA M&M NRDB METADATA
K:1, V:42 K:1, V:eu
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 PO P1 P2 PO P1 METADATA METADATA M&M NRDB METADATA
K:1, V:42 K:1, V:eu
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 PO P1 P2 PO P1 METADATA METADATA M&M NRDB METADATA
K:1, V:42 K:1, V:eu
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 PO P1 METADATA METADATA M&M NRDB METADATA
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 P1 PO P2 P1 PO P2 P1 PO P2 PO P1 METADATA METADATA M&M NRDB METADATA
ENRICHMENT
ENRICHMENT
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS P1 PO P2 P1 PO P2 P2 P1 PO P2 P1 PO P2 P1 PO P2 PO P1 METADATA METADATA M&M NRDB METADATA
METADATA
ENRICHMENT
KSTREAMS APP KSTREAMS APP KSTREAMS APP METADATA METADATA METADATA METRICS METRICS METRICS METADATA P2 P2 P0 P1 PO P1 P1 PO P2 P1 PO P2 M&M NRDB METADATA
K:1, V:42 K:1, V:eu
METADATA
ENRICHMENT
KSTREAMS APP KSTREAMS APP KSTREAMS APP METADATA METADATA METADATA METRICS METRICS METRICS METADATA P2 P2 P0 P1 PO P1 P1 PO P2 P1 PO P2 M&M NRDB METADATA
K:1, V:42 K:1, V:eu
METADATA
ENRICHMENT
KSTREAMS APP KSTREAMS APP KSTREAMS APP METADATA METADATA METADATA METRICS METRICS METRICS METADATA P2 P2 P0 P1 PO P1 P1 PO P2 P1 PO P2 M&M NRDB METADATA
K:1, V:42 K:1, V:eu
ENRICHMENT
▸ same partitioning key ▸ same number of partitions ▸ same hash function of producer
ENRICHMENT
METRICS METRICS METRICS JAVA APP GO APP METADATA METADATA METADATA P1 P2 P1 PO P2 PO
ENRICHMENT
METRICS JAVA APP GO APP METADATA P2 PO
K:1, V:42 K:1, V:eu
ENRICHMENT
METRICS JAVA APP GO APP METADATA METADATA KSTREAMS APP P2 PO P0 PO
K:1, V:42 K:1, V:eu
ENRICHMENT
METRICS JAVA APP GO APP METADATA METADATA KSTREAMS APP P2 PO P0 PO
K:1, V:42 K:1, V:eu
ENRICHMENT
METRICS JAVA APP GO APP METADATA METADATA KSTREAMS APP FNV-1A MURMUR2 P2 PO P0 PO
ENRICHMENT
METRICS JAVA APP GO APP METADATA METADATA METADATA METRICS METRICS METADATA KSTREAMS APP P1 PO P2 PO P0’ P1 PO P2
K:1, V:42 K:1, V:eu
P1’ P0’ P2’ METADATA’ REPARTITION METADATA’ METADATA’
K:1, V:eu
ENRICHMENT
METRICS JAVA APP GO APP METADATA METADATA METADATA METRICS METRICS METADATA KSTREAMS APP P1 PO P2 PO P0’ P1 PO P2 METADATA’ P1’ P0’ P2’ REPARTITION METADATA’ METADATA’
K:1, V:42 K:1, V:eu K:1, V:eu
▸ enrichment at scale thanks to co-partitioning ▸ in case of doubt — repartition ▸ a bit more kafka topics
ENRICHMENT
ENRICHMENT
PRODUCTION READINESS
APP
2 CPU 4096 MB
PRODUCTION READINESS
APP APP APP
2 CPU 4096 MB 3x
PRODUCTION READINESS
APP HEALTH-CHECK APP HEALTH-CHECK APP HEALTH-CHECK
PRODUCTION READINESS
APP HEALTH-CHECK APP HEALTH-CHECK APP HEALTH-CHECK
PRODUCTION READINESS
APP HEALTH-CHECK APP HEALTH-CHECK
PRODUCTION READINESS
APP HEALTH-CHECK APP HEALTH-CHECK APP HEALTH-CHECK
APP + DSL KSTREAMS LIBRARY HEALTH-CHECK
PRODUCTION READINESS
APP STREAM THREAD HEALTH-CHECK
PRODUCTION READINESS
APP STREAM THREAD HEALTH-CHECK
PRODUCTION READINESS
APP STREAM THREAD HEALTH-CHECK
PRODUCTION READINESS
IT’S FINE
APP STREAM THREAD HEALTH-CHECK
PRODUCTION READINESS
ENRICHMENT
PRODUCTION READINESS
RUNNING
PRODUCTION READINESS
PENDING SHUTDOWN RUNNING NOT RUNNING ERROR
PRODUCTION READINESS
REBALANCING RUNNING
PRODUCTION READINESS
REBALANCING RUNNING
PRODUCTION READINESS
BATCH RESTORED RESTORE START
PRODUCTION READINESS
RESTORE END BATCH RESTORED RESTORE START
PRODUCTION READINESS
BATCH RESTORED RESTORE START
PRODUCTION READINESS
▸ missing joins ▸ rebalancing loops ▸ storage-specific metrics ▸ business-specific metrics
PRODUCTION READINESS
PRODUCTION READINESS
PRODUCTION READINESS
PRODUCTION READINESS
PRODUCTION READINESS
PRODUCTION READINESS
PRODUCTION READINESS
PRODUCTION READINESS
SCALE OUT
METRICS METRICS METRICS APP APP METADATA METADATA METADATA METADATA KSTREAMS APP P1 PO P2 P1 PO P2
APP APP METADATA KSTREAMS APP
SCALE OUT
METRICS METRICS METRICS METADATA METADATA METADATA P1 PO P2 P1 PO P2 METRICS P3
APP APP METADATA KSTREAMS APP
SCALE OUT
METRICS METRICS METRICS METADATA METADATA METADATA P1 PO P2 P1 PO P2 METRICS P3
APP APP METADATA KSTREAMS APP
SCALE OUT
METRICS METRICS METRICS METADATA METADATA METADATA P1 PO P2 P1 PO P2 METRICS P3 METADATA P3
3 APP APP 3 KSTREAMS APP
SCALE OUT
APP APP KSTREAMS APP 3 3 4 4 PR #1
SCALE OUT
APP KSTREAMS APP PR #1 3 3 4 4 APP PR #2
SCALE OUT
APP KSTREAMS APP PR #1 3 3 4 4 APP PR #2 PR #3
SCALE OUT
APP KSTREAMS APP PR #1 3 3 4 4 APP PR #2 PR #3 PR #4
SCALE OUT
SCALE OUT
SCALE UP
SOURCE SOURCE SINK LOOKUP
SCALE UP
SOURCE SOURCE SINK LOOKUP
SCALE UP
SOURCE SOURCE SINK LOOKUP
SCALE UP
SOURCE SOURCE SINK LOOKUP TRANSFORMERS MERGE
SCALE UP
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS
SCALE UP
APP APP APP METADATA METADATA METADATA METRICS METRICS METRICS
SCALE UP
TOO GOOD TO BE TRUE…
CONCERNS?
PROTESTS?