Hi, Ismael,

I want to start a followup discussion on the following update in the KIP.

"Finally, we will fix a protocol specification inconsistency: FetchResponse
 has a records  field that is tagged as nullable  even though it is always
non-null and all librdkafka-based clients (which cover a large percentage
of clients in the wild) break if this field is set to null . We adjust the
spec to match reality - this way implementors do not have to find out about
this requirement during testing with real clients."

As discussed in
https://github.com/apache/kafka/pull/18726#discussion_r1972525165, in 3.9,
we actually do have a few code paths that will leave the records field null
in the FetchResponse.

Compression codec for topic is ZSTD and fetch version < 10.
https://github.com/apache/kafka/blob/3.9/core/src/main/scala/kafka/server/KafkaApis.scala#L835

Down-conversion of zstandard-compressed
https://github.com/apache/kafka/blob/3.9/core/src/main/scala/kafka/server/KafkaApis.scala#L884

Generic uncaught exception through
https://github.com/apache/kafka/blob/3.9/clients/src/main/java/org/apache/kafka/common/requests/FetchRequest.java#L365

So, it seems that we can't just mark records as non-nullable without a
version change since it can be null in some of the rare cases.

The inconsistency in the current implementation is not ideal though and it
would be useful to improve it. One potential way is to bump up the
FetchRequest version and make records officially non-nullable. If we do
that, we probably want to do the same for
FetchResponse.AbortedTransactions, ShareFetchResponse.records and
potentially ProduceRequest.records for better consistency.

Thanks,

Jun

On Mon, Nov 27, 2023 at 12:12 AM Anton Agestam
<anton.ages...@aiven.io.invalid> wrote:

> Sorry, the underscore was meant to refer to the
>
> https://github.com/apache/kafka/tree/trunk/clients/src/main/resources/common/message
> directory in the previous message.
>
> Den fre 24 nov. 2023 kl 14:30 skrev Anton Agestam <anton.ages...@aiven.io
> >:
>
> > Hi Ismael,
> >
> > This looks like a healthy KIP for Kafka 👍
> >
> > As the implementer of a Kafka Protocol library for Python, Aiven-Open/kio
> > [1], I'm curious how this change will affect the library.
> >
> > We generate entities for the full protocol by introspecting the JSON
> > schema definitions under _. How will the KIP change those definitions?
> Will
> > the dropped versions be reflected as bumps of the lower limit
> > in "validVersions"?
> >
> > Thanks and BR,
> > Anton
> >
> > [1]: https://github.com/Aiven-Open/kio
> >
> > On 2023/01/03 16:17:24 Ismael Juma wrote:
> > > Hi all,
> > >
> > > I would like to start a discussion regarding the removal of very old
> > client
> > > protocol API versions in Apache Kafka 4.0 to improve maintainability &
> > > supportability of Kafka. Please take a look at the proposal:
> > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-896%3A+Remove+old+client+protocol+API+versions+in+Kafka+4.0
> > >
> > > Ismael
> > >
> >
>

Reply via email to