> On Aug. 1, 2014, 11:33 p.m., Guozhang Wang wrote:
> > To be more precisely, in the old clients we have four stats classes:
> > 
> > 1. ProducerTopicStats
> > 2. ProducerRequestStats
> > 3. ProducerStats
> > 4. FetchRequestAndResponseStats
> > 5. ConsumerTopicStats
> > 
> > Among them:
> > 
> > 1) is accessed by Producer and DefaultEventHandler
> > 2) is accessed by SyncProducer
> > 3) is accessed by DefaultEventHandler
> > 4) is accessed by SimpleConsumer
> > 5) is accessed by ConsumerIterator, PartitionTopicInfo, and 
> > ZookeeperConsumerConnector
> > 
> > All of the above modules can have or already have a close() call. Since for 
> > all of the metrics, we create new instances through client-ids. And hence, 
> > upon closing all these above modules we can just pass in the client id 
> > string to the Stats factories to close the metrics, and by doing so we do 
> > not need to keep track of the metrics owner.

Thank you very much for the review, Guozhang. The reason I passed in the 
metricOwner is because in this approach I have a global metric registry in 
KafkaMetricsGroup. That means whennever a metric is created with 
newGauge(),newMeter(),newTimer(),newHistogram(), a metric owner has to be 
specified. The same metric owner is needed for deregister the metric from 
yammer.
In those five stats, they do the following two things:
1. create a kafka metric object(e.g. ConsumerTopicsMetrics) and put them into 
their own registry.
2. create yammer metrics and register them to yammer.
While the kafka metrics can be removed easily with a client-id, deleting the 
yammer metrics needs more name translation. It could also potentially make the 
interaction with KafkaMetricsGroup less unified as there are many other stand 
alone metrics not using the stats factory.
Jun also pointed out another issue that the current approach with a global 
yammer metrics map has insufficient isolation between objects and is somewhat 
hacky. Instead of a global metric map, he suggested to create a single metric 
registry for each instance and deregister the metrics in the registry when the 
instance exits. Without a global registry, maybe the metric owner is no longer 
needed to be passed in.
Thanks!


- Jiangjie


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/24196/#review49401
-----------------------------------------------------------


On Aug. 1, 2014, 9:26 p.m., Jiangjie Qin wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/24196/
> -----------------------------------------------------------
> 
> (Updated Aug. 1, 2014, 9:26 p.m.)
> 
> 
> Review request for kafka.
> 
> 
> Bugs: KAFKA-1567
>     https://issues.apache.org/jira/browse/KAFKA-1567
> 
> 
> Repository: kafka
> 
> 
> Description
> -------
> 
> fix for metric memory leaking issue.
> 
> 
> Diffs
> -----
> 
>   core/src/main/scala/kafka/client/ClientUtils.scala 
> ce7ede3f6d60e756e252257bd8c6fedc21f21e1c 
>   core/src/main/scala/kafka/consumer/ConsumerFetcherManager.scala 
> b9e2bea7b442a19bcebd1b350d39541a8c9dd068 
>   core/src/main/scala/kafka/consumer/ConsumerIterator.scala 
> ac491b4da2583ef7227c67f5b8bc0fd731d705c3 
>   core/src/main/scala/kafka/consumer/ConsumerTopicStats.scala 
> ff5f470f7aa304917d3295fcb7702291ce7fe0b5 
>   core/src/main/scala/kafka/consumer/FetchRequestAndResponseStats.scala 
> 875eeeb73cba5bd034349f5e7b6e16dfdf544254 
>   core/src/main/scala/kafka/consumer/KafkaStream.scala 
> 805e91677034edcca74c74dab01a6d6d437ae442 
>   core/src/main/scala/kafka/consumer/PartitionTopicInfo.scala 
> 9c779ce072fb0a3426e96fd77f383cce6991a0f9 
>   core/src/main/scala/kafka/consumer/SimpleConsumer.scala 
> 0e64632210385ef63c2ad3445b55ac4f37a63df2 
>   core/src/main/scala/kafka/consumer/ZookeeperConsumerConnector.scala 
> 65f518d47c7555c42c4bff39c211814831f4b8b6 
>   core/src/main/scala/kafka/metrics/KafkaMetricsGroup.scala 
> a20ab90165cc7ebb1cf44078efe23a53938c8df6 
>   core/src/main/scala/kafka/producer/Producer.scala 
> 4798481d573bbdce0ba39035c50f4c4411ad0469 
>   core/src/main/scala/kafka/producer/ProducerRequestStats.scala 
> 96942205a6a461e122e003add1ab9bcebde1fe16 
>   core/src/main/scala/kafka/producer/ProducerStats.scala 
> e1610d3c602fb0f5f4cc237cb8b4e0d168a41530 
>   core/src/main/scala/kafka/producer/ProducerTopicStats.scala 
> ed209f4773dedb09e9a34005e6849730229aa6e9 
>   core/src/main/scala/kafka/producer/SyncProducer.scala 
> 489f0077512d9a69be81649c490274964290fa40 
>   core/src/main/scala/kafka/producer/async/DefaultEventHandler.scala 
> d8ac915de31a26d7aa67760d69373975cacd0c9d 
>   core/src/main/scala/kafka/producer/async/ProducerSendThread.scala 
> 42e9c741c2dcef756416832f11d37678cb7710ee 
>   core/src/main/scala/kafka/server/AbstractFetcherManager.scala 
> 9390edf37dae9815d4a3790fdd31dac422382698 
>   core/src/main/scala/kafka/server/AbstractFetcherThread.scala 
> 3b15254f32252cf824d7a292889ac7662d73ada1 
>   gradle.properties 4827769a3f8e34f0fe7e783eb58e44d4db04859b 
> 
> Diff: https://reviews.apache.org/r/24196/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Jiangjie Qin
> 
>

Reply via email to