[ 
https://issues.apache.org/jira/browse/KAFKA-622?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13502889#comment-13502889
 ] 

Neha Narkhede commented on KAFKA-622:
-------------------------------------

Thanks for incorporating suggestions in the first review!

1. AbstractFetcherThread.scala

FetcherLagMetrics now takes in a nested tuples. Scala's support for tuples 
makes it easier to express short lived data structures that need to be paired 
conveniently, but they tend to reduce code readability. In addition to this, 
we've been bitten by incomplete Scala semantics when comparing two tuples or 
using them for some of the functional programming collections APIs. Over time, 
as we understood this more, we now encourage use of tuples only for expressing 
short lived objects within maybe the same API. We haven't changed all the past 
usages to conform to this yet, but we do hope we can avoid this in the future 
usage. Having said that, I think here it is a good idea to change this to 
accept two arguments - String and TopicAndPartition.

2. ClientUtils

Both producers and consumers use this API to fetch metadata and it seems like 
we have hardcoded the clientId. The clientId to create sync producer should be 
the one that the consumer/producer is instantiated with. 

3. Producer.scala

3.1 I think you are validating the clientId twice in the constructor that takes 
in just the ProducerConfig. 
3.2 Maybe this was done for convenience, what is the reason that the 
constructor argument to ProducerTopicMetrics is a tuple vs 2 separate strings ? 
3.3 We definitely want to avoid this - 
  private val stats = new Pool[(String, String), 
ProducerTopicMetrics](Some(valueFactory))
Change this to use a case class TopicAndClientId here as well as 
ConsumerTopicStats.scala.

4. ProducerPool.scala

createSyncProducer is overloaded to create 2 very similar but confusing 
methods. One takes Broker as the second argument, the other takes it as the 
first argument. I see why you need two, but it will be great to add some docs 
to explain where each of those is used.

5. ProducerSendThread.scala

There needs to be a delimiter ("-") between the clientId and ProducerQueueSize 

6. ProducerConfig

Not sure which patch introduced this property, but it is inconsistent with the 
property naming conventions. It happens to be the only one that uses an 
underscore in the property name. Besides, the one in the consumer is called 
just clientid. Let's please change this to clientid. 

val clientId = 
props.getString("producer.request.client_id",SyncProducerConfig.DefaultClientId)

7. ZookeeperConsumerConnector

It will be good to have some summary stats here that aggregates from individual 
simple consumers. Often users wouldn't want to do this math themselves. 

8. What happened to ConsumerTopicStats ?


                
> Create mbeans per client 
> -------------------------
>
>                 Key: KAFKA-622
>                 URL: https://issues.apache.org/jira/browse/KAFKA-622
>             Project: Kafka
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 0.8
>            Reporter: Swapnil Ghike
>            Assignee: Swapnil Ghike
>            Priority: Blocker
>              Labels: bugs, improvement
>             Fix For: 0.8
>
>         Attachments: kafka-622-v1.patch, kafka-622-v2.patch
>
>
> Currently we create one mbean of each type for a given mbean server, 
> regardless of the number of clients. We should create MBeans per client for 
> both producer and consumer. To do that we need to introduce clientId in mbean 
> names.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to