05/06. I also find BrokerSoftwareName and BrokerSoftwareVersion odd to
be honest because the RPC is supposed to describe the cluster. I was
also re-considering adding it per broker but this would be a little
more involved. It basically requires every broker to send their
version to the controller and the controller has to send the versions
to all the brokers via the metadata log. That would be the cleanest
approach.

Best,
David

On Fri, Dec 2, 2022 at 11:58 PM Travis Bischel <travis.bisc...@gmail.com> wrote:
>
> Thanks for the reply,
>
> 04. `nullable-string`, my mistake on that — this is the representation I have 
> for nullable strings in my own DSL in franz-go. I’ve fixed that.
>
> 05. I think that ClusterSoftwareVersion and ClusterSoftwareName would be a 
> bit odd: technically these are per-broker responses, and if a person truly 
> does want to determine the cluster version, they need to request all brokers. 
> It will be more difficult to explain in documentation that “even though this 
> says cluster, it means broker”. I was also figuring that `BrokerSoftwareName` 
> and `BrokerSoftwareVersion` immediately following the `Brokers` array had 
> nice consistency.
>
> 06. I’ve added an AdminClient API section that adds two new methods to 
> DescribeClusterResponse: `public String brokerSoftwareName()` and `public 
> String brokerSoftwareVersion()`.
>
> 07. I’ve added a “Return the name and version per broker in the 
> DescribeCluster response” rejected alternative.
>
> Let me know what you think,
> - Travis
>
> On 2022/12/02 17:25:37 David Jacot wrote:
> > Yeah, it is too late for 3.4. I have a few more comments:
> >
> > 04. `nullable-string` is not a valid type. You have to use "type":
> > "string", "versions": "1+", "nullableVersions": "1+".
> >
> > 05. BrokerSoftwareName/BrokerSoftwareVersion feel a bit weird in a
> > DescribeClusterResponse. I wonder if we should replace Broker by
> > Cluster. It is not 100% accurate but it is rare to not have an
> > homogeneous cluster.
> >
> > 06. We need to extend the java Admin client to expose those fields. We
> > cannot add fields to the protocol that are not used anywhere in Kafka.
> >
> > 07. Could we add in the rejected alternatives why we don't add the
> > name/version per broker? It is because it is not available centrally
> > in Kafka.
> >
> > Best,
> > David
> >
> > On Fri, Dec 2, 2022 at 6:03 PM Travis Bischel <tr...@gmail.com> wrote:
> > >
> > > I see now that this KIP is past the freeze deadline and will not make 3.4 
> > > — but, 3.4 thankfully will still be able to be detected by an ApiVersions 
> > > response due to KIP-866. I’d like to proceed with this KIP to ensure full 
> > > implementation can be agreed upon and merged by 3.5.
> > >
> > > Thanks!
> > > - Travis
> > >
> > > On 2022/12/02 16:40:26 Travis Bischel wrote:
> > > > Hi David,
> > > >
> > > > No worries for the late reply — my main worry is getting this in by 
> > > > Kafka 3.4 so there is no gap in detecting versions :)
> > > >
> > > > I’m +1 to adding this to DescribeCluster. I just edited the KIP to 
> > > > replace ApiVersions with DescribeCluster, and added the original 
> > > > ApiVersions idea to the list of rejected alternatives. Please take a 
> > > > look again and let me know what you think.
> > > >
> > > > Thank you!
> > > > - Travis
> > > >
> > > > On 2022/12/02 15:35:09 David Jacot wrote:
> > > > > Hi Travis,
> > > > >
> > > > > Please, excuse me for my late reply.
> > > > >
> > > > > 02. Yeah, I agree that it is more convenient to rely on the api
> > > > > versions but that does not protect us from misuages.
> > > > >
> > > > > 03. Yeah, I was about to suggest the same. Adding the information to
> > > > > the DescribeCluster API would work and we also have the
> > > > > Admin.describeCluster API to access it. We could provide the software
> > > > > name and version of the broker that services the request. Adding it
> > > > > per broker is challenging because the broker doesn't know the version
> > > > > of the others. If you use the API directly, you can always send it to
> > > > > all brokers in the cluster to get all the versions. This would also
> > > > > mitigate 02. because clients won't use the DescribeCluster API to gate
> > > > > features.
> > > > >
> > > > > Best,
> > > > > David
> > > > >
> > > > > On Fri, Nov 11, 2022 at 5:50 PM Travis Bischel <tr...@gmail.com> 
> > > > > wrote:
> > > > > >
> > > > > > Two quick mistakes to clarify:
> > > > > >
> > > > > > When I say ClusterMetadata, I mean request 60, DescribeCluster.
> > > > > >
> > > > > > Also, the email subject of this entire thread should be "[DISCUSS] 
> > > > > > KIP-885: Expose Broker's Name and Version to Clients”. I must have 
> > > > > > either accidentally pasted the “Skip to end of metadata”, or did 
> > > > > > not delete something.
> > > > > >
> > > > > > Cheers,
> > > > > > -Travis
> > > > > >
> > > > > > On 2022/11/11 16:45:12 Travis Bischel wrote:
> > > > > > > Thanks for the replies David and Magnus
> > > > > > >
> > > > > > > David:
> > > > > > >
> > > > > > > 02: From a client implementation perspective, it is easier to 
> > > > > > > gate features based on the max version numbers returned per 
> > > > > > > request, rather than any textual representation of a string. I’m 
> > > > > > > not really envisioning a client implementation trying to match on 
> > > > > > > an undefined string, especially if it’s documented as just 
> > > > > > > metadata information.
> > > > > > >
> > > > > > > 03: Interesting, I may be one of the few that does query the 
> > > > > > > version directly. Perhaps this can be some new information that 
> > > > > > > is instead added to request 60, ClusterMetadata? The con with 
> > > > > > > ClusterMetadata is that I’m interested in this information on a 
> > > > > > > per-broker basis. We could add these fields per each broker in 
> > > > > > > the Brokers field, though.
> > > > > > >
> > > > > > > Magnus:
> > > > > > >
> > > > > > > As far as I can see, only my franz-go client offers this ability 
> > > > > > > to “guess” the version of a broker — and it’s historically done 
> > > > > > > so through ApiVersions, which was the only way to do this. This 
> > > > > > > feature was used in three projects by two people: my kcl project, 
> > > > > > > and the formerly-known-as Kowl and Kminion projects.
> > > > > > >
> > > > > > > After reading through most of the discussion thread on KIP-35, it 
> > > > > > > seems that the conversation about using a broker version string / 
> > > > > > > cluster aggregate version was specifically related to having the 
> > > > > > > client choose how to behave (i.e., choose what versions of 
> > > > > > > requests to use). The discussion was not around having the broker 
> > > > > > > version as a piece of information that a client can use in log 
> > > > > > > lines or for end-user presentation purposes.
> > > > > > >
> > > > > > > It seems a bit of an misdirected worry that a client implementor 
> > > > > > > may accidentally use an unstructured string field for versioning 
> > > > > > > purposes, especially when another field (ApiKeys) exists for 
> > > > > > > versioning purposes and is widely known. Implementing a Kafka 
> > > > > > > client is quite complex and there are so many other areas an 
> > > > > > > implementor can go wrong, I’m not sure that we should be worried 
> > > > > > > about an unstructured and documented metadata field.
> > > > > > >
> > > > > > > "the existing ApiVersionsReq  … this information is richer than a 
> > > > > > > single version string"
> > > > > > >
> > > > > > > Agree, this true for clients. However, it’s completely useless 
> > > > > > > visually for end users.
> > > > > > >
> > > > > > > The reason Kminion used the version guess was two fold: to emit 
> > > > > > > log a log on startup that the process was talking to Kafka v#.#, 
> > > > > > > and to emit a const gauge metric for Prometheus where people 
> > > > > > > could monitor external to Kafka what version each broker was 
> > > > > > > running.
> > > > > > >
> > > > > > > Kowl uses the version guess to display the Kafka version the 
> > > > > > > process is talking to immediately when you go to the Brokers 
> > > > > > > panel. I envision that this same UI display can be added to 
> > > > > > > Conduktor, even Confluent, etc.
> > > > > > >
> > > > > > > kcl uses the version guess as an extremely quick debugging 
> > > > > > > utility: software engineers (not cluster administrators) might 
> > > > > > > not always know what version of Kafka they are talking to, but 
> > > > > > > they are trying to use a client. I often receive questions about 
> > > > > > > “why isn’t this xyz thing working”, I ask for their cluster 
> > > > > > > version with kcl, and then we can jump into diagnosing the 
> > > > > > > problem much quicker.
> > > > > > >
> > > > > > > I think, if we focus on the persona of a cluster administrator, 
> > > > > > > it’s not obvious what the need for this KIP is. For me, focusing 
> > > > > > > on the perspective of an end-user of a client makes the need a 
> > > > > > > bit clearer. It is not the responsibility of an end-user to 
> > > > > > > manage the cluster version, but it is the responsibility of an 
> > > > > > > end-user to know which version of a cluster they are talking to 
> > > > > > > so that they know which fields / requests / behaviors are 
> > > > > > > supported in a client
> > > > > > >
> > > > > > > All that said: I think this information is worth it and unlikely 
> > > > > > > to be misused. IMO, ApiVersions is the main place to include this 
> > > > > > > information, but another alternative is ClusterMetadata. Adding 
> > > > > > > these fields to ClusterMetadata might be a bit awkward and may 
> > > > > > > return stale information sometimes during a rolling upgrade.
> > > > > > >
> > > > > > > Curious to know your thoughts, and again thank you for the 
> > > > > > > consideration and replies,
> > > > > > > - Travis
> > > > > > >
> > > > > > > On 2022/11/11 13:07:37 Magnus Edenhill wrote:
> > > > > > > > Hi Travis and thanks for the KIP, two comments below:
> > > > > > > >
> > > > > > > >
> > > > > > > > Den fre 11 nov. 2022 kl 13:37 skrev David Jacot 
> > > > > > > > <da...@gmail.com>:
> > > > > > > >
> > > > > > > > > 02: I am a bit concerned by clients that could misuse these 
> > > > > > > > > information.
> > > > > > > > > For instance, one may be tempted to rely on the version to 
> > > > > > > > > decide whether a
> > > > > > > > > feature is enabled or not. The api versions should remain the 
> > > > > > > > > source of
> > > > > > > > > truth but we cannot enforce it with the proposed approach. 
> > > > > > > > > That may be
> > > > > > > > > acceptable though.
> > > > > > > > >
> > > > > > > >
> > > > > > > > We proposed including this in the original ApiVersionRequest 
> > > > > > > > KIP-35 (waaay
> > > > > > > > back), but it was rejected
> > > > > > > > for exactly this reason; that it may(will) be misused by 
> > > > > > > > clients.
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > I would also like to question the actual end-user use of this 
> > > > > > > > information,
> > > > > > > > the existing ApiVersionsReq
> > > > > > > > already provides - on a detailed level - what features and 
> > > > > > > > functionality
> > > > > > > > the broker supports -
> > > > > > > > this information is richer than a single version string.
> > > > > > > >
> > > > > > > > The KIP says "End users can quickly check from a client if the 
> > > > > > > > cluster is
> > > > > > > > up to date" and
> > > > > > > > "Clients can also use the broker version in log lines so that 
> > > > > > > > end users can
> > > > > > > > quickly see
> > > > > > > > if a version looks about right or if something is seriously 
> > > > > > > > broken.":
> > > > > > > >
> > > > > > > > In my mind that's not typically the end-users role or 
> > > > > > > > responsibility, but
> > > > > > > > that of the Kafka cluster operator,
> > > > > > > > who'll already know the version being deployed.
> > > > > > > >
> > > > > > > >
> > > > > > > > Regards,
> > > > > > > > Magnus
> > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > > Le jeu. 10 nov. 2022 à 19:10, Travis Bischel 
> > > > > > > > > <tr...@gmail.com> a
> > > > > > > > > écrit :
> > > > > > > > >
> > > > > > > > > > Hi all,
> > > > > > > > > >
> > > > > > > > > > I've written a KIP to expose the BrokerSoftwareName and
> > > > > > > > > > BrokerSoftwareVersion to clients:
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-885%3A+Expose+Broker%27s+Name+and+Version+to+Clients
> > > > > > > > > >
> > > > > > > > > > If we agree this is useful, it would be great to have this 
> > > > > > > > > > in by 3.4.
> > > > > > > > > >
> > > > > > > > > > Thank you,
> > > > > > > > > > - Travis
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > >
> >

Reply via email to