[
https://issues.apache.org/jira/browse/KAFKA-3923?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15358761#comment-15358761
]
Igor Stepanov commented on KAFKA-3923:
--------------------------------------
If you consider this worth to be improved, let me share what I've found already.
1. Tried to "generify" MetricsReporter:
{code:java}
public interface MetricsReporter<T extends Metric> extends Configurable {
public void init(List<T> metrics);
public void metricChange(T metric);
...
}
{code}
This approach affected only MetricsReporter & JmxReporter and looked very
promising, but I've got an error in Scala code:
{quote}
/Users/igorstepanov/git/github/kafka/core/src/main/scala/kafka/server/KafkaConfig.scala:887:
trait MetricsReporter takes type parameters
val metricReporterClasses: java.util.List[MetricsReporter] =
getConfiguredInstances(KafkaConfig.MetricReporterClassesProp,
classOf[MetricsReporter])
^
/Users/igorstepanov/git/github/kafka/core/src/main/scala/kafka/server/KafkaConfig.scala:887:
trait MetricsReporter takes type parameters
val metricReporterClasses: java.util.List[MetricsReporter] =
getConfiguredInstances(KafkaConfig.MetricReporterClassesProp,
classOf[MetricsReporter])
^
/Users/igorstepanov/git/github/kafka/core/src/main/scala/kafka/server/KafkaServer.scala:99:
trait MetricsReporter takes type parameters
private val reporters: java.util.List[MetricsReporter] =
config.metricReporterClasses
{quote}
2. Tried just replacing KafkaMetric with Metric in most cases - this affected
also Metrics class (in addition to MetricsReporter & JmxReporter), but again
got error in Scala:
{quote}
/Users/igorstepanov/git/github/kafka/core/src/main/scala/kafka/server/ClientQuotaManager.scala:121:
type mismatch;
found : org.apache.kafka.common.Metric
required: org.apache.kafka.common.metrics.KafkaMetric
throttleTimeMs = throttleTime(clientMetric,
getQuotaMetricConfig(quota(clientId)))
{quote}
As I don't have the required experience with Scala, I've decided to stop at
this point and consult with you.
> MetricReporter interface depends on final class KafkaMetric instead of Metric
> interface
> ---------------------------------------------------------------------------------------
>
> Key: KAFKA-3923
> URL: https://issues.apache.org/jira/browse/KAFKA-3923
> Project: Kafka
> Issue Type: Improvement
> Components: clients
> Reporter: Igor Stepanov
>
> Hello,
> I'm working on exposing Kafka's consumer/producer metrics to Spring Actuator.
> To achieve this, I've implemented Kafka's MetricReporter interface to allow
> injecting it into the appropriate consumer/producer. No issues with
> implementation itself, fine for me.
> But now I've moved to writing unit tests for this implementation and decided
> to use mocked KafkaMetric instances for this. But mocking of KafkaMetric
> itself is not so plain - the class is final. The logical step is to use
> Metric interface for mocking, but MetricReporter accepts only KafkaMetric.
> I know that technically I can use PowerMock and most probably it will work
> fine in this case, but talking about Kafka itself, is it a good approach to
> depend on the exact implementation when interface fulfils most of the needs?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)