If we are committed to migrating the broker side metrics to KM for the next
release, we will need to (1) have a story on supporting common reporters
(as listed in KAFKA-1930), and (2) see if the current histogram support is
good enough for measuring things like request time.

Thanks,

Jun

On Mon, Mar 30, 2015 at 3:03 PM, Aditya Auradkar <
aaurad...@linkedin.com.invalid> wrote:

> If we do plan to use the network code in client, I think that is a good
> reason in favor of migration. It will be unnecessary to have metrics from
> multiple libraries coexist since our users will have to start monitoring
> these new metrics anyway.
>
> I also agree with Jay that in multi-tenant clusters people care about
> detailed statistics for their own application over global numbers.
>
> Based on the arguments so far, I'm +1 for migrating to KM.
>
> Thanks,
> Aditya
>
> ________________________________________
> From: Jun Rao [j...@confluent.io]
> Sent: Sunday, March 29, 2015 9:44 AM
> To: dev@kafka.apache.org
> Subject: Re: Metrics package discussion
>
> There is another thing to consider. We plan to reuse the client components
> on the server side over time. For example, as part of the security work, we
> are looking into replacing the server side network code with the client
> network code (KAFKA-1928). However, the client network already has metrics
> based on KM.
>
> Thanks,
>
> Jun
>
> On Sat, Mar 28, 2015 at 1:34 PM, Jay Kreps <jay.kr...@gmail.com> wrote:
>
> > I think Joel's summary is good.
> >
> > I'll add a few more points:
> >
> > As discussed memory matter a lot if we want to be able to give
> percentiles
> > at the client or topic level, in which case we will have thousands of
> them.
> > If we just do histograms at the global level then it is not a concern.
> The
> > argument for doing histograms at the client and topic level is that
> > averages are often very misleading, especially for latency information or
> > other asymmetric distributions. Most people who care about this kind of
> > thing would say the same. If you are a user of a multi-tenant cluster
> then
> > you probably care a lot more about stats for your application or your
> topic
> > rather than the global, so it could be nice to have histograms for
> these. I
> > don't feel super strongly about this.
> >
> > The ExponentiallyDecayingSample is internally
> > a ConcurrentSkipListMap<Double, Long>. This seems to have an overhead of
> > about 64 bytes per entry. So a 1000 element sample is 64KB. For global
> > metrics this is fine, but for granular metrics not workable.
> >
> > Two other issues I'm not sure about:
> >
> > 1. Is there a way to get metric descriptions into the coda hale JMX
> output?
> > One of the really nicest practical things about the new client metrics is
> > that if you look at them in jconsole each metric has an associated
> > description that explains what it means. I think this is a nice usability
> > thing--it is really hard to know what to make of the current metrics
> > without this kind of documentation and keeping separate docs up-to-date
> is
> > really hard and even if you do it most people won't find it.
> >
> > 2. I'm not clear if the sample decay in the histogram is actually the
> same
> > as for the other stats. It seems like it isn't but this would make
> > interpretation quite difficult. In other words if I have N metrics
> > including some Histograms some Meters, etc are all these measurements all
> > taken over the same time window? I actually think they are not, it looks
> > like there are different sampling methodologies across. So this means if
> > you have a dashboard that plots these things side by side the measurement
> > at a given point in time is not actually comparable across multiple
> stats.
> > Am I confused about this?
> >
> > -Jay
> >
> >
> > On Fri, Mar 27, 2015 at 6:27 PM, Joel Koshy <jjkosh...@gmail.com> wrote:
> >
> > > For the samples: it will be at least double that estimate I think
> > > since the long array contains (eight byte) references to the actual
> > > longs, each of which also have some object overhead.
> > >
> > > Re: testing: actually, it looks like YM metrics does allow you to
> > > drop in your own clock:
> > >
> > >
> >
> https://github.com/dropwizard/metrics/blob/master/metrics-core/src/main/java/com/codahale/metrics/Clock.java
> > >
> > >
> >
> https://github.com/dropwizard/metrics/blob/master/metrics-core/src/main/java/com/codahale/metrics/Meter.java#L36
> > >
> > > Not sure if it was mentioned in this (or some recent) thread but a
> > > major motivation in the kafka-common metrics (KM) was absorbing API
> > > changes and even mbean naming conventions. For e.g., in the early
> > > stages of 0.8 we picked up YM metrics 3.x but collided with client
> > > apps at LinkedIn which were still on 2.x. We ended up changing our
> > > code to use 2.x in the end. Having our own metrics package makes us
> > > less vulnerable to these kinds of changes. The multiple version
> > > collision problem is obviously less of an issue with the broker but we
> > > are still exposed to possible metric changes in YM metrics.
> > >
> > > I'm wondering if we need to weigh too much toward the memory overheads
> > > of histograms in making a decision here simply because I don't think
> > > we have found them to be an extreme necessity for
> > > per-clientid/per-partition metrics and they are more critical for
> > > aggregate (global) metrics.
> > >
> > > So it seems the main benefits of switching to KM metrics are:
> > > - Less exposure to YM metrics changes
> > > - More control over the actual implementation. E.g., there is
> > >   considerable research on implementing approximate-but-good-enough
> > >   histograms/percentiles that we can try out
> > > - Differences (improvements) from YM metrics such as:
> > >   - hierarchical sensors
> > >   - integrated with quota enforcement
> > >   - mbeans can logically group attributes computed from different
> > >     sensors. So there is logical grouping (as opposed to a separate
> > >     mbean per sensor as is the case in YM metrics).
> > >
> > > The main disadvantages:
> > > - Everyone's graphs and alerts will break and need to be updated
> > > - Histogram support needs to be tested more/improved
> > >
> > > The first disadvantage is a big one but we aren't exactly immune to
> > > that if we stick with YM.
> > >
> > > BTW with KM metrics we should also provide reporters (graphite,
> > > ganglia) but we probably need to do this anyway since the new clients
> > > are on KM metrics.
> > >
> > > Thanks,
> > >
> > > Joel
> > >
> > > On Fri, Mar 27, 2015 at 06:48:48PM +0000, Aditya Auradkar wrote:
> > > > Adding to what Jay said.
> > > >
> > > > The library maintains 1k samples by default. The UniformSample has a
> > > long array so about 8k overhead per histogram. The
> > > ExponentiallyDecayingSample (which is what we use) has a 16 byte
> overhead
> > > per stored sample, so about 16k per histogram. So 10k histograms (worst
> > > case? metrics per partition and client) is about 160MB of memory in the
> > > broker.
> > > >
> > > > Copying is also a problem. For  percentiles on HistogramMBean, the
> > > implementation does a copy of the entire array. For e.g., if we called
> > > get50Percentile() and get75Percentile(), the entire array would get
> > copied
> > > twice which is pretty bad if we called each metric on every MBean.
> > > >
> > > > Another point Joel mentioned is that codahale metrics are harder to
> > > write tests against because we cannot pass in a Clock.
> > > >
> > > > IMO, if a library is preventing us from adding all the metrics that
> we
> > > want to add and we have a viable alternative, we should replace it. It
> > > might be short term pain but in the long run we will have more useful
> > > graphs.
> > > > What do people think? I can start a vote thread on this once we have
> a
> > > couple more opinions.
> > > >
> > > > Thanks,
> > > > Aditya
> > > > ________________________________________
> > > > From: Jay Kreps [jay.kr...@gmail.com]
> > > > Sent: Thursday, March 26, 2015 2:29 PM
> > > > To: dev@kafka.apache.org
> > > > Subject: Re: Metrics package discussion
> > > >
> > > > Yeah that is a good summary.
> > > >
> > > > The reason we don't use histograms heavily in the server is because
> of
> > > the
> > > > memory issues. We originally did use histograms for everything, then
> we
> > > ran
> > > > into all these issues, and ripped them out. Whether they are really
> > > useful
> > > > or not, I don't know. Averages can be pretty misleading so it can be
> > nice
> > > > but I don't know that it is critical.
> > > >
> > > > -Jay
> > > >
> > > > On Thu, Mar 26, 2015 at 1:58 PM, Aditya Auradkar <
> > > > aaurad...@linkedin.com.invalid> wrote:
> > > >
> > > > > From what I can tell, Histograms don't seem to be used extensively
> in
> > > the
> > > > > Kafka server (only in RequestChannel.scala) and I'm not sure we
> need
> > > them
> > > > > for per-client metrics. Topic metrics use meters currently.
> > Migrating
> > > > > graphing, alerting will be quite a significant effort for all users
> > of
> > > > > Kafka. Do the potential benefits of the new metrics package
> outweigh
> > > this
> > > > > one time migration? In the long run it seems nice to have a unified
> > > metrics
> > > > > package across clients and server. If we were starting out from
> > scratch
> > > > > without any existing deployments, what decision would we take?
> > > > >
> > > > > I suppose the relative effort in supporting is a useful data point
> in
> > > this
> > > > > discussion. We need to throttle based on the current byte rate
> which
> > > should
> > > > > be a "Meter" in codahale terms. The Meter implementation uses a 1,
> 5
> > > and 15
> > > > > minute exponential window moving average. The library also does not
> > > use the
> > > > > most recent samples of data for Metered metrics. For calculating
> > > rates, the
> > > > > EWMA class has a scheduled task that runs every 5 seconds and
> adjusts
> > > the
> > > > > rate using the new data accordingly. In that particular case, I
> think
> > > the
> > > > > new library is superior since it is more responsive.  If we do
> choose
> > > to
> > > > > remain with Yammer on the server, here are a few ideas on how to
> > > support
> > > > > quotas with relatively less effort.
> > > > >
> > > > > - We could have a new type of Meter called "QuotaMeter" that can
> wrap
> > > the
> > > > > existing meter code that follows the same pattern that the Sensor
> > does
> > > in
> > > > > the new metrics library. This QuotaMeter needs to be configured
> with
> > a
> > > > > Quota and it can have a finer grained rate than 1 minute (10
> seconds?
> > > > > configurable?). Anytime we call "mark()", it update the underlying
> > > rates
> > > > > and throw a QuotaViolationException if required. This class can
> > either
> > > > > extend Meter or be a separate implementation of the Metric
> superclass
> > > that
> > > > > every metric implements.
> > > > >
> > > > > - We can also consider implementing these quotas with the new
> metrics
> > > > > package and have these co-exist with the existing metrics. This
> leads
> > > to 2
> > > > > metric packages being used on the server, but they are both pulled
> in
> > > as
> > > > > dependencies anyway. Using this for metrics we can quota on may not
> > be
> > > a
> > > > > bad place to start.
> > > > >
> > > > > Thanks,
> > > > > Aditya
> > > > > ________________________________________
> > > > > From: Jay Kreps [jay.kr...@gmail.com]
> > > > > Sent: Wednesday, March 25, 2015 11:08 PM
> > > > > To: dev@kafka.apache.org
> > > > > Subject: Re: Metrics package discussion
> > > > >
> > > > > Here was my understanding of the issue last time.
> > > > >
> > > > > The yammer metrics use a random sample of requests to estimate the
> > > > > histogram. This allocates a fairly large array of longs (their
> values
> > > are
> > > > > longs rather than floats). A reasonable sample might be 8k entries
> > > which
> > > > > would give about 64KB per histogram. There are bounds on accuracy,
> > but
> > > they
> > > > > are only probabilistic. I.e. if you try to get 99% < 5 ms of
> > > inaccuracy,
> > > > > you will 1% of the time get more than this. This is okay but if you
> > > try to
> > > > > alert, in which you realize that being wrong 1% of the time is a
> lot
> > > if you
> > > > > are computing stats every second continuously on many metrics
> (i.e. 1
> > > in
> > > > > 100 estimates will be outside you bound). This array is copied in
> > full
> > > > > every time you check the metric which is the other cause of the
> > memory
> > > > > pressure.
> > > > >
> > > > > The better approach to histograms is to calculate buckets
> boundaries
> > > and
> > > > > record arbitrarily many values in those buckets. A simple bucketing
> > > > > approach for latency would be 0, 5ms, 10ms, 15ms, etc, and you just
> > > count
> > > > > how many fall in each bucket. Your precision is deterministically
> > > bounded
> > > > > by the bucket boundaries, so if you had 5ms buckets you would never
> > > have
> > > > > more than 5ms loss of precision. By using non-uniform bucket sizes
> > you
> > > can
> > > > > make this work even better (e.g. give ~1ms precision for latencies
> in
> > > the
> > > > > 1ms range, but give only 1 second precision for latencies in the 30
> > > second
> > > > > range). That is what is implemented in that metrics package.
> > > > >
> > > > > I think this bucketing approach is popular now. There is a whole
> "HDR
> > > > > histogram" library that gives lots of different bucketing methods
> and
> > > > > implements dynamic resizing so you don't have to specify an upper
> > > bound.
> > > > >  https://github.com/HdrHistogram/HdrHistogram
> > > > >
> > > > > Whether this matters depends entirely if you want histograms broken
> > > down at
> > > > > the client, topic, partition, or broker level or just want overall
> > > metrics.
> > > > > If we just want per sever aggregates for histograms then I think
> the
> > > memory
> > > > > usage is not a huge issue. If you want a histogram per topic or
> > client
> > > or
> > > > > partition and have 10k of these then that is where you start
> talking
> > > like
> > > > > 1GB of memory with the yammer package, which is what we hit last
> > time.
> > > > > Getting percentiles on the client level is nice, percentiles are
> > > definitely
> > > > > better than averages, but I'm not sure it is required.
> > > > >
> > > > > -Jay
> > > > >
> > > > > On Wed, Mar 25, 2015 at 9:43 PM, Neha Narkhede <n...@confluent.io>
> > > wrote:
> > > > >
> > > > > > Aditya,
> > > > > >
> > > > > > If we are doing a deep dive, one of the things to investigate
> would
> > > be
> > > > > > memory/GC performance. IIRC, when I was looking into codahale at
> > > > > LinkedIn,
> > > > > > I remember it having quite a few memory management and GC issues
> > > while
> > > > > > using histograms. In comparison, histograms in the new metrics
> > > package
> > > > > > aren't very well tested.
> > > > > >
> > > > > > Thanks,
> > > > > > Neha
> > > > > >
> > > > > > On Wed, Mar 25, 2015 at 8:25 AM, Aditya Auradkar <
> > > > > > aaurad...@linkedin.com.invalid> wrote:
> > > > > >
> > > > > > > Hey everyone,
> > > > > > >
> > > > > > > Picking up this discussion after yesterdays KIP hangout. For
> > > anyone who
> > > > > > > did not join the meeting, we have 2 different metrics packages
> > > being
> > > > > used
> > > > > > > by the clients (custom package) and the server (codahale). We
> are
> > > > > > > discussing whether to migrate the server to the new package.
> > > > > > >
> > > > > > > What information do we need in order to make a decision?
> > > > > > >
> > > > > > > Some pros of the new package:
> > > > > > > - Using the most recent information by combining data from
> > > previous and
> > > > > > > current samples. I'm not sure how codahale does this so I'll
> > > > > investigate.
> > > > > > > - We can quota on anything we measure. This is pretty cool IMO.
> > > I've
> > > > > > > investigate the feasibility of adding this feature in codahale.
> > > > > > > - Hierarchical metrics. For example: we can define a sensor for
> > > overall
> > > > > > > bytes-in/bytes-out and also per-client. Updating the client
> > sensor
> > > will
> > > > > > > cause the global byte rate sensor to get modified too.
> > > > > > >
> > > > > > > What are some of the issues with codahale? One previous
> > discussion
> > > > > > > mentions high memory usage but I don't have any experience with
> > it
> > > > > > myself.
> > > > > > >
> > > > > > > Thanks,
> > > > > > > Aditya
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Thanks,
> > > > > > Neha
> > > > > >
> > > > >
> > >
> > >
> >
>

Reply via email to