You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "Guozhang Wang (Jira)" <ji...@apache.org> on 2020/03/02 17:09:00 UTC

[jira] [Resolved] (KAFKA-6819) Refactor build-in StreamsMetrics internal implementations

     [ 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)