SlideShare a Scribd company logo
What is the State of my Kafka Streams Application?
Unleashing Metrics.
Neil Buesing
Kafka Summit Europe 2021
@nbuesing nbuesing
Takeaways
1. See how to extract metrics from your application using existing JMX tooling.

2. Walkthrough how to build a dashboard for observing those metrics.

3. Explore options of how to add additional JMX resources and Kafka Stream
metrics to your application.

4. How to verify you built your dashboard correctly by creating a data control set to
validate the dashboards. 

5. How to go beyond what you can collect from the Kafka Stream metrics.

6. An analysis and overview of the provided metrics, including the new end-to-end
metrics of Kafka Streams 2.7.
So Many Metrics
• Kafka Broker

• JVM

• Kafka Client

• Producer

• Consumer

• Kafka Streams
Kafka Stream Metrics
• Kafka Clients

• Producer

• Consumer 

• Admin

• Restore Consumer

• Client
Thread
Task
Processor
State Store
• Processing
• Thread

• Task (sub-topology)

• Processor Node

• Persistence Metrics
• State Store

• RocksDB

• Record Cache
JVM
Thread
JVM
Kafka Stream Metrics
Thread
Task
Processor
State Store
• Job (Application)

• Instance (JVM)

• Thread (Worker)

• Task (sub-topology)

• Partition

• State Stores
Task
Processor
State Store
Thread
Task
Processor
State Store
desire evenly distribution when scaling?
consider 12 or 24 partitions
12 -> 1/2/3/4/6/12
24 -> 1/2/3/4/6/8/12/24
Let's Build A Dashboard
https://pixy.org/4796106/
What's Needed
• Access to the Metrics



• Time Series Database



• Visualization
https://pixabay.com/images/id-309118/
Getting the Metrics
• MetricsReporter

• Built-in JMXReporter

• RMI - JConsole (UI), jmxterm (CLI)

• Java Agents - JMX Exporter (Prometheus), Jolokia

• Frameworks

• 3rd Party Metric Reporters

• Write Your Own
JMX
is the reason for the warning
when using . and _ in topic names.
As . gets converted to _ in JMX.
Prometheus JMX Exporter
streams-config.yml
• Give Me Everything
lowercaseOutputName: true
rules:
- pattern: (.*)<type=(.*)><>(.*)
• http://{hostname}:7071
-javaagent:/jmx_prometheus_javaagent.jar=7071:/streams-config.yml"
Prometheus JMX Exporter
streams-config.yml
• Give Me Just What I Want
lowercaseOutputName: true
rules:
- pattern: java.lang<type=(.*)>
- pattern: kafka.streams<type=stream-thread-metrics, thread-id=(.+),
task-id=(.+)><>(.*)
- pattern: kafka.streams<type=stream-task-metrics, thread-id=(.+)><>(.*)
- pattern: kafka.consumer.*<client-id=(.+)><>(.*)
- pattern: kafka.producer.*<client-id=(.+)><>(.*)
time curl -s http://localhost:7071 | wc -l

2244 | 0.179 total time
time curl -s http://localhost:7071 | wc -l
4243 | 0.490 total time
Prometheus JMX Exporter
streams-config.yml
• Give Me Just What I Want It And the Way I Want It
lowercaseOutputName: true
rules:
- pattern: kafka.streams<type=stream-record-cache-metrics, thread-id=(.+),
task-id=(.+)_(.+), record-cache-id=(.+)><>(.+):.+
name: kafka_streams_stream_record_cache_metrics
labels:
thread_id: "$1"
task_id: "$2"
partition_id: "$3"
record-cache-id: "$4"
metric: "$5"
See streams-config.yml in
streams/docker/streams-config.yml
for complete example
Time Series Database
• Prometheus
remove port from
URL for dashboard
- job_name: targets
file_sd_configs:
- files:
- /etc/prometheus/targets.json
relabel_configs:
- source_labels: [__address__]
regex: '(.*):(.*)'
target_label: instance
replacement: '$1'
Dashboard
Variables
Dashboard
• ~5 / second?

• what's wrong?

• Grafana
computed?
• Name the topology processes

KSTREAM-PEEK-0000000027

• Client property client.id and thread_id

• utilize JMX Prometheus 

• grafana autocomplete

• =~ 

• Breakdown Graph & Total
Let's Build A Dashboard: Takeaways
Baseline Application
Application State

• Users - KTable

• Store - Global KTable

• Products - KTable

• Assembly (Purchase Order) - Aggregate
orders-purchase orders-pickup
repartition
attach
user
& store
attach
line item
pricing
assemble
4 Tasks (sub-topologies)
builder.<String, PurchaseOrder>stream(options.getPurchaseTopic(), Consumed.as("purchase-order-source"))
.selectKey((k, v) -> v.getUserId(), Named.as("purchase-order-keyByUserId"))
.join(users, (purchaseOrder, user) -> {
purchaseOrder.setUser(user);
return purchaseOrder;
}, Joined.as("purchase-order-join-user"))
.join(stores, (k, v) -> v.getStoreId(), (purchaseOrder, store) -> {
purchaseOrder.setStore(store);
return purchaseOrder;
}, Named.as("purchase-order-join-store"))
.flatMap((k, v) -> v.getItems().stream().map(item -> KeyValue.pair(item.getSku(), v)).collect(Collectors.toList()),
Named.as("purchase-order-products-flatmap"))
.join(products, (purchaseOrder, product) -> {
purchaseOrder.getItems().stream().filter(item -> item.getSku().equals(product.getSku())).forEach(item -> item.setPrice(product.getPrice()));
return purchaseOrder;
}, Joined.as("purchase-order-join-product"))
.groupBy((k, v) -> v.getOrderId(), Grouped.as("pickup-order-groupBy-orderId"))
.reduce((incoming, aggregate) -> {
if (aggregate == null) {
aggregate = incoming;
} else {
final PurchaseOrder purchaseOrder = aggregate;
incoming.getItems().stream().forEach(item -> {
if (item.getPrice() != null) {
purchaseOrder.getItems().stream().filter(i -> i.getSku().equals(item.getSku())).forEach(i -> i.setPrice(item.getPrice()));
}
});
}
return aggregate;
}, Named.as("pickup-order-reduce"), Materialized.as("pickup-order-reduce-store"))
.filter((k, v) -> v.getItems().stream().allMatch(i -> i.getPrice() != null), Named.as("pickup-order-filtered"))
.toStream(Named.as("pickup-order-reduce-tostream"))
.to(options.getPickupTopic(), Produced.as("pickup-orders"));
KTable
GlobalKTable
KTable
Aggregate
Kafka Stream Metrics
• configurations

• metrics.recording.level - info
• info, debug, & trace
• metrics.reporters
• metrics.sample.window.ms - 30 seconds

• metrics.num.samples - 2

• built.in.metrics.version - latest
Thread
Task
Processor
State Store
Thread Metrics
• operation

• commit

• poll

• process

• metric

• total

• rate
• job (application)

• instance (JVM)

• thread (worker)
JVM
JVM
Thread
Thread Thread
Thread Metrics
Task Metrics
• operation

• commit

• process

• metric

• total

• rate
• job (application)

• instance (JVM)

• thread (worker)

• task

• subtopology

• partition
JVM
JVM
Thread Thread
Task
Task
Thread
Task
Task
Task Task
Task Metrics
Processor Metrics
• operation

• process

• metric

• total

• rate

• e2e latency
• job (application)

• instance (JVM)

• thread (worker)

• task

• subtopology

• partition

• process node
JVM
JVM
Thread Thread
Task
Task
Thread
Task
Task
Task Task
Processor Processor Processor
ProcessorNodeMetrics.e2ELatencySensor()
KAFKA-9983: task-level metrics exposed for all source and terminal nodes
Processor Metrics
Processor Metrics - e2e
State Store Metrics
JVM
Thread
JVM
Thread
Task
Processor
State Store
Processor
Task
State Store
Thread
Task
Processor
State Store
• operation

• put {-if-absent/-all}

• get

• delete

• flush

• restore

• all

• metric

• total

• rate

• latency-{avg|max}

in nanoseconds
• job (application)

• instance (JVM)

• thread (worker)

• task

• subtopology

• partition

• store type
• store name
State Store Metrics
Additional RocksDB Metrics
num-immutable-mem-table
cur-size-active-mem-table
cur-size-all-mem-tables
size-all-mem-tables
num-entries-active-mem-table
num-entries-imm-mem-tables
num-deletes-active-mem-table
num-deletes-imm-mem-tables
mem-table-flush-pending
num-running-flushes
compaction-pending
num-running-compactions
estimate-pending-compaction-bytes
bytes-written-rate
bytes-read-rate
memtable-bytes-flushed-rate
memtable-hit-ratio
block-cache-data-hit-ratio
block-cache-index-hit-ratio
block-cache-filter-hit-ratio
write-stall-duration-avg
write-stall-duration-total
bytes-read-compaction-rate
number-open-files
number-file-errors-total
Property Metrics Statistical Metrics
total-sst-files-size
live-sst-files-size
num-live-versions
block-cache-capacity
block-cache-usage
block-cache-pinned-usage
estimate-num-keys
estimate-table-readers-mem
background-errors
Record Cache Metrics
JVM
Thread
JVM
Thread
Task
Processor
State Store
Processor
Task
State Store
Thread
Task
Processor
State Store
• metric

• hit-ratio-min

• hit-ratio-max

• hit-ratio-avg
• job (application)

• instance (JVM)

• thread (worker)

• task

• subtopology

• partition
• store name
Record Cache Metrics
Explore The Metrics
• 1 Application (Job)

• 2 Instances (JVMs)

• 2 Threads/Instance

• 4 Partitions - even distribution
orders-purchase orders-pickup
repartition
attach
user
& store
attach
line item
pricing
assemble
• 10 orders/second & 3 line-items/order

• Scenarios
• network-issues for 1 instance

• 100ms delay to brokers

• processing issue

• 100ms pricing delay
Traffic Control
tc linux command
100ms network latency 'stream'
100ms pricing processing
No Issues Pricing (#4) 100ms delay
Explore The Metrics: Takeaways
• Understand how Operations will use the Dashboards

• Baseline / Control Application

• Chaos Monkey
Alternate Collection Example
• Access to the Metrics

• Custom Metric
• Custom Reporter
• Time Series Database

• Apache Druid
• Visualization

• Druid SQL Query
Custom Metric
.transformValues(() -> new ValueTransformerWithKey<String, PurchaseOrder, PurchaseOrder>() {
private Sensor sensor;
public void init(ProcessorContext context) {
sensor = createSensor(Thread.currentThread().getName(),
context.taskId().toString(), "purchase-order-lineitem-counter", (StreamsMetricsImpl) context.metrics());
}
public PurchaseOrder transform(String readOnlyKey, PurchaseOrder value) {
sensor.record(value.getItems().size());
return value;
}
public Sensor createSensor(final String threadId, final String taskId, final String processorNodeId, final StreamsMetricsImpl sm) {
return sm(threadId, taskId, processorNodeId, processorNodeId + "-lineitems", Sensor.RecordingLevel.INFO);
addAvgAndMinAndMaxToSensor(sensor, PROCESSOR_NODE_LEVEL_GROUP, sm.nodeLevelTagMap(threadId, taskId, processorNodeId),
"lineitems", "avg-doc","min-doc","max-doc");
return sensor;
}
}
StreamsMetricsImpl
Custom Reporter
private ObjectNode jsonNode(final KafkaMetric metric) {
ObjectNode objectNode = JsonNodeFactory.instance.objectNode();
... // populate objectNode with immutable data from metric
return objectNode;
}
public void run() {
map.forEach((k, v) -> {
final KafkaMetric metric = v.getKey();
final ObjectNode node = v.getValue();
node.put("value", v.getKey().value());
node.put("timestamp", System.currentTimeMillis());
producer.send(
new ProducerRecord<>(topic,
metric.metricName().name(), serialize(node)));
});
}
@Override
public void init(final List<KafkaMetric> metrics) {
metrics.forEach(metric -> {
map.put(metric.metricName(),
Pair.of(metric, jsonNode(metric)));
});
executor.scheduleAtFixedRate(runnable, 5L, 5L,
TimeUnit.SECONDS);
}
@Override
public void metricChange(final KafkaMetric metric) {
map.put(metric.metricName(),
Pair.of(metric, jsonNode(metric)));
}
@Override
public void metricRemoval(KafkaMetric metric) {
map.remove(metric.metricName());
}
@Override
public void close() {
this.executor.shutdownNow();
} If reporter uses a Kafka producer,
be sure to
config.remove("metric.reporters")
Containerized Druid and configuration
part of GitHub project
Druid
{
"type": "kafka",
"spec": {
"ioConfig": {...},
"dataSchema": {
"dataSource": "_metrics-kafka-streams",
"granularitySpec": {
"type": "uniform",
"queryGranularity": "fifteen_minute",
"segmentGranularity": "fifteen_minute",
"rollup": true
},
"timestampSpec": {
"column": "timestamp",
"format": "millis"
},
"dimensionsSpec": {
"dimensions": [
<<COLUMNS>>
]
},
"metricsSpec": [
{
"name": "count",
"type": "count"
},
{
"name": "value",
"type": "doubleLast",
"fieldName": "value"
}
]
}
}
}
Takeaways
• 2.5 - Metric Overhaul (KIP-444)

• 2.7 - Added e2e Latency (KIP-613)

• "Discovery" Dashboards

• Validate 

• `-total` metrics great for validation 

• Extensible
Thank you
https://github.com/nbuesing/kafka-streams-dashboards



(docker and Java11 required)

./scripts/startup.sh
@nbuesing nbuesing

More Related Content

What's hot

Exactly-Once Financial Data Processing at Scale with Flink and Pinot
Exactly-Once Financial Data Processing at Scale with Flink and PinotExactly-Once Financial Data Processing at Scale with Flink and Pinot
Exactly-Once Financial Data Processing at Scale with Flink and Pinot
Flink Forward
 
Stephan Ewen - Experiences running Flink at Very Large Scale
Stephan Ewen -  Experiences running Flink at Very Large ScaleStephan Ewen -  Experiences running Flink at Very Large Scale
Stephan Ewen - Experiences running Flink at Very Large Scale
Ververica
 
What to do if Your Kafka Streams App Gets OOMKilled? with Andrey Serebryanskiy
What to do if Your Kafka Streams App Gets OOMKilled? with Andrey SerebryanskiyWhat to do if Your Kafka Streams App Gets OOMKilled? with Andrey Serebryanskiy
What to do if Your Kafka Streams App Gets OOMKilled? with Andrey Serebryanskiy
HostedbyConfluent
 
Kafka replication apachecon_2013
Kafka replication apachecon_2013Kafka replication apachecon_2013
Kafka replication apachecon_2013Jun Rao
 
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
NAVER D2
 
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
StreamNative
 
Understanding Query Plans and Spark UIs
Understanding Query Plans and Spark UIsUnderstanding Query Plans and Spark UIs
Understanding Query Plans and Spark UIs
Databricks
 
MySQL Administrator 2021 - 네오클로바
MySQL Administrator 2021 - 네오클로바MySQL Administrator 2021 - 네오클로바
MySQL Administrator 2021 - 네오클로바
NeoClova
 
MongoDB WiredTiger Internals: Journey To Transactions
MongoDB WiredTiger Internals: Journey To TransactionsMongoDB WiredTiger Internals: Journey To Transactions
MongoDB WiredTiger Internals: Journey To Transactions
Mydbops
 
Using ClickHouse for Experimentation
Using ClickHouse for ExperimentationUsing ClickHouse for Experimentation
Using ClickHouse for Experimentation
Gleb Kanterov
 
Introduction to Kafka Cruise Control
Introduction to Kafka Cruise ControlIntroduction to Kafka Cruise Control
Introduction to Kafka Cruise Control
Jiangjie Qin
 
MyRocks Deep Dive
MyRocks Deep DiveMyRocks Deep Dive
MyRocks Deep Dive
Yoshinori Matsunobu
 
Diving into the Deep End - Kafka Connect
Diving into the Deep End - Kafka ConnectDiving into the Deep End - Kafka Connect
Diving into the Deep End - Kafka Connect
confluent
 
Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)
DataWorks Summit
 
Advanced MySQL Query Tuning
Advanced MySQL Query TuningAdvanced MySQL Query Tuning
Advanced MySQL Query Tuning
Alexander Rubin
 
Evening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkEvening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in Flink
Flink Forward
 
Hyperspace for Delta Lake
Hyperspace for Delta LakeHyperspace for Delta Lake
Hyperspace for Delta Lake
Databricks
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
EDB
 
Real-time Analytics with Apache Flink and Druid
Real-time Analytics with Apache Flink and DruidReal-time Analytics with Apache Flink and Druid
Real-time Analytics with Apache Flink and Druid
Jan Graßegger
 
Kafka Streams State Stores Being Persistent
Kafka Streams State Stores Being PersistentKafka Streams State Stores Being Persistent
Kafka Streams State Stores Being Persistent
confluent
 

What's hot (20)

Exactly-Once Financial Data Processing at Scale with Flink and Pinot
Exactly-Once Financial Data Processing at Scale with Flink and PinotExactly-Once Financial Data Processing at Scale with Flink and Pinot
Exactly-Once Financial Data Processing at Scale with Flink and Pinot
 
Stephan Ewen - Experiences running Flink at Very Large Scale
Stephan Ewen -  Experiences running Flink at Very Large ScaleStephan Ewen -  Experiences running Flink at Very Large Scale
Stephan Ewen - Experiences running Flink at Very Large Scale
 
What to do if Your Kafka Streams App Gets OOMKilled? with Andrey Serebryanskiy
What to do if Your Kafka Streams App Gets OOMKilled? with Andrey SerebryanskiyWhat to do if Your Kafka Streams App Gets OOMKilled? with Andrey Serebryanskiy
What to do if Your Kafka Streams App Gets OOMKilled? with Andrey Serebryanskiy
 
Kafka replication apachecon_2013
Kafka replication apachecon_2013Kafka replication apachecon_2013
Kafka replication apachecon_2013
 
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
 
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
 
Understanding Query Plans and Spark UIs
Understanding Query Plans and Spark UIsUnderstanding Query Plans and Spark UIs
Understanding Query Plans and Spark UIs
 
MySQL Administrator 2021 - 네오클로바
MySQL Administrator 2021 - 네오클로바MySQL Administrator 2021 - 네오클로바
MySQL Administrator 2021 - 네오클로바
 
MongoDB WiredTiger Internals: Journey To Transactions
MongoDB WiredTiger Internals: Journey To TransactionsMongoDB WiredTiger Internals: Journey To Transactions
MongoDB WiredTiger Internals: Journey To Transactions
 
Using ClickHouse for Experimentation
Using ClickHouse for ExperimentationUsing ClickHouse for Experimentation
Using ClickHouse for Experimentation
 
Introduction to Kafka Cruise Control
Introduction to Kafka Cruise ControlIntroduction to Kafka Cruise Control
Introduction to Kafka Cruise Control
 
MyRocks Deep Dive
MyRocks Deep DiveMyRocks Deep Dive
MyRocks Deep Dive
 
Diving into the Deep End - Kafka Connect
Diving into the Deep End - Kafka ConnectDiving into the Deep End - Kafka Connect
Diving into the Deep End - Kafka Connect
 
Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)
 
Advanced MySQL Query Tuning
Advanced MySQL Query TuningAdvanced MySQL Query Tuning
Advanced MySQL Query Tuning
 
Evening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkEvening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in Flink
 
Hyperspace for Delta Lake
Hyperspace for Delta LakeHyperspace for Delta Lake
Hyperspace for Delta Lake
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Real-time Analytics with Apache Flink and Druid
Real-time Analytics with Apache Flink and DruidReal-time Analytics with Apache Flink and Druid
Real-time Analytics with Apache Flink and Druid
 
Kafka Streams State Stores Being Persistent
Kafka Streams State Stores Being PersistentKafka Streams State Stores Being Persistent
Kafka Streams State Stores Being Persistent
 

Similar to What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil Buesing, Object Partners

Unleashing your Kafka Streams Application Metrics!
Unleashing your Kafka Streams Application Metrics!Unleashing your Kafka Streams Application Metrics!
Unleashing your Kafka Streams Application Metrics!
HostedbyConfluent
 
Monitoring Akka with Kamon 1.0
Monitoring Akka with Kamon 1.0Monitoring Akka with Kamon 1.0
Monitoring Akka with Kamon 1.0
Steffen Gebert
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructureharendra_pathak
 
Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...
Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...
Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...
Databricks
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
Engine Yard
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
Kevin Webber
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop
clairvoyantllc
 
Dealing with and learning from the sandbox
Dealing with and learning from the sandboxDealing with and learning from the sandbox
Dealing with and learning from the sandbox
Elaine Van Bergen
 
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACPerformance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACKristofferson A
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
Amazon Web Services Japan
 
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
DataWorks Summit/Hadoop Summit
 
Dealing with and learning from the sandbox
Dealing with and learning from the sandboxDealing with and learning from the sandbox
Dealing with and learning from the sandbox
Elaine Van Bergen
 
Spark on Yarn
Spark on YarnSpark on Yarn
Spark on Yarn
Qubole
 
Spring Batch in Code - simple DB to DB batch applicaiton
Spring Batch in Code - simple DB to DB batch applicaitonSpring Batch in Code - simple DB to DB batch applicaiton
Spring Batch in Code - simple DB to DB batch applicaiton
tomi vanek
 
OOW09 Ebs Tuning Final
OOW09 Ebs Tuning FinalOOW09 Ebs Tuning Final
OOW09 Ebs Tuning Finaljucaab
 
DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and...
 DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and... DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and...
DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and...
PROIDEA
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015
Pavel Chunyayev
 
Spring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudSpring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloud
Orkhan Gasimov
 
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQLKafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
confluent
 

Similar to What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil Buesing, Object Partners (20)

Unleashing your Kafka Streams Application Metrics!
Unleashing your Kafka Streams Application Metrics!Unleashing your Kafka Streams Application Metrics!
Unleashing your Kafka Streams Application Metrics!
 
Monitoring Akka with Kamon 1.0
Monitoring Akka with Kamon 1.0Monitoring Akka with Kamon 1.0
Monitoring Akka with Kamon 1.0
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure
 
Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...
Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...
Apache Spark Performance Troubleshooting at Scale, Challenges, Tools, and Met...
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 
Play Framework and Activator
Play Framework and ActivatorPlay Framework and Activator
Play Framework and Activator
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop
 
Dealing with and learning from the sandbox
Dealing with and learning from the sandboxDealing with and learning from the sandbox
Dealing with and learning from the sandbox
 
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RACPerformance Scenario: Diagnosing and resolving sudden slow down on two node RAC
Performance Scenario: Diagnosing and resolving sudden slow down on two node RAC
 
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & MobileIVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
IVS CTO Night And Day 2018 Winter - [re:Cap] Serverless & Mobile
 
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
End to End Processing of 3.7 Million Telemetry Events per Second using Lambda...
 
Dealing with and learning from the sandbox
Dealing with and learning from the sandboxDealing with and learning from the sandbox
Dealing with and learning from the sandbox
 
Spark on Yarn
Spark on YarnSpark on Yarn
Spark on Yarn
 
Spring Batch in Code - simple DB to DB batch applicaiton
Spring Batch in Code - simple DB to DB batch applicaitonSpring Batch in Code - simple DB to DB batch applicaiton
Spring Batch in Code - simple DB to DB batch applicaiton
 
OOW09 Ebs Tuning Final
OOW09 Ebs Tuning FinalOOW09 Ebs Tuning Final
OOW09 Ebs Tuning Final
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and...
 DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and... DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and...
DOD 2016 - Stefan Thies - Monitoring and Log Management for Docker Swarm and...
 
Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015Ansible benelux meetup - Amsterdam 27-5-2015
Ansible benelux meetup - Amsterdam 27-5-2015
 
Spring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloudSpring Cloud: API gateway upgrade & configuration in the cloud
Spring Cloud: API gateway upgrade & configuration in the cloud
 
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQLKafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
 

More from HostedbyConfluent

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
HostedbyConfluent
 
Renaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonRenaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit London
HostedbyConfluent
 
Evolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at TrendyolEvolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at Trendyol
HostedbyConfluent
 
Ensuring Kafka Service Resilience: A Dive into Health-Checking Techniques
Ensuring Kafka Service Resilience: A Dive into Health-Checking TechniquesEnsuring Kafka Service Resilience: A Dive into Health-Checking Techniques
Ensuring Kafka Service Resilience: A Dive into Health-Checking Techniques
HostedbyConfluent
 
Exactly-once Stream Processing with Arroyo and Kafka
Exactly-once Stream Processing with Arroyo and KafkaExactly-once Stream Processing with Arroyo and Kafka
Exactly-once Stream Processing with Arroyo and Kafka
HostedbyConfluent
 
Fish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit LondonFish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit London
HostedbyConfluent
 
Tiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit LondonTiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit London
HostedbyConfluent
 
Building a Self-Service Stream Processing Portal: How And Why
Building a Self-Service Stream Processing Portal: How And WhyBuilding a Self-Service Stream Processing Portal: How And Why
Building a Self-Service Stream Processing Portal: How And Why
HostedbyConfluent
 
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
HostedbyConfluent
 
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
HostedbyConfluent
 
Navigating Private Network Connectivity Options for Kafka Clusters
Navigating Private Network Connectivity Options for Kafka ClustersNavigating Private Network Connectivity Options for Kafka Clusters
Navigating Private Network Connectivity Options for Kafka Clusters
HostedbyConfluent
 
Apache Flink: Building a Company-wide Self-service Streaming Data Platform
Apache Flink: Building a Company-wide Self-service Streaming Data PlatformApache Flink: Building a Company-wide Self-service Streaming Data Platform
Apache Flink: Building a Company-wide Self-service Streaming Data Platform
HostedbyConfluent
 
Explaining How Real-Time GenAI Works in a Noisy Pub
Explaining How Real-Time GenAI Works in a Noisy PubExplaining How Real-Time GenAI Works in a Noisy Pub
Explaining How Real-Time GenAI Works in a Noisy Pub
HostedbyConfluent
 
TL;DR Kafka Metrics | Kafka Summit London
TL;DR Kafka Metrics | Kafka Summit LondonTL;DR Kafka Metrics | Kafka Summit London
TL;DR Kafka Metrics | Kafka Summit London
HostedbyConfluent
 
A Window Into Your Kafka Streams Tasks | KSL
A Window Into Your Kafka Streams Tasks | KSLA Window Into Your Kafka Streams Tasks | KSL
A Window Into Your Kafka Streams Tasks | KSL
HostedbyConfluent
 
Mastering Kafka Producer Configs: A Guide to Optimizing Performance
Mastering Kafka Producer Configs: A Guide to Optimizing PerformanceMastering Kafka Producer Configs: A Guide to Optimizing Performance
Mastering Kafka Producer Configs: A Guide to Optimizing Performance
HostedbyConfluent
 
Data Contracts Management: Schema Registry and Beyond
Data Contracts Management: Schema Registry and BeyondData Contracts Management: Schema Registry and Beyond
Data Contracts Management: Schema Registry and Beyond
HostedbyConfluent
 
Code-First Approach: Crafting Efficient Flink Apps
Code-First Approach: Crafting Efficient Flink AppsCode-First Approach: Crafting Efficient Flink Apps
Code-First Approach: Crafting Efficient Flink Apps
HostedbyConfluent
 
Debezium vs. the World: An Overview of the CDC Ecosystem
Debezium vs. the World: An Overview of the CDC EcosystemDebezium vs. the World: An Overview of the CDC Ecosystem
Debezium vs. the World: An Overview of the CDC Ecosystem
HostedbyConfluent
 
Beyond Tiered Storage: Serverless Kafka with No Local Disks
Beyond Tiered Storage: Serverless Kafka with No Local DisksBeyond Tiered Storage: Serverless Kafka with No Local Disks
Beyond Tiered Storage: Serverless Kafka with No Local Disks
HostedbyConfluent
 

More from HostedbyConfluent (20)

Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Renaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit LondonRenaming a Kafka Topic | Kafka Summit London
Renaming a Kafka Topic | Kafka Summit London
 
Evolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at TrendyolEvolution of NRT Data Ingestion Pipeline at Trendyol
Evolution of NRT Data Ingestion Pipeline at Trendyol
 
Ensuring Kafka Service Resilience: A Dive into Health-Checking Techniques
Ensuring Kafka Service Resilience: A Dive into Health-Checking TechniquesEnsuring Kafka Service Resilience: A Dive into Health-Checking Techniques
Ensuring Kafka Service Resilience: A Dive into Health-Checking Techniques
 
Exactly-once Stream Processing with Arroyo and Kafka
Exactly-once Stream Processing with Arroyo and KafkaExactly-once Stream Processing with Arroyo and Kafka
Exactly-once Stream Processing with Arroyo and Kafka
 
Fish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit LondonFish Plays Pokemon | Kafka Summit London
Fish Plays Pokemon | Kafka Summit London
 
Tiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit LondonTiered Storage 101 | Kafla Summit London
Tiered Storage 101 | Kafla Summit London
 
Building a Self-Service Stream Processing Portal: How And Why
Building a Self-Service Stream Processing Portal: How And WhyBuilding a Self-Service Stream Processing Portal: How And Why
Building a Self-Service Stream Processing Portal: How And Why
 
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
From the Trenches: Improving Kafka Connect Source Connector Ingestion from 7 ...
 
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
Future with Zero Down-Time: End-to-end Resiliency with Chaos Engineering and ...
 
Navigating Private Network Connectivity Options for Kafka Clusters
Navigating Private Network Connectivity Options for Kafka ClustersNavigating Private Network Connectivity Options for Kafka Clusters
Navigating Private Network Connectivity Options for Kafka Clusters
 
Apache Flink: Building a Company-wide Self-service Streaming Data Platform
Apache Flink: Building a Company-wide Self-service Streaming Data PlatformApache Flink: Building a Company-wide Self-service Streaming Data Platform
Apache Flink: Building a Company-wide Self-service Streaming Data Platform
 
Explaining How Real-Time GenAI Works in a Noisy Pub
Explaining How Real-Time GenAI Works in a Noisy PubExplaining How Real-Time GenAI Works in a Noisy Pub
Explaining How Real-Time GenAI Works in a Noisy Pub
 
TL;DR Kafka Metrics | Kafka Summit London
TL;DR Kafka Metrics | Kafka Summit LondonTL;DR Kafka Metrics | Kafka Summit London
TL;DR Kafka Metrics | Kafka Summit London
 
A Window Into Your Kafka Streams Tasks | KSL
A Window Into Your Kafka Streams Tasks | KSLA Window Into Your Kafka Streams Tasks | KSL
A Window Into Your Kafka Streams Tasks | KSL
 
Mastering Kafka Producer Configs: A Guide to Optimizing Performance
Mastering Kafka Producer Configs: A Guide to Optimizing PerformanceMastering Kafka Producer Configs: A Guide to Optimizing Performance
Mastering Kafka Producer Configs: A Guide to Optimizing Performance
 
Data Contracts Management: Schema Registry and Beyond
Data Contracts Management: Schema Registry and BeyondData Contracts Management: Schema Registry and Beyond
Data Contracts Management: Schema Registry and Beyond
 
Code-First Approach: Crafting Efficient Flink Apps
Code-First Approach: Crafting Efficient Flink AppsCode-First Approach: Crafting Efficient Flink Apps
Code-First Approach: Crafting Efficient Flink Apps
 
Debezium vs. the World: An Overview of the CDC Ecosystem
Debezium vs. the World: An Overview of the CDC EcosystemDebezium vs. the World: An Overview of the CDC Ecosystem
Debezium vs. the World: An Overview of the CDC Ecosystem
 
Beyond Tiered Storage: Serverless Kafka with No Local Disks
Beyond Tiered Storage: Serverless Kafka with No Local DisksBeyond Tiered Storage: Serverless Kafka with No Local Disks
Beyond Tiered Storage: Serverless Kafka with No Local Disks
 

Recently uploaded

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 

What is the State of my Kafka Streams Application? Unleashing Metrics. | Neil Buesing, Object Partners

  • 1. What is the State of my Kafka Streams Application? Unleashing Metrics. Neil Buesing Kafka Summit Europe 2021 @nbuesing nbuesing
  • 2. Takeaways 1. See how to extract metrics from your application using existing JMX tooling. 2. Walkthrough how to build a dashboard for observing those metrics. 3. Explore options of how to add additional JMX resources and Kafka Stream metrics to your application. 4. How to verify you built your dashboard correctly by creating a data control set to validate the dashboards.  5. How to go beyond what you can collect from the Kafka Stream metrics. 6. An analysis and overview of the provided metrics, including the new end-to-end metrics of Kafka Streams 2.7.
  • 3. So Many Metrics • Kafka Broker • JVM • Kafka Client • Producer • Consumer • Kafka Streams
  • 4. Kafka Stream Metrics • Kafka Clients • Producer • Consumer • Admin • Restore Consumer • Client Thread Task Processor State Store • Processing • Thread • Task (sub-topology) • Processor Node • Persistence Metrics • State Store • RocksDB • Record Cache
  • 5. JVM Thread JVM Kafka Stream Metrics Thread Task Processor State Store • Job (Application) • Instance (JVM) • Thread (Worker) • Task (sub-topology) • Partition • State Stores Task Processor State Store Thread Task Processor State Store desire evenly distribution when scaling? consider 12 or 24 partitions 12 -> 1/2/3/4/6/12 24 -> 1/2/3/4/6/8/12/24
  • 6. Let's Build A Dashboard https://pixy.org/4796106/
  • 7. What's Needed • Access to the Metrics
 
 • Time Series Database
 
 • Visualization https://pixabay.com/images/id-309118/
  • 8. Getting the Metrics • MetricsReporter • Built-in JMXReporter • RMI - JConsole (UI), jmxterm (CLI) • Java Agents - JMX Exporter (Prometheus), Jolokia • Frameworks • 3rd Party Metric Reporters • Write Your Own JMX is the reason for the warning when using . and _ in topic names. As . gets converted to _ in JMX.
  • 9. Prometheus JMX Exporter streams-config.yml • Give Me Everything lowercaseOutputName: true rules: - pattern: (.*)<type=(.*)><>(.*) • http://{hostname}:7071 -javaagent:/jmx_prometheus_javaagent.jar=7071:/streams-config.yml"
  • 10. Prometheus JMX Exporter streams-config.yml • Give Me Just What I Want lowercaseOutputName: true rules: - pattern: java.lang<type=(.*)> - pattern: kafka.streams<type=stream-thread-metrics, thread-id=(.+), task-id=(.+)><>(.*) - pattern: kafka.streams<type=stream-task-metrics, thread-id=(.+)><>(.*) - pattern: kafka.consumer.*<client-id=(.+)><>(.*) - pattern: kafka.producer.*<client-id=(.+)><>(.*) time curl -s http://localhost:7071 | wc -l
 2244 | 0.179 total time time curl -s http://localhost:7071 | wc -l 4243 | 0.490 total time
  • 11. Prometheus JMX Exporter streams-config.yml • Give Me Just What I Want It And the Way I Want It lowercaseOutputName: true rules: - pattern: kafka.streams<type=stream-record-cache-metrics, thread-id=(.+), task-id=(.+)_(.+), record-cache-id=(.+)><>(.+):.+ name: kafka_streams_stream_record_cache_metrics labels: thread_id: "$1" task_id: "$2" partition_id: "$3" record-cache-id: "$4" metric: "$5" See streams-config.yml in streams/docker/streams-config.yml for complete example
  • 12. Time Series Database • Prometheus remove port from URL for dashboard - job_name: targets file_sd_configs: - files: - /etc/prometheus/targets.json relabel_configs: - source_labels: [__address__] regex: '(.*):(.*)' target_label: instance replacement: '$1'
  • 15. Dashboard • ~5 / second? • what's wrong? • Grafana computed?
  • 16. • Name the topology processes KSTREAM-PEEK-0000000027 • Client property client.id and thread_id • utilize JMX Prometheus • grafana autocomplete • =~ • Breakdown Graph & Total Let's Build A Dashboard: Takeaways
  • 17. Baseline Application Application State • Users - KTable • Store - Global KTable • Products - KTable • Assembly (Purchase Order) - Aggregate orders-purchase orders-pickup repartition attach user & store attach line item pricing assemble
  • 18. 4 Tasks (sub-topologies) builder.<String, PurchaseOrder>stream(options.getPurchaseTopic(), Consumed.as("purchase-order-source")) .selectKey((k, v) -> v.getUserId(), Named.as("purchase-order-keyByUserId")) .join(users, (purchaseOrder, user) -> { purchaseOrder.setUser(user); return purchaseOrder; }, Joined.as("purchase-order-join-user")) .join(stores, (k, v) -> v.getStoreId(), (purchaseOrder, store) -> { purchaseOrder.setStore(store); return purchaseOrder; }, Named.as("purchase-order-join-store")) .flatMap((k, v) -> v.getItems().stream().map(item -> KeyValue.pair(item.getSku(), v)).collect(Collectors.toList()), Named.as("purchase-order-products-flatmap")) .join(products, (purchaseOrder, product) -> { purchaseOrder.getItems().stream().filter(item -> item.getSku().equals(product.getSku())).forEach(item -> item.setPrice(product.getPrice())); return purchaseOrder; }, Joined.as("purchase-order-join-product")) .groupBy((k, v) -> v.getOrderId(), Grouped.as("pickup-order-groupBy-orderId")) .reduce((incoming, aggregate) -> { if (aggregate == null) { aggregate = incoming; } else { final PurchaseOrder purchaseOrder = aggregate; incoming.getItems().stream().forEach(item -> { if (item.getPrice() != null) { purchaseOrder.getItems().stream().filter(i -> i.getSku().equals(item.getSku())).forEach(i -> i.setPrice(item.getPrice())); } }); } return aggregate; }, Named.as("pickup-order-reduce"), Materialized.as("pickup-order-reduce-store")) .filter((k, v) -> v.getItems().stream().allMatch(i -> i.getPrice() != null), Named.as("pickup-order-filtered")) .toStream(Named.as("pickup-order-reduce-tostream")) .to(options.getPickupTopic(), Produced.as("pickup-orders")); KTable GlobalKTable KTable Aggregate
  • 19. Kafka Stream Metrics • configurations • metrics.recording.level - info • info, debug, & trace • metrics.reporters • metrics.sample.window.ms - 30 seconds • metrics.num.samples - 2 • built.in.metrics.version - latest Thread Task Processor State Store
  • 20. Thread Metrics • operation • commit • poll • process • metric • total • rate • job (application) • instance (JVM) • thread (worker) JVM JVM Thread Thread Thread
  • 22. Task Metrics • operation • commit • process • metric • total • rate • job (application) • instance (JVM) • thread (worker) • task • subtopology • partition JVM JVM Thread Thread Task Task Thread Task Task Task Task
  • 24. Processor Metrics • operation • process • metric • total • rate • e2e latency • job (application) • instance (JVM) • thread (worker) • task • subtopology • partition • process node JVM JVM Thread Thread Task Task Thread Task Task Task Task Processor Processor Processor ProcessorNodeMetrics.e2ELatencySensor() KAFKA-9983: task-level metrics exposed for all source and terminal nodes
  • 27. State Store Metrics JVM Thread JVM Thread Task Processor State Store Processor Task State Store Thread Task Processor State Store • operation • put {-if-absent/-all} • get • delete • flush • restore • all • metric • total • rate • latency-{avg|max}
 in nanoseconds • job (application) • instance (JVM) • thread (worker) • task • subtopology • partition • store type • store name
  • 29. Additional RocksDB Metrics num-immutable-mem-table cur-size-active-mem-table cur-size-all-mem-tables size-all-mem-tables num-entries-active-mem-table num-entries-imm-mem-tables num-deletes-active-mem-table num-deletes-imm-mem-tables mem-table-flush-pending num-running-flushes compaction-pending num-running-compactions estimate-pending-compaction-bytes bytes-written-rate bytes-read-rate memtable-bytes-flushed-rate memtable-hit-ratio block-cache-data-hit-ratio block-cache-index-hit-ratio block-cache-filter-hit-ratio write-stall-duration-avg write-stall-duration-total bytes-read-compaction-rate number-open-files number-file-errors-total Property Metrics Statistical Metrics total-sst-files-size live-sst-files-size num-live-versions block-cache-capacity block-cache-usage block-cache-pinned-usage estimate-num-keys estimate-table-readers-mem background-errors
  • 30. Record Cache Metrics JVM Thread JVM Thread Task Processor State Store Processor Task State Store Thread Task Processor State Store • metric • hit-ratio-min • hit-ratio-max • hit-ratio-avg • job (application) • instance (JVM) • thread (worker) • task • subtopology • partition • store name
  • 32. Explore The Metrics • 1 Application (Job) • 2 Instances (JVMs) • 2 Threads/Instance • 4 Partitions - even distribution orders-purchase orders-pickup repartition attach user & store attach line item pricing assemble • 10 orders/second & 3 line-items/order • Scenarios • network-issues for 1 instance • 100ms delay to brokers • processing issue • 100ms pricing delay Traffic Control tc linux command
  • 34. 100ms pricing processing No Issues Pricing (#4) 100ms delay
  • 35. Explore The Metrics: Takeaways • Understand how Operations will use the Dashboards • Baseline / Control Application • Chaos Monkey
  • 36. Alternate Collection Example • Access to the Metrics • Custom Metric • Custom Reporter • Time Series Database • Apache Druid • Visualization • Druid SQL Query
  • 37. Custom Metric .transformValues(() -> new ValueTransformerWithKey<String, PurchaseOrder, PurchaseOrder>() { private Sensor sensor; public void init(ProcessorContext context) { sensor = createSensor(Thread.currentThread().getName(), context.taskId().toString(), "purchase-order-lineitem-counter", (StreamsMetricsImpl) context.metrics()); } public PurchaseOrder transform(String readOnlyKey, PurchaseOrder value) { sensor.record(value.getItems().size()); return value; } public Sensor createSensor(final String threadId, final String taskId, final String processorNodeId, final StreamsMetricsImpl sm) { return sm(threadId, taskId, processorNodeId, processorNodeId + "-lineitems", Sensor.RecordingLevel.INFO); addAvgAndMinAndMaxToSensor(sensor, PROCESSOR_NODE_LEVEL_GROUP, sm.nodeLevelTagMap(threadId, taskId, processorNodeId), "lineitems", "avg-doc","min-doc","max-doc"); return sensor; } } StreamsMetricsImpl
  • 38. Custom Reporter private ObjectNode jsonNode(final KafkaMetric metric) { ObjectNode objectNode = JsonNodeFactory.instance.objectNode(); ... // populate objectNode with immutable data from metric return objectNode; } public void run() { map.forEach((k, v) -> { final KafkaMetric metric = v.getKey(); final ObjectNode node = v.getValue(); node.put("value", v.getKey().value()); node.put("timestamp", System.currentTimeMillis()); producer.send( new ProducerRecord<>(topic, metric.metricName().name(), serialize(node))); }); } @Override public void init(final List<KafkaMetric> metrics) { metrics.forEach(metric -> { map.put(metric.metricName(), Pair.of(metric, jsonNode(metric))); }); executor.scheduleAtFixedRate(runnable, 5L, 5L, TimeUnit.SECONDS); } @Override public void metricChange(final KafkaMetric metric) { map.put(metric.metricName(), Pair.of(metric, jsonNode(metric))); } @Override public void metricRemoval(KafkaMetric metric) { map.remove(metric.metricName()); } @Override public void close() { this.executor.shutdownNow(); } If reporter uses a Kafka producer, be sure to config.remove("metric.reporters")
  • 39. Containerized Druid and configuration part of GitHub project Druid { "type": "kafka", "spec": { "ioConfig": {...}, "dataSchema": { "dataSource": "_metrics-kafka-streams", "granularitySpec": { "type": "uniform", "queryGranularity": "fifteen_minute", "segmentGranularity": "fifteen_minute", "rollup": true }, "timestampSpec": { "column": "timestamp", "format": "millis" }, "dimensionsSpec": { "dimensions": [ <<COLUMNS>> ] }, "metricsSpec": [ { "name": "count", "type": "count" }, { "name": "value", "type": "doubleLast", "fieldName": "value" } ] } } }
  • 40. Takeaways • 2.5 - Metric Overhaul (KIP-444) • 2.7 - Added e2e Latency (KIP-613) • "Discovery" Dashboards • Validate • `-total` metrics great for validation • Extensible
  • 41. Thank you https://github.com/nbuesing/kafka-streams-dashboards
 
 (docker and Java11 required) ./scripts/startup.sh @nbuesing nbuesing