Skip to content

Extract Kafka cluster ID as tag for DSM#6044

Merged
hokitam merged 17 commits into
masterfrom
hokitam/dsm_kafka_cluster
Dec 14, 2023
Merged

Extract Kafka cluster ID as tag for DSM#6044
hokitam merged 17 commits into
masterfrom
hokitam/dsm_kafka_cluster

Conversation

@hokitam

@hokitam hokitam commented Oct 12, 2023

Copy link
Copy Markdown
Contributor

What Does This Do

Added new logic to Kafka instrumentation to collect Kafka cluster ID, and propagate that ID in the Data Streams Monitoring (DSM) payloads. This cluster ID will allow Data Streams Monitoring to perform more fine-tuned monitoring for Kafka workloads that happen across different clusters.

Motivation

The Data Streams Monitoring metrics that track end-to-end latency and Kafka lag today do not keep track of the clusters that the workloads are communicating with. As such, if two workload in separate clusters have similar metadata (for example, similarly named services talking to similarly named Kafka topics that are situated in different regions), DSM is unable to automatically differentiate between them today. Adding the cluster ID as a tag to the DSM metrics will allow DSM to monitor workload across different Kafka clusters separately.

Additional Notes

Jira ticket: [PROJ-IDENT]

@hokitam
hokitam marked this pull request as ready for review October 12, 2023 20:49
@hokitam
hokitam requested a review from a team as a code owner October 12, 2023 20:49
@hokitam
hokitam requested review from am312 and dougqh October 12, 2023 20:49
producerProps.put(ProducerConfig.METADATA_MAX_AGE_CONFIG, 1000)
def producerFactory = new DefaultKafkaProducerFactory<String, String>(producerProps)
def kafkaTemplate = new KafkaTemplate<String, String>(producerFactory)
kafkaTemplate.flush()

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We are setting the METADATA_MAX_AGE_CONFIG to 1s, such that Metadata updates once every second. We call kafkaTemplate.flush() to ensure that the producer is actually created under the hood (otherwise it wouldn't start updating the Metadata. Sleeping for 1.5s allow us to ensure that the metadata we need in the instrumentation would be updated within the 1s timeframe..

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test may be flaky, depending on how the metadata update is done. Maybe we can check for the data we need in a while loop, until we get the data or some reasonable timeout is reached?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good idea, updated!

@pr-commenter

pr-commenter Bot commented Oct 12, 2023

Copy link
Copy Markdown

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master hokitam/dsm_kafka_cluster
git_commit_date 1701864349 1701878546
git_commit_sha 9d5c7ea 9ff3556
release_version 1.26.0-SNAPSHOT~9d5c7ea524 1.26.0-SNAPSHOT~9ff3556f43
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1701881217 1701881217
ci_job_id 383645439 383645439
ci_pipeline_id 24556877 24556877
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
module Agent Agent
parent None None
variant iast iast

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 46 metrics, 8 unstable metrics.

Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.26.0-SNAPSHOT~9ff3556f43, baseline=1.26.0-SNAPSHOT~9d5c7ea524

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.043 s) : 0, 1042895
Total [baseline] (9.324 s) : 0, 9323566
Agent [candidate] (1.044 s) : 0, 1043792
Total [candidate] (9.379 s) : 0, 9379017
section appsec
Agent [baseline] (1.129 s) : 0, 1129465
Total [baseline] (9.382 s) : 0, 9382162
Agent [candidate] (1.132 s) : 0, 1131921
Total [candidate] (9.393 s) : 0, 9393368
section iast
Agent [baseline] (1.17 s) : 0, 1169614
Total [baseline] (9.67 s) : 0, 9669786
Agent [candidate] (1.164 s) : 0, 1163540
Total [candidate] (9.585 s) : 0, 9585415
section profiling
Agent [baseline] (1.235 s) : 0, 1234892
Total [baseline] (9.624 s) : 0, 9624188
Agent [candidate] (1.234 s) : 0, 1234069
Total [candidate] (9.62 s) : 0, 9620486
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.043 s -
Agent appsec 1.129 s 86.57 ms (8.3%)
Agent iast 1.17 s 126.719 ms (12.2%)
Agent profiling 1.235 s 191.997 ms (18.4%)
Total tracing 9.324 s -
Total appsec 9.382 s 58.596 ms (0.6%)
Total iast 9.67 s 346.221 ms (3.7%)
Total profiling 9.624 s 300.622 ms (3.2%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.044 s -
Agent appsec 1.132 s 88.129 ms (8.4%)
Agent iast 1.164 s 119.748 ms (11.5%)
Agent profiling 1.234 s 190.278 ms (18.2%)
Total tracing 9.379 s -
Total appsec 9.393 s 14.35 ms (0.2%)
Total iast 9.585 s 206.398 ms (2.2%)
Total profiling 9.62 s 241.468 ms (2.6%)
gantt
    title petclinic - break down per module: candidate=1.26.0-SNAPSHOT~9ff3556f43, baseline=1.26.0-SNAPSHOT~9d5c7ea524

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (645.987 ms) : 0, 645987
BytebuddyAgent [candidate] (645.54 ms) : 0, 645540
GlobalTracer [baseline] (306.211 ms) : 0, 306211
GlobalTracer [candidate] (308.145 ms) : 0, 308145
AppSec [baseline] (48.455 ms) : 0, 48455
AppSec [candidate] (48.116 ms) : 0, 48116
Remote Config [baseline] (676.881 µs) : 0, 677
Remote Config [candidate] (665.906 µs) : 0, 666
Telemetry [baseline] (7.278 ms) : 0, 7278
Telemetry [candidate] (7.127 ms) : 0, 7127
section appsec
BytebuddyAgent [baseline] (644.67 ms) : 0, 644670
BytebuddyAgent [candidate] (645.766 ms) : 0, 645766
GlobalTracer [baseline] (305.81 ms) : 0, 305810
GlobalTracer [candidate] (307.684 ms) : 0, 307684
AppSec [baseline] (136.546 ms) : 0, 136546
AppSec [candidate] (136.778 ms) : 0, 136778
Remote Config [baseline] (640.592 µs) : 0, 641
Remote Config [candidate] (642.972 µs) : 0, 643
Telemetry [baseline] (7.44 ms) : 0, 7440
Telemetry [candidate] (6.82 ms) : 0, 6820
section iast
BytebuddyAgent [baseline] (773.547 ms) : 0, 773547
BytebuddyAgent [candidate] (768.15 ms) : 0, 768150
GlobalTracer [baseline] (287.294 ms) : 0, 287294
GlobalTracer [candidate] (285.515 ms) : 0, 285515
AppSec [baseline] (46.687 ms) : 0, 46687
AppSec [candidate] (46.585 ms) : 0, 46585
IAST [baseline] (19.455 ms) : 0, 19455
IAST [candidate] (20.187 ms) : 0, 20187
Remote Config [baseline] (601.429 µs) : 0, 601
Remote Config [candidate] (592.491 µs) : 0, 592
Telemetry [baseline] (7.307 ms) : 0, 7307
Telemetry [candidate] (8.079 ms) : 0, 8079
section profiling
BytebuddyAgent [baseline] (656.77 ms) : 0, 656770
BytebuddyAgent [candidate] (657.04 ms) : 0, 657040
GlobalTracer [baseline] (378.046 ms) : 0, 378046
GlobalTracer [candidate] (377.315 ms) : 0, 377315
AppSec [baseline] (48.602 ms) : 0, 48602
AppSec [candidate] (49.059 ms) : 0, 49059
Remote Config [baseline] (691.928 µs) : 0, 692
Remote Config [candidate] (689.338 µs) : 0, 689
Telemetry [baseline] (7.435 ms) : 0, 7435
Telemetry [candidate] (7.379 ms) : 0, 7379
ProfilingAgent [baseline] (89.087 ms) : 0, 89087
ProfilingAgent [candidate] (88.459 ms) : 0, 88459
Profiling [baseline] (89.112 ms) : 0, 89112
Profiling [candidate] (88.486 ms) : 0, 88486
Loading
Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.26.0-SNAPSHOT~9ff3556f43, baseline=1.26.0-SNAPSHOT~9d5c7ea524

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.048 s) : 0, 1048458
Total [baseline] (8.688 s) : 0, 8687760
Agent [candidate] (1.051 s) : 0, 1051089
Total [candidate] (8.726 s) : 0, 8725539
section iast
Agent [baseline] (1.171 s) : 0, 1171246
Total [baseline] (9.306 s) : 0, 9306433
Agent [candidate] (1.163 s) : 0, 1162786
Total [candidate] (9.244 s) : 0, 9243737
section iast_TELEMETRY_OFF
Agent [baseline] (1.151 s) : 0, 1150882
Total [baseline] (9.23 s) : 0, 9229692
Agent [candidate] (1.155 s) : 0, 1154564
Total [candidate] (9.241 s) : 0, 9241046
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.048 s -
Agent iast 1.171 s 122.787 ms (11.7%)
Agent iast_TELEMETRY_OFF 1.151 s 102.424 ms (9.8%)
Total tracing 8.688 s -
Total iast 9.306 s 618.672 ms (7.1%)
Total iast_TELEMETRY_OFF 9.23 s 541.932 ms (6.2%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.051 s -
Agent iast 1.163 s 111.696 ms (10.6%)
Agent iast_TELEMETRY_OFF 1.155 s 103.475 ms (9.8%)
Total tracing 8.726 s -
Total iast 9.244 s 518.197 ms (5.9%)
Total iast_TELEMETRY_OFF 9.241 s 515.507 ms (5.9%)
gantt
    title insecure-bank - break down per module: candidate=1.26.0-SNAPSHOT~9ff3556f43, baseline=1.26.0-SNAPSHOT~9d5c7ea524

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (649.873 ms) : 0, 649873
BytebuddyAgent [candidate] (650.633 ms) : 0, 650633
GlobalTracer [baseline] (307.791 ms) : 0, 307791
GlobalTracer [candidate] (309.395 ms) : 0, 309395
AppSec [baseline] (48.389 ms) : 0, 48389
AppSec [candidate] (48.76 ms) : 0, 48760
Remote Config [baseline] (679.85 µs) : 0, 680
Remote Config [candidate] (669.89 µs) : 0, 670
Telemetry [baseline] (7.182 ms) : 0, 7182
Telemetry [candidate] (7.184 ms) : 0, 7184
section iast
BytebuddyAgent [baseline] (773.806 ms) : 0, 773806
BytebuddyAgent [candidate] (767.874 ms) : 0, 767874
GlobalTracer [baseline] (287.618 ms) : 0, 287618
GlobalTracer [candidate] (285.831 ms) : 0, 285831
AppSec [baseline] (46.715 ms) : 0, 46715
AppSec [candidate] (46.55 ms) : 0, 46550
IAST [baseline] (21.086 ms) : 0, 21086
IAST [candidate] (20.978 ms) : 0, 20978
Remote Config [baseline] (607.268 µs) : 0, 607
Remote Config [candidate] (605.967 µs) : 0, 606
Telemetry [baseline] (6.679 ms) : 0, 6679
Telemetry [candidate] (6.599 ms) : 0, 6599
section iast_TELEMETRY_OFF
BytebuddyAgent [baseline] (758.286 ms) : 0, 758286
BytebuddyAgent [candidate] (759.844 ms) : 0, 759844
GlobalTracer [baseline] (285.004 ms) : 0, 285004
GlobalTracer [candidate] (286.385 ms) : 0, 286385
AppSec [baseline] (47.935 ms) : 0, 47935
AppSec [candidate] (47.801 ms) : 0, 47801
IAST [baseline] (16.832 ms) : 0, 16832
IAST [candidate] (16.989 ms) : 0, 16989
Remote Config [baseline] (590.279 µs) : 0, 590
Remote Config [candidate] (596.845 µs) : 0, 597
Telemetry [baseline] (7.947 ms) : 0, 7947
Telemetry [candidate] (8.738 ms) : 0, 8738
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
end_time 2023-12-06T16:26:10 2023-12-06T16:42:44
git_branch master hokitam/dsm_kafka_cluster
git_commit_date 1701864349 1701878546
git_commit_sha 9d5c7ea 9ff3556
release_version 1.26.0-SNAPSHOT~9d5c7ea524 1.26.0-SNAPSHOT~9ff3556f43
start_time 2023-12-06T16:25:57 2023-12-06T16:42:30
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1701881217 1701881217
ci_job_id 383645439 383645439
ci_pipeline_id 24556877 24556877
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
variant iast iast

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 9 metrics, 13 unstable metrics.

Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.26.0-SNAPSHOT~9ff3556f43, baseline=1.26.0-SNAPSHOT~9d5c7ea524
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.344 ms) : 1325, 1363
.   : milestone, 1344,
appsec (1.776 ms) : 1751, 1801
.   : milestone, 1776,
iast (1.53 ms) : 1506, 1554
.   : milestone, 1530,
profiling (1.549 ms) : 1522, 1575
.   : milestone, 1549,
tracing (1.481 ms) : 1456, 1507
.   : milestone, 1481,
section candidate
no_agent (1.346 ms) : 1327, 1365
.   : milestone, 1346,
appsec (1.724 ms) : 1698, 1749
.   : milestone, 1724,
iast (1.541 ms) : 1517, 1566
.   : milestone, 1541,
profiling (1.574 ms) : 1548, 1601
.   : milestone, 1574,
tracing (1.511 ms) : 1486, 1536
.   : milestone, 1511,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.344 ms [1.325 ms, 1.363 ms] -
appsec 1.776 ms [1.751 ms, 1.801 ms] 432.168 µs (32.2%)
iast 1.53 ms [1.506 ms, 1.554 ms] 186.234 µs (13.9%)
profiling 1.549 ms [1.522 ms, 1.575 ms] 205.176 µs (15.3%)
tracing 1.481 ms [1.456 ms, 1.507 ms] 137.628 µs (10.2%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.346 ms [1.327 ms, 1.365 ms] -
appsec 1.724 ms [1.698 ms, 1.749 ms] 377.56 µs (28.0%)
iast 1.541 ms [1.517 ms, 1.566 ms] 195.288 µs (14.5%)
profiling 1.574 ms [1.548 ms, 1.601 ms] 228.282 µs (17.0%)
tracing 1.511 ms [1.486 ms, 1.536 ms] 164.834 µs (12.2%)
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.26.0-SNAPSHOT~9ff3556f43, baseline=1.26.0-SNAPSHOT~9d5c7ea524
    dateFormat X
    axisFormat %s
section baseline
no_agent (365.994 µs) : 346, 386
.   : milestone, 366,
iast (486.675 µs) : 466, 507
.   : milestone, 487,
iast_FULL (533.205 µs) : 513, 554
.   : milestone, 533,
iast_INACTIVE (441.426 µs) : 421, 462
.   : milestone, 441,
iast_TELEMETRY_OFF (481.713 µs) : 461, 503
.   : milestone, 482,
tracing (444.854 µs) : 424, 466
.   : milestone, 445,
section candidate
no_agent (359.981 µs) : 341, 379
.   : milestone, 360,
iast (474.844 µs) : 454, 496
.   : milestone, 475,
iast_FULL (533.107 µs) : 513, 553
.   : milestone, 533,
iast_INACTIVE (446.558 µs) : 425, 468
.   : milestone, 447,
iast_TELEMETRY_OFF (465.261 µs) : 445, 486
.   : milestone, 465,
tracing (444.988 µs) : 424, 466
.   : milestone, 445,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 365.994 µs [346.056 µs, 385.931 µs] -
iast 486.675 µs [465.919 µs, 507.431 µs] 120.681 µs (33.0%)
iast_FULL 533.205 µs [512.502 µs, 553.908 µs] 167.211 µs (45.7%)
iast_INACTIVE 441.426 µs [420.972 µs, 461.88 µs] 75.432 µs (20.6%)
iast_TELEMETRY_OFF 481.713 µs [460.747 µs, 502.679 µs] 115.72 µs (31.6%)
tracing 444.854 µs [424.192 µs, 465.516 µs] 78.861 µs (21.5%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 359.981 µs [340.501 µs, 379.46 µs] -
iast 474.844 µs [454.077 µs, 495.611 µs] 114.864 µs (31.9%)
iast_FULL 533.107 µs [512.753 µs, 553.46 µs] 173.126 µs (48.1%)
iast_INACTIVE 446.558 µs [425.239 µs, 467.878 µs] 86.578 µs (24.1%)
iast_TELEMETRY_OFF 465.261 µs [444.7 µs, 485.822 µs] 105.281 µs (29.2%)
tracing 444.988 µs [424.426 µs, 465.551 µs] 85.008 µs (23.6%)

@bm1549 bm1549 added the comp: data streams Data Streams Monitoring label Oct 12, 2023
producerProps.put(ProducerConfig.METADATA_MAX_AGE_CONFIG, 1000)
def producerFactory = new DefaultKafkaProducerFactory<String, String>(producerProps)
def kafkaTemplate = new KafkaTemplate<String, String>(producerFactory)
kafkaTemplate.flush()

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test may be flaky, depending on how the metadata update is done. Maybe we can check for the data we need in a while loop, until we get the data or some reasonable timeout is reached?

if (iterator != null) {
String group = InstrumentationContext.get(ConsumerRecords.class, String.class).get(records);
iterator = new TracingIterator(iterator, KAFKA_CONSUME, CONSUMER_DECORATE, group);
String group = null;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: it seems like this code is repeated several times, maybe we can extract it to a static method? Something like props = KafkaConsumerInfo.get(record)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated by passing ContextStore as recommended by the APM Java team

return clientMetadata;
}

public static class Builder {

@dougqh dougqh Oct 24, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Builders are rather wasteful in terms of overhead.
For just two parameters, a simple static factory method would be sufficient.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removed the Builder


@Override
public int hashCode() {
return Objects.hash(consumerGroup, clientMetadata);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Objects.hash performs poorly. If this is on the hot path, you should should implement hashCode in a more direct fashion.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we only use KafkaConsumerInfo as a value to the context store, not as a key, so it shouldn't be on the hot path, but updated the implementation to match what Pair does just in case.

@Override
public Map<String, String> contextStore() {
return singletonMap("org.apache.kafka.clients.consumer.ConsumerRecords", "java.lang.String");
Map<String, String> contextStores = new HashMap<>();

@dougqh dougqh Oct 24, 2023

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose this is only called once, but size the collection?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done

if (iterable != null) {
String group = InstrumentationContext.get(ConsumerRecords.class, String.class).get(records);
iterable = new TracingList(iterable, KAFKA_CONSUME, CONSUMER_DECORATE, group);
Pair<String, String> data =

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks like extra overhead that is always on -- even when DSM is disabled.
That's a violation of our requirement that DSM imposes no overhead when not enabled.
I'd like to see this benchmarked to determine the cost.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I benchmarked this yesterday using JMH. For the produce call I simply called kafkaProducer.send in the benchmark method, whereas to benchmark the consume call I pre-sent 100k messages in setup and then called kafkaConsume.poll in the benchmark method. Here is the results:

Screen Shot 2023-10-25 at 9 42 20 AM

import org.apache.kafka.clients.consumer.ConsumerRecords;

public class KafkaConsumerInstrumentationHelper {
public static Pair<String, String> extractGroupAndClusterId(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Allocating a Pair object all the time is worrisome from a performance perspective.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

refactored to not use a Pair anymore. Though we technically still have a Pair-like structure in KafkaConsumerInfo

producer.flush()
clusterId = producer.metadata.cluster.clusterResource().clusterId()
while (clusterId == null || clusterId.isEmpty()) {
Thread.sleep(1500)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not keen on adding sleep-s into the test. Is there some better way to coordinate the test verification?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can also just remove the Thread.sleep and it would still work, because we're just waiting for the data to come back from Embedded kafka. Otherwise, we might also be able to add resource listeners by directly accessing it from the metadata (https://github.com/apache/kafka/blob/0.11.0/clients/src/main/java/org/apache/kafka/clients/Metadata.java#L99) But then we'll have to run the test inside the listener, which I'm not quite sure if it's feasible.

lmk what your thoughts are!

@dougqh dougqh left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm concerned by the overhead being added into the instrumentation.
I'm particularly concerned that it looks like this overhead is being added all the time not just when DSM is enabled.

@hokitam
hokitam merged commit 24b4605 into master Dec 14, 2023
@hokitam
hokitam deleted the hokitam/dsm_kafka_cluster branch December 14, 2023 14:33
@github-actions github-actions Bot added this to the 1.26.0 milestone Dec 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp: data streams Data Streams Monitoring

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants