Jason, Kyle,

I created an 0.8.2 blocker https://issues.apache.org/jira/browse/KAFKA-1902
and attached a patch there. Could you test it out and see if it fixes the
issue with the reporter? The patch adds tags as scope in MetricName.

Thanks,

Jun

On Tue, Jan 27, 2015 at 7:39 AM, Jun Rao <j...@confluent.io> wrote:

> 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.
>> > > >> >
>> > > >>
>> > > >
>> > > >
>> > >
>> >
>>
>
>

Reply via email to