Jason, So, this sounds like a real issue. Perhaps we can fix it just by setting the tag name as the scope. For example, for mbean kafka.server:type= BrokerTopicMetrics,name=BytesInPerSec,topic=test, we can have
group: "kafka.server" type: "BrokerTopicMetrics" name: "BytesInPerSec" scope: "topic=test" Do you know if scope can have characters like "=" and "," (e.g., for scope like "topic=test,partition=1")? The issue with using mytopic-BytesInPerSec as the name is what we are trying to fix in kafka-1481. Topic name (and clientId, etc) can have dash in it and it's hard to parse. Thanks, Jun On Tue, Jan 27, 2015 at 6:30 AM, Jason Rosenberg <j...@squareup.com> wrote: > Remember multiple people have reported this issue. Per topic metrics no > longer appear in graphite (or in any system modeled after the yammer > GraphiteReporter). They are not being seen as unique. > > While these metrics are registered in the registry as separate ‘MetricName’ > instances (varying only by mbeanName), the GraphiteReporter sends the > metrics to graphite using only the 4 fields I describe above. Consequently, > multiple metrics in the registry get sent to graphite under the same name. > Thus these metrics all end up in the same bucket in graphite, trampling > over each other making them useless. They aren’t ‘double counted’ so much > as flapping between multiple independent values. > > We actually have our own Reporter class (based off the yammer > GraphiteReporter). Our version sends metrics through kafka which is then > consumed downstream by multiple metric consumers. > > The ConsoleReporter isn’t useful for actually persisting metrics anywhere. > It’s just iterating through all the (identically named metrics in the > registry (save for the different mbeanNames))…. > > The mbeanName, as constructed, is not useful as a human readable metric > name, to be presented in a browsable tree of metrics, etc. The > ‘group’:’type’:’name’:’scope’ are the pieces that matter. > > The fix here is to produce MetricName instances similar to 0.8.1.1, etc. In > this case, it should probably be something like: > > group: kafka.server > type: BrokerTopicMetrics > name: mytopic-BytesInPerSec > group: <unused> > > Jason > > > On Tue, Jan 27, 2015 at 7:26 AM, Manikumar Reddy <ku...@nmsworks.co.in> > wrote: > > > I have enabled yammer's ConsoleReporter and I am getting all the metrics > > (including per-topic metrics). > > > > Yammer's MetricName object implements equals/hashcode methods using > > mBeanName . We are constructing a unique mBeanName for each metric, So we > > are not missing/overwriting any metrics. > > > > Current confusion is due to MetricName.name(). This will be same > > (BytesInPerSec) for both broker level and topic level metrics. We need to > > use MetricName.getMBeanName() to differentiate between broker level and > > topic level metrics. > > > > 0.8.1 MBeanName: > > "kafka.server":type="BrokerTopicMetrics",name="AllTopicsBytesInPerSec" > > "kafka.server":type="BrokerTopicMetrics",name="MYTOPIC-BytesInPerSec" > > > > 0.8.2 MBeanName: > > kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec > > kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec,topic=MYTOPIC > > > > > > ConsoleReporter's O/P: > > > > BytesInPerSec: <- This is broker level > > count = 1521 > > mean rate = 3.63 bytes/s > > 1-minute rate = 0.35 bytes/s > > 5-minute rate = 2.07 bytes/s > > 15-minute rate = 1.25 bytes/s > > > > BytesInPerSec: <- This is for topic1 > > count = 626 > > mean rate = 1.89 bytes/s > > 1-minute rate = 0.42 bytes/s > > 5-minute rate = 31.53 bytes/s > > 15-minute rate = 64.66 bytes/s > > > > BytesInPerSec: <- This is for topic2 > > count = 895 > > mean rate = 3.62 bytes/s > > 1-minute rate = 1.39 bytes/s > > 5-minute rate = 30.08 bytes/s > > 15-minute rate = 50.27 bytes/s > > > > Manikumar > > > > On Tue, Jan 27, 2015 at 1:59 PM, Jason Rosenberg <j...@squareup.com> > wrote: > > > > > Ok, > > > > > > It looks like the yammer MetricName is not being created correctly for > > the > > > sub metrics that include a topic. E.g. a metric with an mbeanName like: > > > > > > > > > kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec,topic=mytopic > > > > > > appears to be malformed. A yammer MetricName has 4 fields that are used > > in > > > creating a graphite metric, that are included in the constructor: > > > group, type, name, scope. > > > > > > In this case, the metric with the above mbeanName has these fields set > in > > > the MetricName: > > > > > > group: "kafka.server" > > > type: "BrokerTopicMetrics" > > > name: "BytesInPerSec" > > > scope: null > > > > > > Thus, the topic metrics all look the same, and get lumped into the > > > top-level BrokerTopicMetrics (and thus that will now be double > counted). > > It > > > looks like the fix for kafka-1481 was where things got broken. It seems > > to > > > have introduced ‘tags’ in the building of metric names, and then those > > tags > > > only get applied to the mbeanName, but get excluded from the metric > name: > > > > > > > > > https://github.com/apache/kafka/commit/457744a820d806e546edebbd8ffd33f6772e519f > > > > > > This is a pretty severe issue, since the yammer metrics for these stats > > > will be double counted in aggregate, and the per-topic stats will be > > > removed. > > > > > > I should note too, in my previous email, I thought that only the > > per-topic > > > BrokerTopicMetrics were missing, but also several other per-topic > metrics > > > are missing too, e.g. under kafka.log, etc. > > > > > > Jason > > > > > > > > > On Tue, Jan 27, 2015 at 2:20 AM, Jason Rosenberg <j...@squareup.com> > > wrote: > > > > > > > I can confirm that the per topic metrics are not coming through to > the > > > > yammer metrics registry. I do see them in jmx (via jconsole), but > the > > > > MetricsRegistry does not have them. > > > > All the other metrics are coming through that appear in jmx. > > > > > > > > This is with single node instance running locally. > > > > > > > > Jason > > > > > > > > > > > > > > > > On Mon, Jan 26, 2015 at 8:30 PM, Manikumar Reddy < > ku...@nmsworks.co.in > > > > > > > wrote: > > > > > > > >> If you are using multi-node cluster, then metrics may be reported > from > > > >> other servers. > > > >> pl check all the servers in the cluster. > > > >> > > > >> On Tue, Jan 27, 2015 at 4:12 AM, Kyle Banker <kyleban...@gmail.com> > > > >> wrote: > > > >> > > > >> > I've been using a custom KafkaMetricsReporter to report Kafka > broker > > > >> > metrics to Graphite. In v0.8.1.1, Kafka was reporting bytes and > > > >> messages in > > > >> > and out for all topics together and for each individual topic. > > > >> > > > > >> > After upgrading to v0.8.2.0, these metrics are no longer being > > > reported. > > > >> > > > > >> > I'm only seeing the following: > > > >> > BrokerTopicMetrics > > > >> > - BytesInPerSec > > > >> > - BytesOutPerSec > > > >> > - BytesRejectedPerSec > > > >> > - MessagesInPerSec > > > >> > > > > >> > What's more, despite lots of successful writes to the cluster, the > > > >> values > > > >> > for these remaining metrics are all zero. > > > >> > > > > >> > I saw that there was some refactoring of metric naming code. Was > the > > > >> > behavior supposed to have changed? > > > >> > > > > >> > Many thanks in advance. > > > >> > > > > >> > > > > > > > > > > > > > >