All, I had originally planned to call for a vote, but during some early implementation work, I've discovered some changes are necessary. First, we need a reciprocal method to remove a metric from subscriptions, and I've updated the register method to take a single metric.
Thanks in advance for taking another look at the updated KIP, and hopefully we'll get to a vote this week. -Bill On Thu, Aug 22, 2024 at 3:18 PM Bill Bejeck <bbej...@gmail.com> wrote: > Matthias and Andrew, > > I've updated the KIP. I decided to not list the Kafka Stream metrics > supported as it would create a large amount of redundant information. > The types of supported metrics and behavior for unsupported metrics is > clearly defined. > > Thanks, > Bill > > On Thu, Aug 22, 2024 at 12:10 PM Bill Bejeck <bbej...@gmail.com> wrote: > >> Hi Mathias and Andrew, >> >> Thanks for taking the time to read and comment on the KIP. I'll address >> each comment below: >> >> MS1 - I agree that logging a WARN here should be sufficient. I'll update >> the interface in KIP to the original `void` return type. >> AS1 - I was considering throwing an exception, but you make a compelling >> argument about the expected behavior and external dynamic factors. >> So as stated above, the KIP will specify a `void` return type. >> >> MS2 - Good point. I'll update the KIP with a brief statement on supported >> types and a table of Kafka Streams metrics displaying what's supported and >> which ones aren't. >> AS2 - I think the above addresses your second comment. >> >> MS3 - We could explore adding new metrics, but I wouldn't want that to >> block the progress of this KIP. >> So I'd prefer to defer the discussion of new metrics to a follow-on KIP. >> Having said that, if you (or anyone else!) has an idea of >> a specific metric to add, we can consider it now. >> >> MS4 - Unsupported metrics are silently filtered out. Although it's an >> implementation detail, I propose to log a WARN statement for each filtered >> metric passed to `registerMetricsForSubscription`. >> I also update the KIP with the behavior of unsupported metric types. >> >> MS5 - Setting `enable.metric.push = false` completely disables the >> telemetry pipeline and any provided Kafka Streams metrics are ignored (I >> have this in the KIP). >> Although this is implementation detail, this is a valid condition to >> throw a `ConfigException` on Kafka Streams startup should this >> inconsistency in telemetry configs exist (at least in the main and admin >> consumer). >> I'll update the KIP to be more clear on this point as well. >> >> Thanks, >> Bill >> >> On Thu, Aug 22, 2024 at 10:54 AM Andrew Schofield < >> andrew_schofi...@live.com> wrote: >> >>> Hi Bill (and Matthias), >>> Thanks for the KIP. This looks like a valuable extension to KIP-714. >>> >>> AS1: Personally, I think that registerMetricsForSubscription should >>> return >>> void and not throw an exception if metrics push is not enabled. >>> Otherwise, >>> you end up with an application whose behaviour is markedly different >>> depending >>> on external factors. For example, if you connect to a broker without a >>> plugin >>> that supports the ClientTelemetry interface, no metrics are going to be >>> pushed. >>> Similarly, if the enable.metrics.push is false, no metrics are going to >>> be pushed. >>> Neither of those seem to me to have implications on whether this method >>> executes successfully. Even if everything is enabled, the metrics will >>> only flow >>> if there’s a telemetry subscription which matches the metric names. >>> Those are >>> dynamic things which are intended to be modified by operators seeking to >>> diagnose problems. We certainly don’t want the >>> registerMetricsForSubscription >>> method to behave differently depending on the current state of its >>> telemetry >>> subscriptions. >>> >>> AS2: Good catch from Matthias for metrics whose type is incompatible >>> with OTLP. We need to define the behaviour here. >>> >>> Thanks, >>> Andrew >>> >>> >>> > On 22 Aug 2024, at 05:35, Matthias J. Sax <mj...@apache.org> wrote: >>> > >>> > Thanks for the KIP Bill. >>> > >>> > Just for brainstorming: the newly added methods have `boolean` return >>> type. Is this necessary or would logging a WARN be sufficient? Or maybe >>> throw an exception if reporting is disabled? >>> > >>> > As we intend to report KS metrics, I am wondering if we should talk >>> about this in some more detail? As discussed offline, KIP-714 is based on >>> open-telemetry and supports only certain metric types, and not all KS >>> metrics can be reported. >>> > >>> > Should we maybe even add new metrics to KS to close this gap (could >>> also be a follow up KIP). >>> > >>> > What happens if a registered metric is of an unsupported type? >>> > >>> > What happens if users set KS level `enable.metric.push = true` but a >>> client level config `enable.maetric.push = false`? Should we throw a >>> ConfigException or similar for this case (at least for admin and >>> main.consumer -- as we don't intent to use the producer, it would not >>> matter if producer metric push is enabled or not). To be fair, this might >>> be more of an impl detail? Just curious. >>> > >>> > >>> > -Matthias >>> > >>> > >>> > On 8/21/24 1:03 PM, Apoorv Mittal wrote: >>> >> Hi Bill, >>> >> Thanks for addressing, looks good to me. Looking forward to >>> implementation. >>> >> Regards, >>> >> Apoorv Mittal >>> >> On Wed, Aug 21, 2024 at 8:14 PM Bill Bejeck <bbej...@gmail.com> >>> wrote: >>> >>> Hi Apoorv, >>> >>> >>> >>> Good call, I've updated the compatibility section with text about >>> using >>> >>> older brokers. >>> >>> >>> >>> -Bill >>> >>> >>> >>> On Wed, Aug 21, 2024 at 1:30 PM Apoorv Mittal < >>> apoorvmitta...@gmail.com> >>> >>> wrote: >>> >>> >>> >>>> Hi Bill, >>> >>>> Thanks for the details. Sounds good to me. >>> >>>> >>> >>>> One last question: >>> >>>> >>> >>>> AM5: Do we need to capture any details around compatibility with >>> older >>> >>>> brokers which don't support KIP-714 or when telemetry APIs are not >>> >>> enabled >>> >>>> on brokers (no configured receiver plugin)? >>> >>>> >>> >>>> Regards, >>> >>>> Apoorv Mittal >>> >>>> >>> >>>> >>> >>>> On Tue, Aug 20, 2024 at 10:22 PM Bill Bejeck <bbej...@apache.org> >>> wrote: >>> >>>> >>> >>>>> Hi Apoorv, >>> >>>>> >>> >>>>> Thank you for the discussion! Here are my responses to your >>> follow-up >>> >>>>> questions: >>> >>>>> >>> >>>>> AM2: My apologies for the previous response; I misunderstood the >>> >>>> question. >>> >>>>> When executing the `registerMetricsForSubscription,` it is up to >>> the >>> >>>>> developer to provide all metrics that could possibly be in a >>> >>> subscription >>> >>>>> request. For example, Kafka Streams will provide all stream >>> metrics, >>> >>> thus >>> >>>>> supporting any subscription changes at runtime. I'll clarify this >>> in >>> >>> the >>> >>>>> KIP. >>> >>>>> >>> >>>>> AM3: I understand your point, but I'm not convinced this will be an >>> >>> issue >>> >>>>> right now. But given it is an implementation detail, I'd like to >>> >>> defer >>> >>>>> addressing this issue in the PR phase, where we can thoroughly >>> test and >>> >>>>> adjust accordingly. Is that acceptable for you? >>> >>>>> >>> >>>>> Thanks, >>> >>>>> Bill >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> >>> >>>>> On Tue, Aug 20, 2024 at 3:34 PM Apoorv Mittal < >>> >>> apoorvmitta...@gmail.com> >>> >>>>> wrote: >>> >>>>> >>> >>>>>> Hi Bill, >>> >>>>>> Thanks for the answers, some follow ups. >>> >>>>>> >>> >>>>>> AM2: If we will only register subscribed metrics, as per the >>> >>>> subscription >>> >>>>>> received from the broker, then are we going to call the >>> >>>>>> `registerMetricsForSubscription` post to GetTelemetrySubscription >>> >>>>> response >>> >>>>>> from the broker? Also how do we manage the dynamic update of >>> >>> subscribed >>> >>>>>> metrics with this approach i.e. subscribed metrics can change at >>> >>>> runtime >>> >>>>>> then are we going to re-register additional metrics from external >>> >>>>>> applications? >>> >>>>>> >>> >>>>>> AM3: Sounds good. I understand that Streams JMXReporter will emit >>> >>>> Streams >>> >>>>>> metrics and individual client JMXReporter will emit respective >>> client >>> >>>>>> metrics. But currently in the clients, all the metrics in mbean >>> are >>> >>>>>> evaluated by JMXReporter and KafkaMetricsCollector, though it's an >>> >>>>>> implementation detail but I am not sure if we register external >>> >>>>> application >>> >>>>>> metrics in client, by registerMetricsForSubscription, then how we >>> >>> will >>> >>>>>> differentiate with external application metrics while emitting >>> >>> through >>> >>>>>> JMXReporter of clients. >>> >>>>>> >>> >>>>>> Regards, >>> >>>>>> Apoorv Mittal >>> >>>>>> >>> >>>>>> >>> >>>>>> On Tue, Aug 20, 2024 at 8:09 PM Bill Bejeck <bbej...@apache.org> >>> >>>> wrote: >>> >>>>>> >>> >>>>>>> Hi Apoorv, >>> >>>>>>> >>> >>>>>>> Thanks for reading the KIP and commenting. Here are my answers >>> to >>> >>>> your >>> >>>>>>> comments/questions: >>> >>>>>>> >>> >>>>>>> AM1: Good point; I'll update the Javadoc in the KIP to be more >>> >>>>> specific. >>> >>>>>>> >>> >>>>>>> AM2: I'm not sure I follow, but IIUC, then yes, this method will >>> >>> only >>> >>>>>>> subscribe telemetry metrics. >>> >>>>>>> >>> >>>>>>> AM3: The `registerMetricsForSubscription` method only subscribes >>> >>>>> metrics >>> >>>>>>> for telemetry reporting; it does not give them to the JMX >>> reporter. >>> >>>>> The >>> >>>>>>> application implementer is responsible for providing metrics to >>> any >>> >>>>> other >>> >>>>>>> reporter. For example, when starting an application, Kafka >>> Streams >>> >>>>>>> separately exposes all its metrics to a JMX reporter. >>> >>>>>>> >>> >>>>>>> AM4: Great question. I'll assert we still need the >>> >>>>> `enable.metrics.push` >>> >>>>>>> configuration to toggle pushing Kafka Streams telemetry metrics. >>> >>> To >>> >>>>>> change >>> >>>>>>> the metrics of the embedded Kafka clients within Kafka Streams, >>> >>> users >>> >>>>>> will >>> >>>>>>> use the current mechanism to update client configuration >>> settings. >>> >>>>> I'll >>> >>>>>>> update the KIP to clarify these details. >>> >>>>>>> >>> >>>>>>> Thanks, >>> >>>>>>> Bill >>> >>>>>>> >>> >>>>>>> On Tue, Aug 20, 2024 at 6:30 AM Apoorv Mittal < >>> >>>>> apoorvmitta...@gmail.com> >>> >>>>>>> wrote: >>> >>>>>>> >>> >>>>>>>> Hi Bill, >>> >>>>>>>> Thanks for the KIP and it's great to see a way applications can >>> >>>> also >>> >>>>>> send >>> >>>>>>>> telemetry metrics over the KIP-714 pipeline. >>> >>>>>>>> >>> >>>>>>>> A couple of questions: >>> >>>>>>>> AM1: The Javadoc for the method seems to be a bit vague, it >>> talks >>> >>>>> about >>> >>>>>>>> "subscription" but do we need to be a bit more detailed >>> regarding >>> >>>>> which >>> >>>>>>>> subscription we refer to? >>> >>>>>>>> >>> >>>>>>>> AM2: Are we going to only register KIP-714 subscribed metrics >>> >>> with >>> >>>>> this >>> >>>>>>>> method? >>> >>>>>>>> >>> >>>>>>>> AM3: Are the additional registered metrics available on JMX >>> >>>> reporter >>> >>>>> as >>> >>>>>>>> well or are we going to only register additional metrics for >>> >>>> KIP-714 >>> >>>>>>>> telemetry pipeline? >>> >>>>>>>> >>> >>>>>>>> AM4: StreamsConfig also defines `enable.metrics.push`, do we >>> need >>> >>>>> that >>> >>>>>>>> config or rely on client metric push config? Or all the clients >>> >>>> will >>> >>>>>>>> inherit the `enable.metrics.push` defined for Streams? >>> >>>>>>>> >>> >>>>>>>> Regards, >>> >>>>>>>> Apoorv Mittal >>> >>>>>>>> >>> >>>>>>>> >>> >>>>>>>> On Tue, Aug 20, 2024 at 10:21 AM Bruno Cadonna < >>> >>> cado...@apache.org >>> >>>>> >>> >>>>>>> wrote: >>> >>>>>>>> >>> >>>>>>>>> Hi Bill, >>> >>>>>>>>> >>> >>>>>>>>> Thanks for the KIP! >>> >>>>>>>>> >>> >>>>>>>>> BC1 >>> >>>>>>>>> I find the name registerAdditionalMetrics() not specific >>> >>> enough. >>> >>>> It >>> >>>>>> is >>> >>>>>>>>> not clear that the passed-in metrics are made available for >>> >>>>>>>>> subscription. What about registerMetricsForSubscription()? >>> >>>>>>>>> The Additional part is confusing in my opinion: additional to >>> >>>> what? >>> >>>>>>>>> >>> >>>>>>>>> BC2 >>> >>>>>>>>> Does the KIP need a transformation rule from MetricName to >>> >>>>>>>>> OpenTelemetry-compatible names that are exposed at the broker >>> >>> for >>> >>>>>>>>> subscription and retrieval? >>> >>>>>>>>> >>> >>>>>>>>> Best, >>> >>>>>>>>> Bruno >>> >>>>>>>>> >>> >>>>>>>>> On 8/20/24 12:43 AM, Bill Bejeck wrote: >>> >>>>>>>>>> Hi Lucas, thanks for the comments. >>> >>>>>>>>>> >>> >>>>>>>>>>> LB1 >>> >>>>>>>>>> Yes, I'll update the KIP signature to `? extends Metric` >>> >>>>>>>>>> >>> >>>>>>>>>>> LB2 >>> >>>>>>>>>> If `enable.metrics.push` is disabled, the metrics passed in >>> >>> are >>> >>>>>>>> ignored. >>> >>>>>>>>>> Thinking about this now, I'm considering updating the return >>> >>>> type >>> >>>>>> of >>> >>>>>>>>>> `registerAdditionalMetrics` to a `boolean` from `void`, true >>> >>> if >>> >>>>> the >>> >>>>>>>>> metrics >>> >>>>>>>>>> have been successfully applied and false otherwise. >>> >>>>>>>>>> WDYT? >>> >>>>>>>>>> >>> >>>>>>>>>> Cheers, >>> >>>>>>>>>> Bill >>> >>>>>>>>>> >>> >>>>>>>>>> >>> >>>>>>>>>> On Mon, Aug 12, 2024 at 11:33 AM Lucas Brutschy >>> >>>>>>>>>> <lbruts...@confluent.io.invalid> wrote: >>> >>>>>>>>>> >>> >>>>>>>>>>> Hi Bill! >>> >>>>>>>>>>> >>> >>>>>>>>>>> Thanks for the KIP! I like this solution, it's general >>> >>> enough >>> >>>>> for >>> >>>>>>> many >>> >>>>>>>>>>> kinds of application. >>> >>>>>>>>>>> >>> >>>>>>>>>>> LB1: Could we accept an instance of the Metric interface >>> >>>> instead >>> >>>>>> of >>> >>>>>>>>>>> KafkaMetric? No strong reason to do it, it would just make >>> >>> the >>> >>>>>>>>>>> interface slightly more generic. >>> >>>>>>>>>>> >>> >>>>>>>>>>> LB2: What is the behavior is `enable.metrics.push` is >>> >>>> disabled? >>> >>>>>>>>>>> >>> >>>>>>>>>>> Cheers, >>> >>>>>>>>>>> Lucas >>> >>>>>>>>>>> >>> >>>>>>>>>>> On Fri, Aug 2, 2024 at 9:30 PM Bill Bejeck < >>> >>>> bbej...@apache.org> >>> >>>>>>>> wrote: >>> >>>>>>>>>>>> >>> >>>>>>>>>>>> Hi all, >>> >>>>>>>>>>>> >>> >>>>>>>>>>>> I would like to start a discussion thread on KIP-1076 to >>> >>>> enable >>> >>>>>>>> metrics >>> >>>>>>>>>>>> collection for applications that embed a Kafka client. >>> >>>>>>>>>>>> >>> >>>>>>>>>>>> The KIP can be found here: >>> >>>>>>>>>>>> >>> >>>>>>>>>>> >>> >>>>>>>>> >>> >>>>>>>> >>> >>>>>>> >>> >>>>>> >>> >>>>> >>> >>>> >>> >>> >>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1076%3A++Metrics+for+client+applications+KIP-714+extension >>> >>>>>>>>>>>> >>> >>>>>>>>>>>> I look forward to the discussion and your feedback. >>> >>>>>>>>>>>> >>> >>>>>>>>>>>> Thanks, >>> >>>>>>>>>>>> Bill >>> >>> >>>