Hi Qichao,

Thanks for the KIP! This will be a valuable contribution and improve the
tooling for troubleshooting.

I have a couple of comments:

1. It's unclear from the `metrics.verbosity` description what the supported
values are. In the description mentions "If the value is high ... In the
low settings" but I think it's referring to the `level` property
specifically instead of the whole value that is now JSON. Could you clarify
this?

2. Could we state in which order the JSON entries are going to be
evaluated? I guess the last entry wins if it overlaps previous values, but
better to make this explicit.

3. Kafka metrics library has a `RecordingLevel` configuration -- have we
considered aligning these concepts and maybe reuse it instead of
`verbosityLevel`? Then we can reuse the levels: INFO, DEBUG, TRACE.

4. Not sure if within the scope of the KIP, but would be helpful to
document the metrics with the verbosity level attached to the metrics.
Maybe creating a JIRA ticket to track this would be enough if we can't
cover it as part of the KIP.

5. Could we consider the following client-related metrics as well:
  - BytesRejectedPerSec
  - TotalProduceRequestsPerSec
  - TotalFetchRequestsPerSec
  - FailedProduceRequestsPerSec
  - FailedFetchRequestsPerSec
  - FetchMessageConversionsPerSec
  - ProduceMessageConversionsPerSec
Would be great to have these from day 1 instead of requiring a following
KIP to extend this. Could be implemented in separate PRs if needed.

6. To make it clearer how the user experience would be, could we provide an
example of:
- how the broker configuration will be provided by default, and
- how the CLI tooling would be used to change the configuration?
- Maybe a couple of scenarios: adding a new metric config, a second one
with overlapping values, and
- describing the expected metrics to be mapped

A couple of nits:
- The first link "MessagesInPerSec metrics" is pointing to
https://kafka.apache.org/documentation/#uses_metrics -- is this the correct
reference? It doesn't seem too relevant.
- Also, the link to ReplicaManager points to a line that has change
already; better to have a permalink to a specific commit: e.g.
https://github.com/apache/kafka/blob/edc7e10a745c350ad1efa9e4866370dc8ea0e034/core/src/main/scala/kafka/server/ReplicaManager.scala#L1218

Cheers,
Jorge.

On Tue, 7 Nov 2023 at 17:06, Qichao Chu <qic...@uber.com.invalid> wrote:

> Hi Divij,
>
> It would be very nice if you could take a look at the recent changes, thank
> you!
> If there's no more required changes, shall we move to vote stage?
>
> Best,
> Qichao Chu
> Software Engineer | Data - Kafka
> [image: Uber] <https://uber.com/>
>
>
> On Thu, Nov 2, 2023 at 12:06 AM Qichao Chu <qic...@uber.com> wrote:
>
> > Hi Divij,
> >
> > Thank you for the very quick response and the nice suggestions. I have
> > updated the KIP with the following thoughts.
> >
> > 1. I checked the Java documentation and it seems the regex engine in
> utils
> > <
> https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/regex/Pattern.html>
> is
> > not 100% compatible with PCRE, though it is very close. I stated
> > the Java implementation as the requirement since we are most likely to
> > target a JVM language.
> > 2. Agreed with the filter limitation. For now, let's keep it topic only.
> > With that in mind, I feel we do have cases where a user wants to list
> many
> > topics. Although regex is also possible, an array will make things
> faster.
> > This makes me add two options for the topic filter.
> > 3. It seems not many configs are using JSON, this was the intention for
> me
> > to use a compound string. However since JSON is used widely in the
> project,
> > and given the benefits you mentioned earlier, I tried to make the config
> a
> > JSON array. The change is to make it compatible with multi-level
> settings.
> >
> > Let me know what you think. Many thanks!
> >
> > Best,
> > Qichao Chu
> > Software Engineer | Data - Kafka
> > [image: Uber] <https://uber.com/>
> >
> >
> > On Wed, Nov 1, 2023 at 9:43 PM Divij Vaidya <divijvaidy...@gmail.com>
> > wrote:
> >
> >> Thank you for making the changes Qichao.
> >>
> >> We are now entering in the territory of defining a declarative schema
> for
> >> filters. In the new input format, the type is string but we are
> imposing a
> >> schema for the string and we should clearly call out the schema. You can
> >> perhaps choose to adopt a schema such as below:
> >>
> >> metricLevel = High | Low (default: Low)
> >> metricNameRegEx = regEx (default: .*)
> >> nameOfDimension = string
> >> dimensionRegEx = regEx
> >> dimensionFilter = [<nameOfDimension>=<dimensionRegEx>] (default: [])
> >>
> >> Final Value schema = "level"=$metricLevel, "name"=$metricNameRegEx,
> >> $dimensionFilter
> >>
> >> Further we need to answer questions such as :
> >> 1. which regEx format do we support (it should probably be
> Perl-compatible
> >> regular expressions (PCRE) because Java's regEx is compatible with it)
> >> 2. should we restrict the dimensionFilter to at max length 1 and value
> >> "topic" only for now. Later when we want to expand, we can expand
> filters
> >> for other dimensions as well such as partitions.
> >> 3. if we are coming up with our stringified-schema, why not use json? It
> >> would save us from building a parsing utility for the schema. (I like it
> >> in
> >> its current format but there is a case to be made for json as well)
> >> 4. what happens when there are contradictory regEx rules, e.g. a topic
> >> defined in high as well as low. It is generally solved by defining
> >> precedence. In our case, we can choose that high has more precedence
> than
> >> low.
> >>
> >> What do you think?
> >>
> >> --
> >> Divij Vaidya
> >>
> >>
> >>
> >> On Wed, Nov 1, 2023 at 2:07 PM Qichao Chu <qic...@uber.com.invalid>
> >> wrote:
> >>
> >> > Hi Divij,
> >> >
> >> > Thank you for the review and the great suggestions, again. I have
> >> updated
> >> > the corresponding content, can you take another look?
> >> > Regarding the KIP-544 style regex, I have added it to the new property
> >> too.
> >> > It's expanded to include multiple sections for better future
> extension.
> >> >
> >> > Best,
> >> > Qichao Chu
> >> > Software Engineer | Data - Kafka
> >> > [image: Uber] <https://uber.com/>
> >> >
> >> >
> >> > On Mon, Oct 30, 2023 at 6:26 PM Divij Vaidya <divijvaidy...@gmail.com
> >
> >> > wrote:
> >> >
> >> > > Hey *Qichao*
> >> > >
> >> > > Thank you for the update on the KIP. I like the idea of incremental
> >> > > delivery and adding which metrics support this verbosity as a later
> >> KIP.
> >> > > But I also want to ensure that we wouldn't have to change the
> current
> >> > > config when adding that in future. Hence, we need some discussion on
> >> it
> >> > in
> >> > > the scope of the KIP.
> >> > >
> >> > > About the dynamic configuration:
> >> > > Do we need to add the "default" mode? I am asking because it may
> >> inhibit
> >> > us
> >> > > from adding the allowList option in future. Instead if we could
> >> rephrase
> >> > > the config as: "metric.verbosity.high" which takes values as a regEx
> >> > > (default will be empty), then we wouldn't have to worry about
> >> > > future-proofness of this KIP. Notably this is an existing pattern
> >> used by
> >> > > KIP-544.
> >> > > Alternatively, if you choose to stick to the current configuration
> >> > pattern,
> >> > > please provide information on how this config will look like when we
> >> add
> >> > > allow listing in future.
> >> > >
> >> > > About the perf test:
> >> > > Motivation - The motivation of perf test is to provide users with a
> >> hint
> >> > on
> >> > > what perf penalty they can expect and whether default has degraded
> >> perf
> >> > > (due to additional "empty" labels).
> >> > > Dimensions of the test could be - scrape interval, utilization of
> >> broker
> >> > > (no traffic vs. heavy traffic), number of partitions (small/200 to
> >> > > large/2k).
> >> > > Things to collect during perf test - number of mbeans registered
> with
> >> > JMX,
> >> > > CPU, heap utilization
> >> > > Expected results - As long as we can prove that there is no
> additional
> >> > > usage (significant) of CPU or heap after this change for the
> "default
> >> > > mode", we should be good. For the "high" mode, we should document
> the
> >> > > expected increase for users but it is not a blocker to implement
> this
> >> > KIP.
> >> > >
> >> > >
> >> > > *Kirk*, I have tried to clarify the expectation on performance, does
> >> that
> >> > > address your question earlier? Also, I am happy with having a Kafka
> >> level
> >> > > dynamic config that we can use to filter our metric/dimensionality
> >> since
> >> > we
> >> > > have a precedence at KIP-544. Hence, my suggestion to push this
> >> filtering
> >> > > to metric library can be ignored.
> >> > >
> >> > > --
> >> > > Divij Vaidya
> >> > >
> >> > >
> >> > >
> >> > > On Sat, Oct 28, 2023 at 11:37 AM Qichao Chu <qic...@uber.com.invalid
> >
> >> > > wrote:
> >> > >
> >> > > > Hello Everyone,
> >> > > >
> >> > > > Can I ask for some feedback regarding KIP-977
> >> > > > <
> >> > > >
> >> > >
> >> >
> >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-977%3A+Partition-Level+Throughput+Metrics
> >> > > > >
> >> > > > ?
> >> > > >
> >> > > > Best,
> >> > > > Qichao Chu
> >> > > > Software Engineer | Data - Kafka
> >> > > > [image: Uber] <https://uber.com/>
> >> > > >
> >> > > >
> >> > > > On Mon, Oct 16, 2023 at 7:34 PM Qichao Chu <qic...@uber.com>
> wrote:
> >> > > >
> >> > > > > Hi Divij and Kirk,
> >> > > > >
> >> > > > > Thank you both for providing the valuable feedback and sorry for
> >> the
> >> > > > > delay. I have just updated the KIP to address the comments.
> >> > > > >
> >> > > > >    1. Instead of using a topic-level control, global verbosity
> >> > control
> >> > > > >    makes more sense if we want to extend it in the future. It
> >> would
> >> > be
> >> > > > very
> >> > > > >    difficult if we want to apply the topic allowlist everywhere
> >> > > > >    2. Also, the topic allowlist was not dynamic which makes
> >> > everything
> >> > > > >    quite complex, especially for the topic lifecycle management.
> >> By
> >> > > > using the
> >> > > > >    dynamic global config, debugging could be easier, and
> >> management
> >> > of
> >> > > > the
> >> > > > >    config is also made easier.
> >> > > > >    3. More details are included in the test section.
> >> > > > >
> >> > > > > One thing that still misses is the performance numbers. I will
> >> get it
> >> > > > > ready with our internal clusters and share out soon.
> >> > > > >
> >> > > > > Many thanks for the review!
> >> > > > > Qichao
> >> > > > >
> >> > > > > On Tue, Sep 12, 2023 at 8:31 AM Kirk True <k...@kirktrue.pro>
> >> wrote:
> >> > > > >
> >> > > > >> Oh, and does metrics.partition.level.reporting.topics allow for
> >> > regex?
> >> > > > >>
> >> > > > >> > On Sep 12, 2023, at 8:26 AM, Kirk True <k...@kirktrue.pro>
> >> wrote:
> >> > > > >> >
> >> > > > >> > Hi Qichao,
> >> > > > >> >
> >> > > > >> > Thanks for the KIP!
> >> > > > >> >
> >> > > > >> > Divij—questions/comments inline...
> >> > > > >> >
> >> > > > >> >> On Sep 11, 2023, at 4:32 AM, Divij Vaidya <
> >> > divijvaidy...@gmail.com
> >> > > >
> >> > > > >> wrote:
> >> > > > >> >>
> >> > > > >> >> Thank you for the proposal Qichao.
> >> > > > >> >>
> >> > > > >> >> I agree with the motivation here and understand the tradeoff
> >> here
> >> > > > >> >> between observability vs. increased metric dimensions
> (metric
> >> > > fan-out
> >> > > > >> >> as you say in the KIP).
> >> > > > >> >>
> >> > > > >> >> High level comments:
> >> > > > >> >>
> >> > > > >> >> 1. I would urge you to consider the extensibility of the
> >> proposal
> >> > > for
> >> > > > >> >> other types of metrics. Tomorrow, if we want to selectively
> >> add
> >> > > > >> >> "partition" dimension to another metric, would we have to
> >> modify
> >> > > the
> >> > > > >> >> code where each metric is emitted? Alternatively, could we
> >> > abstract
> >> > > > >> >> out this config in a "Kafka Metrics" library. The code
> >> provides
> >> > all
> >> > > > >> >> information about this library and this library can choose
> >> which
> >> > > > >> >> dimensions it wants to add to the final metrics that are
> >> emitted
> >> > > > based
> >> > > > >> >> on declarative configuration.
> >> > > > >> >
> >> > > > >> > I’d agree with this if it doesn’t place a burden on the
> >> callers.
> >> > Are
> >> > > > >> there any potential call sites that don’t have the partition
> >> > > information
> >> > > > >> readily available?
> >> > > > >> >
> >> > > > >> >> 2. Can we offload the handling of this dimension filtering
> to
> >> the
> >> > > > >> >> metric framework? Have you explored whether prometheus or
> >> other
> >> > > > >> >> libraries provide the ability to dynamically change
> dimensions
> >> > > > >> >> associated with metrics?
> >> > > > >> >
> >> > > > >> > I’m not familiar with the downstream metrics providers’
> >> > > capabilities.
> >> > > > >> This is a greatest common denominator scenario, right? We’d
> have
> >> to
> >> > be
> >> > > > >> reasonable sure that the heavily used providers *all* support
> >> such
> >> > > > dynamic
> >> > > > >> filtering.
> >> > > > >> >
> >> > > > >> > Also—and correct me as needed as I’m not familiar with the
> >> area—if
> >> > > we
> >> > > > >> relegate partition filtering to a lower layer, we’d still need
> to
> >> > > store
> >> > > > the
> >> > > > >> metric data in memory until it’s flushed, yes? If so, is that
> >> > overhead
> >> > > > of
> >> > > > >> any concern?
> >> > > > >> >
> >> > > > >> >> Implementation level comments:
> >> > > > >> >>
> >> > > > >> >> 1. In the test plan section, please mention what kind of
> integ
> >> > > and/or
> >> > > > >> >> unit tests will be added and what they will assert. As an
> >> > example,
> >> > > > you
> >> > > > >> >> can add a section, "functionality tests", which would assert
> >> that
> >> > > new
> >> > > > >> >> metric config is being respected and another section,
> >> > "performance
> >> > > > >> >> tests", which could be a system test and assert that no
> >> > regression
> >> > > > >> >> caused wrt resources occupied by metrics from one version to
> >> > > another.
> >> > > > >> >> 2. Please mention why or why not are we considering
> >> dynamically
> >> > > > >> >> setting the configuration (i.e. without a broker restart)? I
> >> > would
> >> > > > >> >> imagine that the ability to dynamically configure for a
> >> specific
> >> > > > topic
> >> > > > >> >> will be very useful especially to debug production
> situations
> >> > that
> >> > > > you
> >> > > > >> >> mention in the motivation.
> >> > > > >> >
> >> > > > >> > +1
> >> > > > >> >
> >> > > > >> >> 3. You mention that we want to start with metrics closely
> >> related
> >> > > to
> >> > > > >> >> producer & consumers first, which is fair. Could you please
> >> add a
> >> > > > >> >> statement on the work required to extend this to other
> >> metrics in
> >> > > > >> >> future?
> >> > > > >> >
> >> > > > >> > +1
> >> > > > >> >
> >> > > > >> >> 4. In the compatibility section, you mention that this
> change
> >> is
> >> > > > >> >> backward compatible. I don't fully understand that. During a
> >> > > version
> >> > > > >> >> upgrade, we will start with an empty list of topics to
> >> maintain
> >> > > > >> >> backward compatibility. I assume after the upgrade, we will
> >> > update
> >> > > > the
> >> > > > >> >> new config with topic names that we desire to monitor. But
> >> > updating
> >> > > > >> >> the config will require a broker restart (a rolling restart
> >> since
> >> > > > >> >> config is read-only). We will be in a situation where some
> >> > brokers
> >> > > > are
> >> > > > >> >> sending metrics with a new "partition" dimension and some
> >> brokers
> >> > > are
> >> > > > >> >> sending metrics with no partition dimension. Is that
> >> acceptable
> >> > to
> >> > > > JMX
> >> > > > >> >> / prometheus collectors? Would it break them? Please clarify
> >> how
> >> > > > >> >> upgrades will work in the compatibility section.
> >> > > > >> >> 5. Could you please quantify (with an experiment) the
> expected
> >> > perf
> >> > > > >> >> impact of adding the partition dimension? This could be done
> >> as
> >> > > part
> >> > > > >> >> of "test plan" section and would serve as a data point for
> >> users
> >> > to
> >> > > > >> >> understand the potential impact if they decide to turn it
> on.
> >> > > > >> >
> >> > > > >> > Is there some guidance on the level of precision and detail
> >> > expected
> >> > > > >> when providing the performance numbers in the KIP?
> >> > > > >> >
> >> > > > >> > This notion of proving out the performance impact is
> >> important, I
> >> > > > >> agree. Anecdotally, there was another KIP I was following for
> >> which
> >> > > > >> performance numbers were requested, as is reasonable. But that
> >> > caused
> >> > > > the
> >> > > > >> KIP to go a bit sideways as a result because it wasn’t able to
> >> get
> >> > > > >> consensus on a) the different scenarios to test, and b) the
> >> > > quantitative
> >> > > > >> goal for each. I’m not really sure the rigo(u)r that’s expected
> >> at
> >> > > this
> >> > > > >> stage in the development of a new feature.
> >> > > > >> >
> >> > > > >> > Thanks,
> >> > > > >> > Kirk
> >> > > > >> >
> >> > > > >> >>
> >> > > > >> >> --
> >> > > > >> >> Divij Vaidya
> >> > > > >> >>
> >> > > > >> >>
> >> > > > >> >> On Sat, Sep 9, 2023 at 8:18 PM Qichao Chu
> >> > <qic...@uber.com.invalid
> >> > > >
> >> > > > >> wrote:
> >> > > > >> >>>
> >> > > > >> >>> Hi All,
> >> > > > >> >>>
> >> > > > >> >>> Although this has been discussed many times, I would like
> to
> >> > > start a
> >> > > > >> new
> >> > > > >> >>> discussion regarding the introduction of partition-level
> >> > > throughput
> >> > > > >> >>> metrics. Please review the KIP and I'm eager to know
> >> everyone's
> >> > > > >> thoughts:
> >> > > > >> >>>
> >> > > > >>
> >> > > >
> >> > >
> >> >
> >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-977%3A+Partition-Level+Throughput+Metrics
> >> > > > >> >>>
> >> > > > >> >>> TL;DR: The KIP proposes to add partition-level throughput
> >> > metrics
> >> > > > and
> >> > > > >> a new
> >> > > > >> >>> configuration to control the fan-out rate.
> >> > > > >> >>>
> >> > > > >> >>> Thank you all for the review and have a nice weekend!
> >> > > > >> >>>
> >> > > > >> >>> Best,
> >> > > > >> >>> Qichao
> >> > > > >>
> >> > > > >>
> >> > > >
> >> > >
> >> >
> >>
> >
>

Reply via email to