Matthias,
Yes, I think that’s a sensible way forward and the interface you propose looks 
good. I’ll update the KIP accordingly.

Thanks,
Andrew

> On 10 Oct 2023, at 23:01, Matthias J. Sax <mj...@apache.org> wrote:
>
> Andrew,
>
> yes I would like to get this change into KIP-714 right way. Seems to be 
> important, as we don't know if/when a follow-up KIP for Kafka Streams would 
> land.
>
> I was also thinking (and discussed with a few others) how to expose it, and 
> we would propose the following:
>
> We add a new method to `KafkaStreams` class:
>
>    public ClientsInstanceIds clientsInstanceIds(Duration timeout);
>
> The returned object is like below:
>
>  public class ClientsInstanceIds {
>    // we only have a single admin client per KS instance
>    String adminInstanceId();
>
>    // we only have a single global consumer per KS instance (if any)
>    // Optional<> because we might not have global-thread
>    Optional<String> globalConsumerInstanceId();
>
>    // return a <threadKey -> ClientInstanceId> mapping
>    // for the underlying (restore-)consumers/producers
>    Map<String, String> mainConsumerInstanceIds();
>    Map<String, String> restoreConsumerInstanceIds();
>    Map<String, String> producerInstanceIds();
> }
>
> For the `threadKey`, we would use some pattern like this:
>
>  [Stream|StateUpdater]Thread-<threadIdx>
>
>
> Would this work from your POV?
>
>
>
> -Matthias
>
>
> On 10/9/23 2:15 AM, Andrew Schofield wrote:
>> Hi Matthias,
>> Good point. Makes sense to me.
>> Is this something that can also be included in the proposed Kafka Streams 
>> follow-on KIP, or would you prefer that I add it to KIP-714?
>> I have a slight preference for the former to put all of the KS enhancements 
>> into a separate KIP.
>> Thanks,
>> Andrew
>>> On 7 Oct 2023, at 02:12, Matthias J. Sax <mj...@apache.org> wrote:
>>>
>>> Thanks Andrew. SGTM.
>>>
>>> One point you did not address is the idea to add a method to `KafkaStreams` 
>>> similar to the proposed `clientInstanceId()` that will be added to 
>>> consumer/producer/admin clients.
>>>
>>> Without addressing this, Kafka Streams users won't have a way to get the 
>>> assigned `instanceId` of the internally created clients, and thus it would 
>>> be very difficult for them to know which metrics that the broker receives 
>>> belong to a Kafka Streams app. It seems they would only find the 
>>> `instanceIds` in the log4j output if they enable client logging?
>>>
>>> Of course, because there is multiple clients inside Kafka Streams, the 
>>> return type cannot be an single "String", but must be some some complex 
>>> data structure -- we could either add a new class, or return a 
>>> Map<String,String> using a client key that maps to the `instanceId`.
>>>
>>> For example we could use the following key:
>>>
>>>   [Global]StreamThread[-<threadIndex>][-restore][consumer|producer]
>>>
>>> (Of course, only the valid combination.)
>>>
>>> Or maybe even better, we might want to return a `Future` because collection 
>>> all the `instanceId` might be a blocking all on each client? I have already 
>>> a few idea how it could be implemented but I don't think it must be 
>>> discussed on the KIP, as it's an implementation detail.
>>>
>>> Thoughts?
>>>
>>>
>>> -Matthias
>>>
>>> On 10/6/23 4:21 AM, Andrew Schofield wrote:
>>>> Hi Matthias,
>>>> Thanks for your comments. I agree that a follow-up KIP for Kafka Streams 
>>>> makes sense. This KIP currently has made a bit
>>>> of an effort to embrace KS, but it’s not enough by a long way.
>>>> I have removed `application.id <http://application.id/>`. This should be 
>>>> done properly in the follow-up KIP. I don’t believe there’s a downside to
>>>> removing it from this KIP.
>>>> I have reworded the statement about temporarily. In practice, the 
>>>> implementation of this KIP that’s going on while the voting
>>>> progresses happens to use delta temporality, but that’s an implementation 
>>>> detail. Supporting clients must support both
>>>> temporalities.
>>>> I thought about exposing the client instance ID as a metric, but 
>>>> non-numeric metrics are not usual practice and tools
>>>> do not universally support them. I don’t think the KIP is improved by 
>>>> adding one now.
>>>> I have also added constants for the various Config classes for 
>>>> ENABLE_METRICS_PUSH_CONFIG, including to
>>>> StreamsConfig. It’s best to be explicit about this.
>>>> Thanks,
>>>> Andrew
>>>>> On 2 Oct 2023, at 23:47, Matthias J. Sax <mj...@apache.org> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I did not pay attention to this KIP in the past; seems it was on-hold for 
>>>>> a while.
>>>>>
>>>>> Overall it sounds very useful, and I think we should extend this with a 
>>>>> follow up KIP for Kafka Streams. What is unclear to me at this point is 
>>>>> the statement:
>>>>>
>>>>>> Kafka Streams applications have an application.id configured and this 
>>>>>> identifier should be included as the application_id metrics label.
>>>>>
>>>>> The `application.id` is currently only used as the (main) consumer's 
>>>>> `group.id` (and is part of an auto-generated `client.id` if the user does 
>>>>> not set one).
>>>>>
>>>>> This comment related to:
>>>>>
>>>>>> The following labels should be added by the client as appropriate before 
>>>>>> metrics are pushed.
>>>>>
>>>>> Given that Kafka Streams uses the consumer/producer/admin client as 
>>>>> "black boxes", a client does at this point not know that it's part of a 
>>>>> Kafka Streams application, and thus, it won't be able to attach any such 
>>>>> label to the metrics it sends. (Also producer and admin don't even know 
>>>>> the value of `application.id` -- only the (main) consumer, indirectly via 
>>>>> `group.id`, but also restore and global consumer don't know it, because 
>>>>> they don't have `group.id` set).
>>>>>
>>>>> While I am totally in favor of the proposal, I am wondering how we intent 
>>>>> to implement it in clean way? Or would we do ok to have some internal 
>>>>> client APIs that KS can use to "register" itself with the client?
>>>>>
>>>>>
>>>>>
>>>>>> While clients must support both temporalities, the broker will initially 
>>>>>> only send GetTelemetrySubscriptionsResponse.DeltaTemporality=True
>>>>>
>>>>> Not sure if I can follow. How make the decision about DELTA or CUMULATIVE 
>>>>> metrics? Should the broker side plugin not decide what metrics it what to 
>>>>> receive in which form? So what does "initially" mean -- the broker won't 
>>>>> ship with a default plugin implementation?
>>>>>
>>>>>
>>>>>
>>>>>> The following method is added to the Producer, Consumer, and Admin 
>>>>>> client interfaces:
>>>>>
>>>>> Should we add anything to Kafka Streams to expose the underlying clients' 
>>>>> assigned client-instance-ids programmatically? I am also wondering if 
>>>>> clients should report their assigned client-instance-ids as metrics 
>>>>> itself (for this case, Kafka Streams won't need to do anything, because 
>>>>> we already expose all client metrics).
>>>>>
>>>>> If we add anything programmatic, we need to make it simple, given that 
>>>>> Kafka Streams has many clients per `StreamThread` and may have multiple 
>>>>> threads.
>>>>>
>>>>>
>>>>>
>>>>>> enable.metrics.push
>>>>> It might be worth to add this to `StreamsConfig`, too? It set via 
>>>>> StreamsConfig, we would forward it to all clients automatically.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> -Matthias
>>>>>
>>>>>
>>>>> On 9/29/23 5:45 PM, David Jacot wrote:
>>>>>> Hi Andrew,
>>>>>> Thanks for driving this one. I haven't read all the KIP yet but I already
>>>>>> have an initial question. In the Threading section, it is written
>>>>>> "KafkaConsumer: the "background" thread (based on the consumer threading
>>>>>> refactor which is underway)". If I understand this correctly, it means
>>>>>> that KIP-714 won't work if the "old consumer" is used. Am I correct?
>>>>>> Cheers,
>>>>>> David
>>>>>> On Fri, Sep 22, 2023 at 12:18 PM Andrew Schofield <
>>>>>> andrew_schofield_j...@outlook.com> wrote:
>>>>>>> Hi Philip,
>>>>>>> No, I do not think it should actively search for a broker that supports
>>>>>>> the new
>>>>>>> RPCs. In general, either all of the brokers or none of the brokers will
>>>>>>> support it.
>>>>>>> In the window, where the cluster is being upgraded or client telemetry 
>>>>>>> is
>>>>>>> being
>>>>>>> enabled, there might be a mixed situation. I wouldn’t put too much 
>>>>>>> effort
>>>>>>> into
>>>>>>> this mixed scenario. As the client finds brokers which support the new
>>>>>>> RPCs,
>>>>>>> it can begin to follow the KIP-714 mechanism.
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Andrew
>>>>>>>
>>>>>>>> On 22 Sep 2023, at 20:01, Philip Nee <philip...@gmail.com> wrote:
>>>>>>>>
>>>>>>>> Hi Andrew -
>>>>>>>>
>>>>>>>> Question on top of your answers: Do you think the client should 
>>>>>>>> actively
>>>>>>>> search for a broker that supports this RPC? As previously mentioned, 
>>>>>>>> the
>>>>>>>> broker uses the leastLoadedNode to find its first connection (am
>>>>>>>> I correct?), and what if that broker doesn't support the metric push?
>>>>>>>>
>>>>>>>> P
>>>>>>>>
>>>>>>>> On Fri, Sep 22, 2023 at 10:20 AM Andrew Schofield <
>>>>>>>> andrew_schofield_j...@outlook.com> wrote:
>>>>>>>>
>>>>>>>>> Hi Kirk,
>>>>>>>>> Thanks for your question. You are correct that the presence or absence
>>>>>>> of
>>>>>>>>> the new RPCs in the
>>>>>>>>> ApiVersionsResponse tells the client whether to request the telemetry
>>>>>>>>> subscriptions and push
>>>>>>>>> metrics.
>>>>>>>>>
>>>>>>>>> This is of course tricky in practice. It would be conceivable, as a
>>>>>>>>> cluster is upgraded to AK 3.7
>>>>>>>>> or as a client metrics receiver plugin is deployed across the cluster,
>>>>>>>>> that a client connects to some
>>>>>>>>> brokers that support the new RPCs and some that do not.
>>>>>>>>>
>>>>>>>>> Here’s my suggestion:
>>>>>>>>> * If a client is not connected to any brokers that support in the new
>>>>>>>>> RPCs, it cannot push metrics.
>>>>>>>>> * If a client is only connected to brokers that support the new RPCs, 
>>>>>>>>> it
>>>>>>>>> will use the new RPCs in
>>>>>>>>> accordance with the KIP.
>>>>>>>>> * If a client is connected to some brokers that support the new RPCs 
>>>>>>>>> and
>>>>>>>>> some that do not, it will
>>>>>>>>> use the new RPCs with the supporting subset of brokers in accordance
>>>>>>> with
>>>>>>>>> the KIP.
>>>>>>>>>
>>>>>>>>> Comments?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Andrew
>>>>>>>>>
>>>>>>>>>> On 22 Sep 2023, at 16:01, Kirk True <k...@kirktrue.pro> wrote:
>>>>>>>>>>
>>>>>>>>>> Hi Andrew/Jun,
>>>>>>>>>>
>>>>>>>>>> I want to make sure I understand question/comment #119… In the case
>>>>>>>>> where a cluster without a metrics client receiver is later 
>>>>>>>>> reconfigured
>>>>>>> and
>>>>>>>>> restarted to include a metrics client receiver, do we want the client 
>>>>>>>>> to
>>>>>>>>> thereafter begin pushing metrics to the cluster? From Andrew’s 
>>>>>>>>> response
>>>>>>> to
>>>>>>>>> question #119, it sounds like we’re using the presence/absence of the
>>>>>>>>> relevant RPCs in ApiVersionsResponse as the to-push-or-not-to-push
>>>>>>>>> indicator. Do I have that correct?
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>> Kirk
>>>>>>>>>>
>>>>>>>>>>> On Sep 21, 2023, at 7:42 AM, Andrew Schofield <
>>>>>>>>> andrew_schofield_j...@outlook.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Hi Jun,
>>>>>>>>>>> Thanks for your comments. I’ve updated the KIP to clarify where
>>>>>>>>> necessary.
>>>>>>>>>>>
>>>>>>>>>>> 110. Yes, agree. The motivation section mentions this.
>>>>>>>>>>>
>>>>>>>>>>> 111. The replacement of ‘-‘ with ‘.’ for metric names and the
>>>>>>>>> replacement of
>>>>>>>>>>> ‘-‘ with ‘_’ for attribute keys is following the OTLP guidelines. I
>>>>>>>>> think it’s a bit
>>>>>>>>>>> of a debatable point. OTLP makes a distinction between a namespace
>>>>>>> and a
>>>>>>>>>>> multi-word component. If it was “client.id” then “client” would be a
>>>>>>>>> namespace with
>>>>>>>>>>> an attribute key “id”. But “client_id” is just a key. So, it was
>>>>>>>>> intentional, but debatable.
>>>>>>>>>>>
>>>>>>>>>>> 112. Thanks. The link target moved. Fixed.
>>>>>>>>>>>
>>>>>>>>>>> 113. Thanks. Fixed.
>>>>>>>>>>>
>>>>>>>>>>> 114.1. If a standard metric makes sense for a client, it should use
>>>>>>> the
>>>>>>>>> exact same
>>>>>>>>>>> name. If a standard metric doesn’t make sense for a client, then it
>>>>>>> can
>>>>>>>>> omit that metric.
>>>>>>>>>>>
>>>>>>>>>>> For a required metric, the situation is stronger. All clients must
>>>>>>>>> implement these
>>>>>>>>>>> metrics with these names in order to implement the KIP. But the
>>>>>>>>> required metrics
>>>>>>>>>>> are essentially the number of connections and the request latency,
>>>>>>>>> which do not
>>>>>>>>>>> reference the underlying implementation of the client (which
>>>>>>>>> producer.record.queue.time.max
>>>>>>>>>>> of course does).
>>>>>>>>>>>
>>>>>>>>>>> I suppose someone might build a producer-only client that didn’t 
>>>>>>>>>>> have
>>>>>>>>> consumer metrics.
>>>>>>>>>>> In this case, the consumer metrics would conceptually have the 
>>>>>>>>>>> value 0
>>>>>>>>> and would not
>>>>>>>>>>> need to be sent to the broker.
>>>>>>>>>>>
>>>>>>>>>>> 114.2. If a client does not implement some metrics, they will not be
>>>>>>>>> available for
>>>>>>>>>>> analysis and troubleshooting. It just makes the ability to combine
>>>>>>>>> metrics from lots
>>>>>>>>>>> different clients less complete.
>>>>>>>>>>>
>>>>>>>>>>> 115. I think it was probably a mistake to be so specific about
>>>>>>>>> threading in this KIP.
>>>>>>>>>>> When the consumer threading refactor is complete, of course, it 
>>>>>>>>>>> would
>>>>>>>>> do the appropriate
>>>>>>>>>>> equivalent. I’ve added a clarification and massively simplified this
>>>>>>>>> section.
>>>>>>>>>>>
>>>>>>>>>>> 116. I removed “client.terminating”.
>>>>>>>>>>>
>>>>>>>>>>> 117. Yes. Horrid. Fixed.
>>>>>>>>>>>
>>>>>>>>>>> 118. The Terminating flag just indicates that this is the final
>>>>>>>>> PushTelemetryRequest
>>>>>>>>>>> from this client. Any subsequent request will be rejected. I think
>>>>>>> this
>>>>>>>>> flag should remain.
>>>>>>>>>>>
>>>>>>>>>>> 119. Good catch. This was actually contradicting another part of the
>>>>>>>>> KIP. The current behaviour
>>>>>>>>>>> is indeed preserved. If the broker doesn’t have a client metrics
>>>>>>>>> receiver plugin, the new RPCs
>>>>>>>>>>> in this KIP are “turned off” and not reported in 
>>>>>>>>>>> ApiVersionsResponse.
>>>>>>>>> The client will not
>>>>>>>>>>> attempt to push metrics.
>>>>>>>>>>>
>>>>>>>>>>> 120. The error handling table lists the error codes for
>>>>>>>>> PushTelemetryResponse. I’ve added one
>>>>>>>>>>> but it looked good to me. GetTelemetrySubscriptions doesn’t have any
>>>>>>>>> error codes, since the
>>>>>>>>>>> situation in which the client telemetry is not supported is handled 
>>>>>>>>>>> by
>>>>>>>>> the RPCs not being offered
>>>>>>>>>>> by the broker.
>>>>>>>>>>>
>>>>>>>>>>> 121. Again, I think it’s probably a mistake to be specific about
>>>>>>>>> threading. Removed.
>>>>>>>>>>>
>>>>>>>>>>> 122. Good catch. For DescribeConfigs, the ACL operation should be
>>>>>>>>>>> “DESCRIBE_CONFIGS”. For AlterConfigs, the ACL operation should be
>>>>>>>>>>> “ALTER” (not “WRITE” as it said). The checks are made on the CLUSTER
>>>>>>>>>>> resource.
>>>>>>>>>>>
>>>>>>>>>>> Thanks for the detailed review.
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Andrew
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> 110. Another potential motivation is the multiple clients support.
>>>>>>>>> Some of
>>>>>>>>>>>> the places may not have good monitoring support for non-java 
>>>>>>>>>>>> clients.
>>>>>>>>>>>>
>>>>>>>>>>>> 111. OpenTelemetry Naming: We replace '-' with '.' for metric name
>>>>>>> and
>>>>>>>>>>>> replace '-' with '_' for attributes. Why is the inconsistency?
>>>>>>>>>>>>
>>>>>>>>>>>> 112. OTLP specification: Page is not found from the link.
>>>>>>>>>>>>
>>>>>>>>>>>> 113. "Defining standard and required metrics makes the monitoring 
>>>>>>>>>>>> and
>>>>>>>>>>>> troubleshooting of clients from various client types ": Incomplete
>>>>>>>>> sentence.
>>>>>>>>>>>>
>>>>>>>>>>>> 114. standard/required metrics
>>>>>>>>>>>> 114.1 Do other clients need to implement those metrics with the 
>>>>>>>>>>>> exact
>>>>>>>>> same
>>>>>>>>>>>> names?
>>>>>>>>>>>> 114.2 What happens if some of those metrics are missing from a
>>>>>>> client?
>>>>>>>>>>>>
>>>>>>>>>>>> 115. "KafkaConsumer: both the "heart beat" and application 
>>>>>>>>>>>> threads":
>>>>>>> We
>>>>>>>>>>>> have an ongoing effort to refactor the consumer threading model (
>>>>>>>>>>>>
>>>>>>>>>
>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/Consumer+threading+refactor+design
>>>>>>>>> ).
>>>>>>>>>>>> Once this is done, PRC requests will only be made from the 
>>>>>>>>>>>> background
>>>>>>>>>>>> thread. Should this KIP follow the new model only?
>>>>>>>>>>>>
>>>>>>>>>>>> 116. 'The metrics should contain the reason for the client
>>>>>>> termination
>>>>>>>>> by
>>>>>>>>>>>> including the client.terminating metric with the label “reason” 
>>>>>>>>>>>> ...'.
>>>>>>>>> Hmm,
>>>>>>>>>>>> are we introducing a new metric client.terminating? If so, that 
>>>>>>>>>>>> needs
>>>>>>>>> to be
>>>>>>>>>>>> explicitly listed.
>>>>>>>>>>>>
>>>>>>>>>>>> 117. "As the metrics plugin may need to add additional metrics on 
>>>>>>>>>>>> top
>>>>>>>>> of
>>>>>>>>>>>> this the generic metrics receiver in the broker will not add these
>>>>>>>>> labels
>>>>>>>>>>>> but rely on the plugins to do so," The sentence doesn't read well.
>>>>>>>>>>>>
>>>>>>>>>>>> 118. "it is possible for the client to send at most one accepted
>>>>>>>>>>>> out-of-profile per connection before the rate-limiter kicks in": If
>>>>>>> we
>>>>>>>>> do
>>>>>>>>>>>> this, do we still need the Terminating flag in
>>>>>>> PushTelemetryRequestV0?
>>>>>>>>>>>>
>>>>>>>>>>>> 119. "If there is no client metrics receiver plugin configured on 
>>>>>>>>>>>> the
>>>>>>>>>>>> broker, it will respond to GetTelemetrySubscriptionsRequest with
>>>>>>>>>>>> RequestedMetrics set to Null and a -1 SubscriptionId. The client
>>>>>>> should
>>>>>>>>>>>> send a new GetTelemetrySubscriptionsRequest after the 
>>>>>>>>>>>> PushIntervalMs
>>>>>>>>> has
>>>>>>>>>>>> expired. This allows the metrics receiver to be enabled or disabled
>>>>>>>>> without
>>>>>>>>>>>> having to restart the broker or reset the client connection."
>>>>>>>>>>>> "no client metrics receiver plugin configured" is defined by no
>>>>>>> metric
>>>>>>>>>>>> reporter implementing the ClientTelemetry interface, right? In that
>>>>>>>>> case,
>>>>>>>>>>>> it would be useful to avoid the clients sending
>>>>>>>>>>>> GetTelemetrySubscriptionsRequest periodically to preserve the 
>>>>>>>>>>>> current
>>>>>>>>>>>> behavior.
>>>>>>>>>>>>
>>>>>>>>>>>> 120. GetTelemetrySubscriptionsResponseV0 and 
>>>>>>>>>>>> PushTelemetryRequestV0:
>>>>>>>>> Could
>>>>>>>>>>>> we list error codes for each?
>>>>>>>>>>>>
>>>>>>>>>>>> 121. "ClientTelemetryReceiver.ClientTelemetryReceiver This method 
>>>>>>>>>>>> may
>>>>>>>>> be
>>>>>>>>>>>> called from the request handling thread": Where else can this 
>>>>>>>>>>>> method
>>>>>>> be
>>>>>>>>>>>> called?
>>>>>>>>>>>>
>>>>>>>>>>>> 122. DescribeConfigs/AlterConfigs already exist. Are we changing 
>>>>>>>>>>>> the
>>>>>>>>> ACL?
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>
>>>>>>>>>>>> Jun
>>>>>>>>>>>>
>>>>>>>>>>>> On Mon, Jul 31, 2023 at 4:33 AM Andrew Schofield <
>>>>>>>>>>>> andrew_schofield_j...@outlook.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Milind,
>>>>>>>>>>>>> Thanks for your question.
>>>>>>>>>>>>>
>>>>>>>>>>>>> On reflection, I agree that INVALID_RECORD is most likely to be
>>>>>>>>> caused by a
>>>>>>>>>>>>> problem in the serialization in the client. I have changed the
>>>>>>> client
>>>>>>>>>>>>> action in this case
>>>>>>>>>>>>> to “Log an error and stop pushing metrics”.
>>>>>>>>>>>>>
>>>>>>>>>>>>> I have updated the KIP text accordingly.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Andrew
>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 31 Jul 2023, at 12:09, Milind Luthra
>>>>>>>>> <milut...@confluent.io.INVALID>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Andrew,
>>>>>>>>>>>>>> Thanks for the clarifications.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> About 2b:
>>>>>>>>>>>>>> In case a client has a bug while serializing, it might be 
>>>>>>>>>>>>>> difficult
>>>>>>>>> for
>>>>>>>>>>>>> the
>>>>>>>>>>>>>> client to recover from that without code changes. In that, it 
>>>>>>>>>>>>>> might
>>>>>>>>> be
>>>>>>>>>>>>> good
>>>>>>>>>>>>>> to just log the INVALID_RECORD as an error, and treat the error 
>>>>>>>>>>>>>> as
>>>>>>>>> fatal
>>>>>>>>>>>>>> for the client (only fatal in terms of sending the metrics, the
>>>>>>>>> client
>>>>>>>>>>>>> can
>>>>>>>>>>>>>> keep functioning otherwise). What do you think?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>> Milind
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Mon, Jul 24, 2023 at 8:18 PM Andrew Schofield <
>>>>>>>>>>>>>> andrew_schofield_j...@outlook.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi Milind,
>>>>>>>>>>>>>>> Thanks for your questions about the KIP.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 1) I did some archaeology and looked at historical versions of 
>>>>>>>>>>>>>>> the
>>>>>>>>> KIP.
>>>>>>>>>>>>> I
>>>>>>>>>>>>>>> think this is
>>>>>>>>>>>>>>> just a mistake. 5 minutes is the default metric push interval. 
>>>>>>>>>>>>>>> 30
>>>>>>>>>>>>> minutes
>>>>>>>>>>>>>>> is a mystery
>>>>>>>>>>>>>>> to me. I’ve updated the KIP.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2) I think there are two situations in which INVALID_RECORD 
>>>>>>>>>>>>>>> might
>>>>>>>>> occur.
>>>>>>>>>>>>>>> a) The client might perhaps be using a content-type that the
>>>>>>> broker
>>>>>>>>> does
>>>>>>>>>>>>>>> not support.
>>>>>>>>>>>>>>> The KIP mentions content-type as a future extension, but there’s
>>>>>>>>> only
>>>>>>>>>>>>> one
>>>>>>>>>>>>>>> supported
>>>>>>>>>>>>>>> to start with. Until we have multiple content-types, this seems
>>>>>>> out
>>>>>>>>> of
>>>>>>>>>>>>>>> scope. I think a
>>>>>>>>>>>>>>> future KIP would add another error code for this.
>>>>>>>>>>>>>>> b) The client might perhaps have a bug which means the metrics
>>>>>>>>> payload
>>>>>>>>>>>>> is
>>>>>>>>>>>>>>> malformed.
>>>>>>>>>>>>>>> Logging a warning and attempting the next metrics push on the 
>>>>>>>>>>>>>>> push
>>>>>>>>>>>>>>> interval seems
>>>>>>>>>>>>>>> appropriate.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> UNKNOWN_SUBSCRIPTION_ID would indeed be handled by making an
>>>>>>>>> immediate
>>>>>>>>>>>>>>> GetTelemetrySubscriptionsRequest.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> UNSUPPORTED_COMPRESSION_TYPE seems like either a client bug or
>>>>>>>>> perhaps
>>>>>>>>>>>>>>> a situation in which a broker sends a compression type in a
>>>>>>>>>>>>>>> GetTelemetrySubscriptionsResponse
>>>>>>>>>>>>>>> which is subsequently not supported when its used with a
>>>>>>>>>>>>>>> PushTelemetryRequest.
>>>>>>>>>>>>>>> We do want the client to have the opportunity to get an 
>>>>>>>>>>>>>>> up-to-date
>>>>>>>>> list
>>>>>>>>>>>>> of
>>>>>>>>>>>>>>> supported
>>>>>>>>>>>>>>> compression types. I think an immediate
>>>>>>>>> GetTelemetrySubscriptionsRequest
>>>>>>>>>>>>>>> is appropriate.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 3) If a client attempts a subsequent handshake with a Null
>>>>>>>>>>>>>>> ClientInstanceId, the
>>>>>>>>>>>>>>> receiving broker may not already know the client's existing
>>>>>>>>>>>>>>> ClientInstanceId. If the
>>>>>>>>>>>>>>> receiving broker knows the existing ClientInstanceId, it simply
>>>>>>>>> responds
>>>>>>>>>>>>>>> the existing
>>>>>>>>>>>>>>> value back to the client. If it does not know the existing
>>>>>>>>>>>>>>> ClientInstanceId, it will create
>>>>>>>>>>>>>>> a new client instance ID and respond with that.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I will update the KIP with these clarifications.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>> Andrew
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On 17 Jul 2023, at 14:21, Milind Luthra
>>>>>>>>> <milut...@confluent.io.INVALID
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi Andrew, thanks for this KIP.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I had a few questions regarding the "Error handling" section.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 1. It mentions that "The 5 and 30 minute retries are to
>>>>>>> eventually
>>>>>>>>>>>>>>> trigger
>>>>>>>>>>>>>>>> a retry and avoid having to restart clients if the cluster
>>>>>>> metrics
>>>>>>>>>>>>>>>> configuration is disabled temporarily, e.g., by operator error,
>>>>>>>>> rolling
>>>>>>>>>>>>>>>> upgrades, etc."
>>>>>>>>>>>>>>>> But this 30 min interval isn't mentioned anywhere else. What is
>>>>>>> it
>>>>>>>>>>>>>>>> referring to?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 2. For the actual errors:
>>>>>>>>>>>>>>>> INVALID_RECORD : The action required is to "Log a warning to 
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> application and schedule the next
>>>>>>> GetTelemetrySubscriptionsRequest
>>>>>>>>> to 5
>>>>>>>>>>>>>>>> minutes". Why is this 5 minutes, and not something like
>>>>>>>>> PushIntervalMs?
>>>>>>>>>>>>>>> And
>>>>>>>>>>>>>>>> also, why are we scheduling a GetTelemetrySubscriptionsRequest 
>>>>>>>>>>>>>>>> in
>>>>>>>>> this
>>>>>>>>>>>>>>>> case, if the serialization is broken?
>>>>>>>>>>>>>>>> UNKNOWN_SUBSCRIPTION_ID , UNSUPPORTED_COMPRESSION_TYPE : just 
>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>> confirm,
>>>>>>>>>>>>>>>> the GetTelemetrySubscriptionsRequest needs to be scheduled
>>>>>>>>> immediately
>>>>>>>>>>>>>>>> after the PushTelemetry response, correct?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> 3. For "Subsequent GetTelemetrySubscriptionsRequests must 
>>>>>>>>>>>>>>>> include
>>>>>>>>> the
>>>>>>>>>>>>>>>> ClientInstanceId returned in the first response, regardless of
>>>>>>>>> broker":
>>>>>>>>>>>>>>>> Will a broker error be returned in case some implementation of
>>>>>>>>> this KIP
>>>>>>>>>>>>>>>> violates this accidentally and sends a request with
>>>>>>>>> ClientInstanceId =
>>>>>>>>>>>>>>> Null
>>>>>>>>>>>>>>>> even when it's been obtained already? Or will a new
>>>>>>>>> ClientInstanceId be
>>>>>>>>>>>>>>>> returned without an error?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Thanks!
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Tue, Jun 13, 2023 at 8:38 PM Andrew Schofield <
>>>>>>>>>>>>>>>> andrew_schofield_j...@outlook.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>> I would like to start a new discussion thread on KIP-714: 
>>>>>>>>>>>>>>>>> Client
>>>>>>>>>>>>> metrics
>>>>>>>>>>>>>>>>> and observability.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>
>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-714%3A+Client+metrics+and+observability
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I have edited the proposal significantly to reduce the scope.
>>>>>>> The
>>>>>>>>>>>>>>> overall
>>>>>>>>>>>>>>>>> mechanism for client metric subscriptions is unchanged, but 
>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> KIP is now based on the existing client metrics, rather than
>>>>>>>>>>>>> introducing
>>>>>>>>>>>>>>>>> new metrics. The purpose remains helping cluster operators
>>>>>>>>>>>>>>>>> investigate performance problems experienced by clients 
>>>>>>>>>>>>>>>>> without
>>>>>>>>>>>>>>> requiring
>>>>>>>>>>>>>>>>> changes to the client application code or configuration.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>> Andrew


Reply via email to