Hi Magnus,

I think this is a very useful addition. We also have a similar (but much
more simplistic) implementation of this. Maybe I missed it in the KIP but
what about adding metrics about the subscription cache itself? That I think
would improve its usability and debuggability as we'd be able to see its
performance, hit/miss rates, eviction counts and others.

Best,
Viktor

On Thu, Nov 18, 2021 at 5:12 PM Magnus Edenhill <mag...@edenhill.se> wrote:

> Hi Mickael,
>
> see inline.
>
> Den ons 10 nov. 2021 kl 15:21 skrev Mickael Maison <
> mickael.mai...@gmail.com
> >:
>
> > Hi Magnus,
> >
> > I see you've addressed some of the points I raised above but some (4,
> > 5) have not been addressed yet.
> >
>
> Re 4) How will the user/app know metrics are being sent.
>
> One possibility is to add a JMX metric (thus for user consumption) for the
> number of metric pushes the
> client has performed, or perhaps the number of metrics subscriptions
> currently being collected.
> Would that be sufficient?
>
> Re 5) Metric sizes and rates
>
> A worst case scenario for a producer that is producing to 50 unique topics
> and emitting all standard metrics yields
> a serialized size of around 100KB prior to compression, which compresses
> down to about 20-30% of that depending
> on compression type and topic name uniqueness.
> The numbers for a consumer would be similar.
>
> In practice the number of unique topics would be far less, and the
> subscription set would typically be for a subset of metrics.
> So we're probably closer to 1kb, or less, compressed size per client per
> push interval.
>
> As both the subscription set and push intervals are controlled by the
> cluster operator it shouldn't be too hard
> to strike a good balance between metrics overhead and granularity.
>
>
>
> >
> > I'm really uneasy with this being enabled by default on the client
> > side. When collecting data, I think the best practice is to ensure
> > users are explicitly enabling it.
> >
>
> Requiring metrics to be explicitly enabled on clients severely cripples its
> usability and value.
>
> One of the problems that this KIP aims to solve is for useful metrics to be
> available on demand
> regardless of the technical expertise of the user. As Ryanne points, out a
> savvy user/organization
> will typically have metrics collection and monitoring in place already, and
> the benefits of this KIP
> are then more of a common set and format metrics across client
> implementations and languages.
> But that is not the typical Kafka user in my experience, they're not Kafka
> experts and they don't have the
> knowledge of how to best instrument their clients.
> Having metrics enabled by default for this user base allows the Kafka
> operators to proactively and reactively
> monitor and troubleshoot client issues, without the need for the less savvy
> user to do anything.
> It is often too late to tell a user to enable metrics when the problem has
> already occurred.
>
> Now, to be clear, even though metrics are enabled by default on clients it
> is not enabled by default
> on the brokers; the Kafka operator needs to build and set up a metrics
> plugin and add metrics subscriptions
> before anything is sent from the client.
> It is opt-out on the clients and opt-in on the broker.
>
>
>
>
> > You mentioned brokers already have
> > some(most?) of the information contained in metrics, if so then why
> > are we collecting it again? Surely there must be some new information
> > in the client metrics.
> >
>
> From the user's perspective the Kafka infrastructure extends from
> producer.send() to
> messages being returned from consumer.poll(), a giant black box where
> there's a lot going on between those
> two points. The brokers currently only see what happens once those requests
> and messages hits the broker,
> but as Kafka clients are complex pieces of machinery there's a myriad of
> queues, timers, and state
> that's critical to the operation and infrastructure that's not currently
> visible to the operator.
> Relying on the user to accurately and timely provide this missing
> information is not generally feasible.
>
>
> Most of the standard metrics listed in the KIP are data points that the
> broker does not have.
> Only a small number of metrics are duplicates (like the request counts and
> sizes), but they are included
> to ease correlation when inspecting these client metrics.
>
>
>
> > Moreover this is a brand new feature so it's even harder to justify
> > enabling it and forcing onto all our users. If disabled by default,
> > it's relatively easy to enable in a new release if we decide to, but
> > once enabled by default it's much harder to disable. Also this feature
> > will apply to all future metrics we will add.
> >
>
> I think maturity of a feature implementation should be the deciding factor,
> rather than
> the design of it (which this KIP is). I.e., if the implementation is not
> deemed mature enough
> for release X.Y it will be disabled.
>
>
>
> > Overall I think it's an interesting feature but I'd prefer to be
> > slightly defensive and see how it works in practice before enabling it
> > everywhere.
> >
>
> Right, and I agree on being defensive, but since this feature still
> requires manual
> enabling on the brokers before actually being used, I think that gives
> enough control
> to opt-in or out of this feature as needed.
>
> Thanks for your comments!
>
> Regards,
> Magnus
>
>
>
> > Thanks,
> > Mickael
> >
> > On Mon, Nov 8, 2021 at 7:55 AM Magnus Edenhill <mag...@edenhill.se>
> wrote:
> > >
> > > Thanks David for pointing this out,
> > > I've updated the KIP to include client_id as a matching selector.
> > >
> > > Regards,
> > > Magnus
> > >
> > > Den tors 4 nov. 2021 kl 18:01 skrev David Mao
> <d...@confluent.io.invalid
> > >:
> > >
> > > > Hey Magnus,
> > > >
> > > > I noticed that the KIP outlines the initial selectors supported as:
> > > >
> > > >    - client_instance_id - CLIENT_INSTANCE_ID UUID string
> > representation.
> > > >    - client_software_name  - client software implementation name.
> > > >    - client_software_version  - client software implementation
> version.
> > > >
> > > > In the given reactive monitoring workflow, we mention that the
> > application
> > > > user does not know their client's client instance ID, but it's
> outlined
> > > > that the operator can add a metrics subscription selecting for
> > clientId. I
> > > > don't see clientId as one of the supported selectors.
> > > > I can see how this would have made sense in a previous iteration
> given
> > that
> > > > the previous client instance ID proposal was to construct the client
> > > > instance ID using clientId as a prefix. Now that the client instance
> > ID is
> > > > a UUID, would we want to add clientId as a supported selector?
> > > > Let me know what you think.
> > > >
> > > > David
> > > >
> > > > On Tue, Oct 19, 2021 at 12:33 PM Magnus Edenhill <mag...@edenhill.se
> >
> > > > wrote:
> > > >
> > > > > Hi Mickael!
> > > > >
> > > > > Den tis 19 okt. 2021 kl 19:30 skrev Mickael Maison <
> > > > > mickael.mai...@gmail.com
> > > > > >:
> > > > >
> > > > > > Hi Magnus,
> > > > > >
> > > > > > Thanks for the proposal.
> > > > > >
> > > > > > 1. Looking at the protocol section, isn't "ClientInstanceId"
> > expected
> > > > > > to be a field in GetTelemetrySubscriptionsResponseV0? Otherwise,
> > how
> > > > > > does a client retrieve this value?
> > > > > >
> > > > >
> > > > > Good catch, it got removed by mistake in one of the edits.
> > > > >
> > > > >
> > > > > >
> > > > > > 2. In the client API section, you mention a new method
> > > > > > "clientInstanceId()". Can you clarify which interfaces are
> > affected?
> > > > > > Is it only Consumer and Producer?
> > > > > >
> > > > >
> > > > > And Admin. Will update the KIP.
> > > > >
> > > > >
> > > > >
> > > > > > 3. I'm a bit concerned this is enabled by default. Even if the
> data
> > > > > > collected is supposed to be not sensitive, I think this can be
> > > > > > problematic in some environments. Also users don't seem to have
> the
> > > > > > choice to only expose some metrics. Knowing how much data transit
> > > > > > through some applications can be considered critical.
> > > > > >
> > > > >
> > > > > The broker already knows how much data transits through the client
> > > > though,
> > > > > right?
> > > > > Care has been taken not to expose information in the standard
> metrics
> > > > that
> > > > > might
> > > > > reveal sensitive information.
> > > > >
> > > > > Do you have an example of how the proposed metrics could leak
> > sensitive
> > > > > information?
> > > > > As for limiting the what metrics to export; I guess that could make
> > sense
> > > > > in some
> > > > > very sensitive use-cases, but those users might disable metrics
> > > > altogether
> > > > > for now.
> > > > > Could these concerns be addressed by a later KIP?
> > > > >
> > > > >
> > > > >
> > > > > >
> > > > > > 4. As a user, how do you know if your application is actively
> > sending
> > > > > > metrics? Are there new metrics exposing what's going on, like how
> > much
> > > > > > data is being sent?
> > > > > >
> > > > >
> > > > > That's a good question.
> > > > > Since the proposed metrics interface is not aimed at, or directly
> > > > available
> > > > > to, the application
> > > > > I guess there's little point of adding it here, but instead adding
> > > > > something to the
> > > > > existing JMX metrics?
> > > > > Do you have any suggestions?
> > > > >
> > > > >
> > > > >
> > > > > > 5. If all metrics are enabled on a regular Consumer or Producer,
> do
> > > > > > you have an idea how much throughput this would use?
> > > > > >
> > > > >
> > > > > It depends on the number of partition/topics/etc the client is
> > producing
> > > > > to/consuming from.
> > > > > I'll add some sizes to the KIP for some typical use-cases.
> > > > >
> > > > >
> > > > > Thanks,
> > > > > Magnus
> > > > >
> > > > >
> > > > > > Thanks
> > > > > >
> > > > > > On Tue, Oct 19, 2021 at 5:06 PM Magnus Edenhill <
> > mag...@edenhill.se>
> > > > > > wrote:
> > > > > > >
> > > > > > > Den tis 19 okt. 2021 kl 13:22 skrev Tom Bentley <
> > tbent...@redhat.com
> > > > >:
> > > > > > >
> > > > > > > > Hi Magnus,
> > > > > > > >
> > > > > > > > I reviewed the KIP since you called the vote (sorry for not
> > > > reviewing
> > > > > > when
> > > > > > > > you announced your intention to call the vote). I have a few
> > > > > questions
> > > > > > on
> > > > > > > > some of the details.
> > > > > > > >
> > > > > > > > 1. There's no Javadoc on ClientTelemetryPayload.data(), so I
> > don't
> > > > > know
> > > > > > > > whether the payload is exposed through this method as
> > compressed or
> > > > > > not.
> > > > > > > > Later on you say "Decompression of the payloads will be
> > handled by
> > > > > the
> > > > > > > > broker metrics plugin, the broker should expose a suitable
> > > > > > decompression
> > > > > > > > API to the metrics plugin for this purpose.", which suggests
> > it's
> > > > the
> > > > > > > > compressed data in the buffer, but then we don't know which
> > codec
> > > > was
> > > > > > used,
> > > > > > > > nor the API via which the plugin should decompress it if
> > required
> > > > for
> > > > > > > > forwarding to the ultimate metrics store. Should the
> > > > > > ClientTelemetryPayload
> > > > > > > > expose a method to get the compression and a decompressor?
> > > > > > > >
> > > > > > >
> > > > > > > Good point, updated.
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > > 2. The client-side API is expressed as StringOrError
> > > > > > > > ClientInstance::ClientInstanceId(int timeout_ms). I
> understand
> > that
> > > > > > you're
> > > > > > > > thinking about the librdkafka implementation, but it would be
> > good
> > > > to
> > > > > > show
> > > > > > > > the API as it would appear on the Apache Kafka clients.
> > > > > > > >
> > > > > > >
> > > > > > > This was meant as pseudo-code, but I changed it to Java.
> > > > > > >
> > > > > > >
> > > > > > > > 3. "PushTelemetryRequest|Response - protocol request used by
> > the
> > > > > > client to
> > > > > > > > send metrics to any broker it is connected to." To be clear,
> > this
> > > > > means
> > > > > > > > that the client can choose any of the connected brokers and
> > push to
> > > > > > just
> > > > > > > > one of them? What should a supporting client do if it gets an
> > error
> > > > > > when
> > > > > > > > pushing metrics to a broker, retry sending to the same broker
> > or
> > > > try
> > > > > > > > pushing to another broker, or drop the metrics? Should
> > supporting
> > > > > > clients
> > > > > > > > send successive requests to a single broker, or round robin,
> > or is
> > > > > > that up
> > > > > > > > to the client author? I'm guessing the behaviour should be
> > sticky
> > > > to
> > > > > > > > support the rate limiting features, but I think it would be
> > good
> > > > for
> > > > > > client
> > > > > > > > authors if this section were explicit on the recommended
> > behaviour.
> > > > > > > >
> > > > > > >
> > > > > > > You are right, I've updated the KIP to make this clearer.
> > > > > > >
> > > > > > >
> > > > > > > > 4. "Mapping the client instance id to an actual application
> > > > instance
> > > > > > > > running on a (virtual) machine can be done by inspecting the
> > > > metrics
> > > > > > > > resource labels, such as the client source address and source
> > port,
> > > > > or
> > > > > > > > security principal, all of which are added by the receiving
> > broker.
> > > > > > This
> > > > > > > > will allow the operator together with the user to identify
> the
> > > > actual
> > > > > > > > application instance." Is this really always true? The source
> > IP
> > > > and
> > > > > > port
> > > > > > > > might be a loadbalancer/proxy in some setups. The principal,
> as
> > > > > already
> > > > > > > > mentioned in the KIP, might be shared between multiple
> > > > applications.
> > > > > > So at
> > > > > > > > worst the organization running the clients might have to
> > consult
> > > > the
> > > > > > logs
> > > > > > > > of a set of client applications, right?
> > > > > > > >
> > > > > > >
> > > > > > > Yes, that's correct. There's no guaranteed mapping from
> > > > > > client_instance_id
> > > > > > > to
> > > > > > > an actual instance, that's why the KIP recommends client
> > > > > implementations
> > > > > > to
> > > > > > > log the client instance id
> > > > > > > upon retrieval, and also provide an API for the application to
> > > > retrieve
> > > > > > the
> > > > > > > instance id programmatically
> > > > > > > if it has a better way of exposing it.
> > > > > > >
> > > > > > >
> > > > > > > 5. "Tests indicate that a compression ratio up to 10x is
> > possible for
> > > > > the
> > > > > > > > standard metrics." Client authors might appreciate your
> > mentioning
> > > > > > which
> > > > > > > > compression codec got these results.
> > > > > > > >
> > > > > > >
> > > > > > > Good point. Updated.
> > > > > > >
> > > > > > >
> > > > > > > > 6. "Should the client send a push request prior to expiry of
> > the
> > > > > > previously
> > > > > > > > calculated PushIntervalMs the broker will discard the metrics
> > and
> > > > > > return a
> > > > > > > > PushTelemetryResponse with the ErrorCode set to RateLimited."
> > Is
> > > > this
> > > > > > > > RATE_LIMITED a new error code? It's not mentioned in the "New
> > Error
> > > > > > Codes"
> > > > > > > > section.
> > > > > > > >
> > > > > > >
> > > > > > > That's a leftover, it should be using the standard ThrottleTime
> > > > > > mechanism.
> > > > > > > Fixed.
> > > > > > >
> > > > > > >
> > > > > > > > 7. In the section "Standard client resource labels"
> > application_id
> > > > is
> > > > > > > > described as Kafka Streams only, but the section of "Client
> > > > > > Identification"
> > > > > > > > talks about "application instance id as an optional future
> > > > > nice-to-have
> > > > > > > > that may be included as a metrics label if it has been set by
> > the
> > > > > > user", so
> > > > > > > > I'm confused whether non-Kafka Streams clients should set an
> > > > > > application_id
> > > > > > > > or not.
> > > > > > > >
> > > > > > >
> > > > > > > I'll clarify this in the KIP, but basically we would need to
> add
> > an `
> > > > > > > application.id` config
> > > > > > > property for non-streams clients for this purpose, and that's
> > outside
> > > > > the
> > > > > > > scope of this KIP since we want to make it zero-conf:ish on the
> > > > client
> > > > > > side.
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > Kind regards,
> > > > > > > >
> > > > > > > > Tom
> > > > > > > >
> > > > > > >
> > > > > > > Thanks for the review,
> > > > > > > Magnus
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > On Thu, Oct 7, 2021 at 5:26 PM Magnus Edenhill <
> > mag...@edenhill.se
> > > > >
> > > > > > wrote:
> > > > > > > >
> > > > > > > > > Hi all,
> > > > > > > > >
> > > > > > > > > I've updated the KIP following our recent discussions on
> the
> > > > > mailing
> > > > > > > > list:
> > > > > > > > >  - split the protocol in two, one for getting the metrics
> > > > > > subscriptions,
> > > > > > > > > and one for pushing the metrics.
> > > > > > > > >  - simplifications: initially only one supported metrics
> > format,
> > > > no
> > > > > > > > > client.id in the instance id, etc.
> > > > > > > > >  - made CLIENT_METRICS subscription configuration entries
> > more
> > > > > > structured
> > > > > > > > >    and allowing better client matching selectors (not only
> > on the
> > > > > > > > instance
> > > > > > > > > id, but also the other
> > > > > > > > >    client resource labels, such as client_software_name,
> > etc.).
> > > > > > > > >
> > > > > > > > > Unless there are further comments I'll call the vote in a
> > day or
> > > > > two.
> > > > > > > > >
> > > > > > > > > Regards,
> > > > > > > > > Magnus
> > > > > > > > >
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > Den mån 4 okt. 2021 kl 20:57 skrev Magnus Edenhill <
> > > > > > mag...@edenhill.se>:
> > > > > > > > >
> > > > > > > > > > Hi Gwen,
> > > > > > > > > >
> > > > > > > > > > I'm finishing up the KIP based on the last couple of
> > discussion
> > > > > > points
> > > > > > > > in
> > > > > > > > > > this thread
> > > > > > > > > > and will call the Vote later this week.
> > > > > > > > > >
> > > > > > > > > > Best,
> > > > > > > > > > Magnus
> > > > > > > > > >
> > > > > > > > > > Den lör 2 okt. 2021 kl 02:01 skrev Gwen Shapira
> > > > > > > > > <g...@confluent.io.invalid
> > > > > > > > > > >:
> > > > > > > > > >
> > > > > > > > > >> Hey,
> > > > > > > > > >>
> > > > > > > > > >> I noticed that there was no discussion for the last 10
> > days,
> > > > > but I
> > > > > > > > > >> couldn't
> > > > > > > > > >> find the vote thread. Is there one that I'm missing?
> > > > > > > > > >>
> > > > > > > > > >> Gwen
> > > > > > > > > >>
> > > > > > > > > >> On Wed, Sep 22, 2021 at 4:58 AM Magnus Edenhill <
> > > > > > mag...@edenhill.se>
> > > > > > > > > >> wrote:
> > > > > > > > > >>
> > > > > > > > > >> > Den tis 21 sep. 2021 kl 06:58 skrev Colin McCabe <
> > > > > > > > cmcc...@apache.org
> > > > > > > > > >:
> > > > > > > > > >> >
> > > > > > > > > >> > > On Mon, Sep 20, 2021, at 17:35, Feng Min wrote:
> > > > > > > > > >> > > > Thanks Magnus & Colin for the discussion.
> > > > > > > > > >> > > >
> > > > > > > > > >> > > > Based on KIP-714's stateless design, Client can
> > pretty
> > > > > much
> > > > > > use
> > > > > > > > > any
> > > > > > > > > >> > > > connection to any broker to send metrics. We are
> not
> > > > > > associating
> > > > > > > > > >> > > connection
> > > > > > > > > >> > > > with client metric state. Is my understanding
> > correct?
> > > > If
> > > > > > yes,
> > > > > > > > > how
> > > > > > > > > >> > about
> > > > > > > > > >> > > > the following two scenarios
> > > > > > > > > >> > > >
> > > > > > > > > >> > > > 1) One Client (Client-ID) registers two different
> > client
> > > > > > > > instance
> > > > > > > > > id
> > > > > > > > > >> > via
> > > > > > > > > >> > > > separate registration. Is it permitted? If OK, how
> > to
> > > > > > > > distinguish
> > > > > > > > > >> them
> > > > > > > > > >> > > from
> > > > > > > > > >> > > > the case 2 below.
> > > > > > > > > >> > > >
> > > > > > > > > >> > >
> > > > > > > > > >> > > Hi Feng,
> > > > > > > > > >> > >
> > > > > > > > > >> > > My understanding, which Magnus can clarify I guess,
> is
> > > > that
> > > > > > you
> > > > > > > > > could
> > > > > > > > > >> > have
> > > > > > > > > >> > > something like two Producer instances running with
> the
> > > > same
> > > > > > > > > client.id
> > > > > > > > > >> > > (perhaps because they're using the same config file,
> > for
> > > > > > example).
> > > > > > > > > >> They
> > > > > > > > > >> > > could even be in the same process. But they would
> get
> > > > > separate
> > > > > > > > > UUIDs.
> > > > > > > > > >> > >
> > > > > > > > > >> > > I believe Magnus used the term client to mean
> > "Producer or
> > > > > > > > > Consumer".
> > > > > > > > > >> So
> > > > > > > > > >> > > if you have both a Producer and a Consumer in your
> > > > > > application I
> > > > > > > > > would
> > > > > > > > > >> > > expect you'd get separate UUIDs for both. Again
> > Magnus can
> > > > > > chime
> > > > > > > > in
> > > > > > > > > >> > here, I
> > > > > > > > > >> > > guess.
> > > > > > > > > >> > >
> > > > > > > > > >> >
> > > > > > > > > >> > That's correct.
> > > > > > > > > >> >
> > > > > > > > > >> >
> > > > > > > > > >> > >
> > > > > > > > > >> > > > 2) How about the client restarting? What's the
> > > > > expectation?
> > > > > > > > Should
> > > > > > > > > >> the
> > > > > > > > > >> > > > server expect the client to carry a persisted
> client
> > > > > > instance id
> > > > > > > > > or
> > > > > > > > > >> > > should
> > > > > > > > > >> > > > the client be treated as a new instance?
> > > > > > > > > >> > >
> > > > > > > > > >> > > The KIP doesn't describe any mechanism for
> > persistence,
> > > > so I
> > > > > > would
> > > > > > > > > >> assume
> > > > > > > > > >> > > that when you restart the client you get a new
> UUID. I
> > > > agree
> > > > > > that
> > > > > > > > it
> > > > > > > > > >> > would
> > > > > > > > > >> > > be good to spell this out.
> > > > > > > > > >> > >
> > > > > > > > > >> > >
> > > > > > > > > >> > Right, it will not be persisted since a client
> instance
> > > > can't
> > > > > be
> > > > > > > > > >> restarted.
> > > > > > > > > >> >
> > > > > > > > > >> > Will update the KIP to make this clearer.
> > > > > > > > > >> >
> > > > > > > > > >> > /Magnus
> > > > > > > > > >> >
> > > > > > > > > >>
> > > > > > > > > >>
> > > > > > > > > >> --
> > > > > > > > > >> Gwen Shapira
> > > > > > > > > >> Engineering Manager | Confluent
> > > > > > > > > >> 650.450.2760 | @gwenshap
> > > > > > > > > >> Follow us: Twitter | blog
> > > > > > > > > >>
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > >
> > > > >
> > > >
> >
>

Reply via email to