[ https://issues.apache.org/jira/browse/KAFKA-6819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guozhang Wang resolved KAFKA-6819. ---------------------------------- Fix Version/s: 2.5.0 Resolution: Fixed > Refactor build-in StreamsMetrics internal implementations > --------------------------------------------------------- > > Key: KAFKA-6819 > URL: https://issues.apache.org/jira/browse/KAFKA-6819 > Project: Kafka > Issue Type: Improvement > Components: streams > Reporter: Guozhang Wang > Assignee: Bruno Cadonna > Priority: Major > Fix For: 2.5.0 > > > Our current internal implementations of StreamsMetrics and different layered > metrics like StreamMetricsThreadImpl, TaskMetrics, NodeMetrics etc are a bit > messy nowadays. We could improve on the current situation by doing the > following: > 0. For thread-level metrics, refactor the {{StreamsMetricsThreadImpl}} class > to {{ThreadMetrics}} such that a) it does not extend from > {{StreamsMetricsImpl}} but just include the {{StreamsMetricsThreadImpl}} as > its constructor parameters. And make its constructor, replacing with a static > {{addAllSensors(threadName)}} that tries to register all the thread-level > sensors for the given thread name. > 1. Add a static function for each of the built-in sensors of the thread-level > metrics in {{ThreadMetrics}} that relies on the internal > {{StreamsMetricsConventions}} to get thread level sensor names. If the sensor > cannot be found from the internal {{Metrics}} registry, create the sensor > on-the-fly. > 2.a Add a static {{removeAllSensors(threadName)}} function in > {{ThreadMetrics}} that tries to de-register all the thread-level metrics for > this thread, if there is no sensors then it will be a no-op. In > {{StreamThread#close()}} we will trigger this function; and similarly in > `TopologyTestDriver` when we close the driver we will also call this function > as well. As a result, the {{ThreadMetrics}} class itself would only contain > static functions with no member fields at all. > 2.b We can consider doing the same for {{TaskMetrics}}, {{NodeMetrics}} and > {{NamedCacheMetrics}} as well, and add a {{StoreMetrics}} following the > similar pattern: although these metrics are not accessed externally to their > enclosing class in the future this may be changed as well. > 3. Then, we only pass {{StreamsMetricsImpl}} around between the internal > classes, to access the specific sensor whenever trying to record it. -- This message was sent by Atlassian Jira (v8.3.4#803005)