Hello everyone, Thanks Chia-Ping for the advice. I’ve created a table to cover all upgrade path scenarios, hoping it provides more clarity. Please let me know if I’ve misunderstood anything. I appreciate any corrections!
Additionally, as I recently updated the KIP title, here’s the new link: https://cwiki.apache.org/confluence/display/KAFKA/KIP-1124%3A+Providing+a+clear+Kafka+Client+upgrade+path+for+4.x Regarding Kafka Connect, I’m still investigating and will update the KIP soon. I’ll share any new findings with you as soon as possible. Thank you! Best, Kuan-Po On 2025/02/23 19:12:41 Chia-Ping Tsai wrote: > hi Kuan-Po > > > Apologies for my mistake... Indeed, 2.1 should be the starting point for > > the bridge version. > > Have you updated the KIP? it seems the bridge version of client still starts > from 2.0 > > Additionally, if I were a user hesitant to adopt the bridge version, it would > be helpful to list common reasons to aid in choosing the "best" bridge > version. For example: > > Client Upgrade Paths > > // here is the table > > Best Bridge Version to you > > // add some explanation > > 1. minimize code refactoring - // Kafka Client: 3.3.x - 3.9.x + Kafka > Streams: 3.6.x - 3.9.x > 2. starts with quorum APIs - // 3.3.x - 3.9.x > 3. xxx > 4. aaa > n. last stable/active version: 3.9.x // we can emphasize the 3.9 is > recommended by community > > Best, > Chia-Ping > > > > On 2025/02/23 16:10:03 Kuan Po Tseng wrote: > > Thanks, Jun and Juma, > > > > Apologies for my mistake... Indeed, 2.1 should be the starting point for > > the bridge version. > > I will revise my statement as follows: > > - For Kafka Clients below 2.1, users need to upgrade to 3.9 first, then to > > 4.x. > > - For Kafka Clients from 2.1 or above, users can directly upgrade to 4.x. > > > > As for Kafka Connect, I initially didn’t consider it because I saw it as > > another form of a server. > > However, I’m not very familiar with this area and will need some time to > > look into it. > > > > --- > > > > Thanks, Matthias and Sophie, for the detailed explanation. > > > > The Streams upgrade is indeed complex... I took some time to digest these > > details. > > It sounds like the key concerns for the Streams upgrade are: > > 1. Users still using EOSv1 > > 2. Users relying on Eager rebalancing (i.e., versions before 2.4) > > > > With this in mind, should we adjust the recommended upgrade path to the > > following? > > - For Kafka Streams below 2.4, you’ll need to first upgrade to 2.8, then to > > 3.9, and finally to 4.x. > > - For Kafka Streams using EOSv1 on versions 2.4 or above, you’ll need to > > upgrade to 3.9 first, then to 4.x. > > - Others can directly upgrade to 4.x. > > *Note*: If upgrading Streams from 3.4 or below, you’ll need to perform two > > rolling bounces. > > For more details, please refer to: [Kafka Streams Upgrade > > Guide](https://kafka.apache.org/39/documentation/streams/upgrade-guide). > > Also, Kafka Streams requires broker compatibility considerations, see: > > [Streams API Broker > > Compatibility](https://kafka.apache.org/39/documentation/streams/upgrade-guide#streams_api_broker_compat) > > > > The above approach simplifies the definition of the bridge version. > > Instead of providing a range (e.g., [3.5-3.9]), would it be better to > > specify 3.9 directly to > > reduce users' decision anxiety? This aligns with Juma’s recommendation for > > bridge versions > > in the Kafka Clients upgrade. 3.9 is the last version before 4.0, > > containing the most bug fixes and offering greater stability. > > For detailed upgrade steps, such as two-rolling bounce upgrades, > > like Matthias recommended we should direct users to the Streams upgrade > > documentation. > > And I feel the examples in my KIP are too simplistic, > > but I don’t think I should make them as detailed as the Streams upgrade > > guide. > > Otherwise, I’d just be duplicating content. The goal of this KIP should be > > to provide > > users with a clear high-level upgrade path, while the detailed steps should > > be > > referenced from the Streams upgrade documentation. > > > > Regarding ALOS, it looks like we support versions from 0.11.x to 4.x, > > so there’s no need to specify additional details, right? Or am I missing > > something? > > > > Lastly, based on Matthias' suggestion, I have revised the motivation > > section to emphasize: > > - Simplifying testing > > - Reducing compatibility challenges across too many versions > > - Clearly defining the recommended upgrade paths > > > > Best, > > Kuan-Po Tseng > > > > On 2025/02/21 23:55:51 Sophie Blee-Goldman wrote: > > > whew, long response from Matthias :P Lot to digest but I want to add > > > on/respond to a few points: > > > > > > If they want to be "advantageous", they could make it a two step upgrade > > > > I guess, and go from 2.5 (or older) directly to 3.x and apply all > > > > required code changes in a single upgrade step, and repeat the same to > > > > upgrade to 4.0. But I would not necessarily recommend to do an non-API > > > > compatible upgrade directly, and for sure officially discourage it for > > > > two major releases. > > > > > > Are we still talking about only API compatibility here? Because I'm not so > > > sure why we would > > > officially discourage upgrading across 2 major releases as long as their > > > code is compatible. Of > > > course if you're referring to possible gotchas from upgrading over such a > > > long period, that's worth > > > discussing, but it's independent of API compatibility. Imo API > > > compatibility is a binary thing: either > > > it's possible to do a direct upgrade or it's not. Why do we have to > > > officially recommend anything? > > > > > > Or we can distinguish > > > > between ALOS and EOS and have an "bridge release version range" for both > > > > cases. > > > > > > I like this idea. EOS and ALOS are very distinct in Streams and may only > > > become moreso divided > > > over time. It's worth calling them out as separate cases > > > > > > Now regarding the eager/cooperative rebalancing protocol thing in Streams: > > > > > > As Matthias said we hope to officially drop support for eager rebalancing > > > in 4.0, and I've prepared > > > a PR for this already: https://github.com/apache/kafka/pull/18988 > > > > > > This does have the effect of forcing a bridge release for users hoping to > > > upgrade directly from 2.3 > > > or below to 4.0+, and users will have to follow a specific upgrade path to > > > do so as outlined in the > > > PR description. Assuming we fit that into 4.0, it should definitely be > > > called out in this KIP. (Basically > > > users need to use the `upgrade.from` config to first upgrade to the bridge > > > release, then go on to 4.0) > > > > > > There are also other runtime incompatibilities that have been introduced > > > into Streams over the years > > > that restrict direct live upgrades across certain versions. It would also > > > be good to call this out in > > > the KIP and point to the `upgrade.from` config, though we can point to the > > > Streams upgrade guide > > > for details rather than try to reiterate everything here. > > > > > > > > > On Thu, Feb 20, 2025 at 5:21 PM Matthias J. Sax <mj...@apache.org> wrote: > > > > > > > Hello, > > > > > > > > took me some time, and sorry for the long email, but it's complicated... > > > > > > > > First, I just re-read the latest version of the KIP. Thanks for all the > > > > updates. > > > > > > > > > > > > One thing that I an missing in the motivation is, that we really want to > > > > stop support direct upgrades from older versions, to cut down our > > > > upgrade matrix for testing. The motivation does somewhat touch on it, > > > > but I think it would be good to be more explicit. Even if it isn't > > > > something users care about, it's a second main motivation for us, in > > > > addition to the complexity to actually keep the versions compatible. > > > > > > > > > > > > I also want to further clarify my understanding of the KIP. The goal is > > > > not to define what upgrades are possible, right? What is possible is > > > > much more nuanced. -- But we rather want to define what we recommend? Is > > > > this understanding correct? If yes, it might also be worth to add to the > > > > motivation section. > > > > > > > > > > > > I also think, we actually need to more explicitly distinguish three > > > > categories of compatibility, but did so far only discuss two of them. > > > > Even if the KIP does mention all three. Ideally, we should have a > > > > section in the motivation, explaining the three different types of > > > > compatibility, and explicitly state which one this KIP is concerned > > > > with, and which ones it's not concerned with. > > > > > > > > > > > > (1) protocol compatibility: ie, what client-broker versions are > > > > compatible > > > > > > > > This one is not in the focus of the KIP, but it might still be good to > > > > be explicit about it. Could be explained in the motivation for > > > > completeness, and maybe refer to KIP-896 for 4.x related changes. > > > > > > > > Btw: there is also some additional limitations for KS-broker > > > > compatibility: > > > > > > > > https://kafka.apache.org/39/documentation/streams/upgrade-guide#streams_api_broker_compat > > > > > > > > Many of you know this, but wanted to mention it for completeness. Not > > > > sure if we need to mention it on the KIP. > > > > > > > > > > > > > > > > (2) API compatibility (ie Java/Scala API). > > > > > > > > This is only mentioned briefly in the KIP, and again, it's not the core > > > > of the KIP, but I think it is still important to include it more > > > > explicitly, because we talk about "bridge version". > > > > > > > > Given the rule that we are allowed to break API compatibility in major > > > > release, but still guarantee API compatibility for the last three minor > > > > releases, it can be confusing and it would be great to explain it > > > > better. > > > > > > > > In the end, directly upgrading from 2.5 or older to 4.x is practically > > > > impossible as we went through two major releases which did remove > > > > deprecated APIs, and I would not recommend to do such a direct upgrade. > > > > > > > > From an API POV, if one is on 2.5 or older, they should first upgrade > > > > to 2.6/2.7/2.8, and than lazily migrate off any older stuff what is > > > > removed with 3.0. Afterwards, they can upgrade to 3.7/3.8/3.9 following > > > > the same pattern, and only upgrade to 4.0 in a third step. > > > > > > > > If they want to be "advantageous", they could make it a two step upgrade > > > > I guess, and go from 2.5 (or older) directly to 3.x and apply all > > > > required code changes in a single upgrade step, and repeat the same to > > > > upgrade to 4.0. But I would not necessarily recommend to do an non-API > > > > compatible upgrade directly, and for sure officially discourage it for > > > > two major releases. > > > > > > > > Thus, the information in the KIP about "bridge version" to 4.x begin > > > > "2.4.x - 3.9.x" seems to fall short, and mentioning > > > > > > > > > To minimize code refactoring, we recommend the following bridge > > > > > versions > > > > that maintain API compatibility with Kafka 4.x: > > > > > > > > > > Kafka Client: 3.3.x - 3.9.x > > > > > Kafka Streams: 3.6.x - 3.9.x > > > > > > > > seems not to be sufficient to me. > > > > > > > > > > > > Hence, the provided "Upgrade Examples" might be oversimplified, and we > > > > might want to refine them. > > > > > > > > > > > > > > > > (3) Runtime compatibility. This one is specific to Kafka Streams, but > > > > not to clients from my understanding. Client are stateless and thus they > > > > don't face any issue, but Kafka Streams is stateful, and thus need to > > > > take care of it. Please correct me if I am wrong. > > > > > > > > The KIP so far, seems to only consider this one, and what is proposed > > > > make sense to me on a high level. However, I am confused why Kafka > > > > Clients are mentioned here, too, as this type of compatibility should > > > > not really be relevant for them? Even if clients might also have some > > > > semantic changes, these should always align with API changes (ie, old > > > > deprecate API might have slightly different semantics than new API). > > > > > > > > Now about the currently proposes ranges from Kafka Streams: > > > > > > > > > Kafka Streams > > > > > Current Version 0.11.x - 2.3.x > > > > > Bridge Release 2.4.x - 3.9.x > > > > > Target Version 4.x > > > > > > > > This could make sense for "eager vs cooperative" rebalancing, however, > > > > at the current point, we did not remove "eager" in 4.0 yet. I was > > > > actually just syncing up with Sophie about it, and it was a slip, and we > > > > want to propose to remove "eager" in 4.0 (Sophie will prepare a PR), so > > > > we can avoid keeping "eager" until 5.0. > > > > > > > > We did officially deprecate "eager" in 3.1 release, so we are covered to > > > > actually remove it with 4.0. > > > > > > > > If we would not drop "eager", using `2.4.x to 3.9.x` would not make > > > > sense though. If we keep "eager" in 4.0, user can still upgrade from > > > > 2.0.x to 4.0.x w/o issues from a runtime perspective. > > > > > > > > If we drop "eager" we also need to drop the corresponding system tests > > > > that upgrade to 4.0, and also stop testing upgrading from "eager to > > > > cooperative" with 3.9 being the highest target version in this system > > > > test. And if we don't test it, it's not officially supported any > > > > longer... (even if people could still upgrade via an offline upgrade -- > > > > what really breaks if we remove "eager" is "only" the online > > > > [two-]rolling bounce upgrade...) > > > > > > > > However, there is another change we want to consider: we did remove > > > > EOSv1 in 4.0 release, which was replace with EOSv2 in Kafka Streams 2.6 > > > > via KIP-447. > > > > > > > > Thus, for EOSv1 users, they cannot directly upgrade to 4.0 either, but > > > > only EOSv2 users can. Thus, it might make sense to actually use "bridge > > > > releases 2.6.x - 3.9.x" just to keep it simple... Or we can distinguish > > > > between ALOS and EOS and have an "bridge release version range" for both > > > > cases. > > > > > > > > Btw: using EOSv2 required broker version 2.5+, that we might also want > > > > to call out. > > > > > > > > > > > > > > > > Last but not least, while we are very explicit in the KS upgrade docs, > > > > it might be worth to call out that some upgrades require a two-rolling > > > > bounce approach, and users should always consult the upgrade docs... We > > > > use two-rolling bounce upgrade to bridge runtime backward incompatible > > > > changes (similar to what we do broker side, when IBP version is bumped). > > > > > > > > > > > > > > > > > > > > So overall, it seems that we need to really have two guidelines, not > > > > just one? For for API compatibility, which is much stricter, and one for > > > > runtime compatibility? > > > > > > > > If we really want to make a recommendation that is most easy to > > > > understand, we might want to only go with API compatibility. Not sure if > > > > this might be "too restrictive" though? > > > > > > > > > > > > Curious to get you though on all this. > > > > > > > > > > > > -Matthias > > > > > > > > > > > > > > > > > > > > On 2/19/25 5:51 PM, Kuan Po Tseng wrote: > > > > > Hi Lianet, > > > > > > > > > > Thank you for your feedback! > > > > > > > > > > Yes, the current KIP focuses solely on the client upgrade for 4.x. I > > > > have updated the title accordingly and also included the KS upgrade > > > > link in > > > > the KIP. > > > > > > > > > > Thanks again! > > > > > > > > > > Best regards, > > > > > Kuan-Po > > > > > > > > > > On 2025/02/19 16:59:25 "Lianet M." wrote: > > > > >> Hello all, sorry a bit late, just minor comments on this one: > > > > >> > > > > >> - Should we clarify in the title or at the beginning of the KIP that > > > > >> it > > > > is > > > > >> proposing a client upgrade path for 4.x? The broader considerations > > > > >> for > > > > >> upgrades discussed in this thread will be tackled separately (seems > > > > >> we > > > > all > > > > >> agree). > > > > >> > > > > >> - The KS upgrade path seems to be the tricky one, and all that the > > > > >> user > > > > >> needs to consider to successfully follow the provided path for KS is > > > > >> not > > > > >> clear in the KIP, but it's all well explained on the KS upgrade notes > > > > for > > > > >> 3.9, should we add a ref to that? > > > > >> https://kafka.apache.org/39/documentation/streams/upgrade-guide > > > > >> > > > > >> Thanks Kuan Po! > > > > >> > > > > >> Lianet > > > > >> > > > > >> On Tue, Feb 11, 2025 at 11:22 AM Kuan Po Tseng <brandb...@gmail.com> > > > > wrote: > > > > >> > > > > >>> Hello everyone, > > > > >>> > > > > >>> If there are no other opinions, I would like to start a vote > > > > >>> tomorrow, > > > > >>> thank you! > > > > >>> > > > > >>> Best, > > > > >>> Kuan Po > > > > >>> > > > > >>> On Sat, Feb 8, 2025 at 1:51 AM Kuan Po Tseng <brandb...@apache.org> > > > > wrote: > > > > >>> > > > > >>>> Hi all, > > > > >>>> > > > > >>>> Based on our discussion, I added a section on choosing the > > > > >>>> appropriate > > > > >>>> bridge version from an API compatibility perspective for upgrading > > > > >>>> to > > > > >>> Kafka > > > > >>>> 4.0. Let me know if you have any thoughts. Thank you! > > > > >>>> > > > > >>>> Best, > > > > >>>> Kuan-Po > > > > >>>> > > > > >>>> On 2025/02/07 03:34:46 Kuan Po Tseng wrote: > > > > >>>>> Hi Chia-Ping, > > > > >>>>> > > > > >>>>> Sorry for the delayed response. I’ve checked all relevant JIRAs > > > > >>>>> using > > > > >>>> the following Jira Query Language: > > > > >>>>> > > > > >>>>> project = KAFKA AND status in (Resolved, Closed) AND fixVersion = > > > > 4.0.0 > > > > >>>> AND text ~ "Remove" order by updated DESC > > > > >>>>> > > > > >>>>> Based on this, I checked the JIRAs related to removing deprecated > > > > >>>> methods in client modules. The minimum backward-compatible client > > > > >>> versions > > > > >>>> for client 4.0 are as follows: > > > > >>>>> - Producer: 3.3.0 > > > > >>>>> Reason: Partitioner#onNewBatch was deprecated in 3.3.0, and was > > > > >>>> removed by https://issues.apache.org/jira/browse/KAFKA-18295 > > > > >>>>> - Consumer: 2.4.0 > > > > >>>>> Reason: Consumer#committed was deprecated in 2.4.0, and was > > > > removed > > > > >>> by > > > > >>>> https://issues.apache.org/jira/browse/KAFKA-17451 > > > > >>>>> - Admin: 3.3.0 > > > > >>>>> Reason: ListConsumerGroupOffsetsOptions was deprecated in 3.3.0 > > > > and > > > > >>>> was removed by https://issues.apache.org/jira/browse/KAFKA-18291 > > > > >>>>> > > > > >>>>> You can find a list of all related JIRAs and pull requests in this > > > > >>>> Google Sheet: > > > > >>>>> > > > > >>>> > > > > >>> > > > > https://docs.google.com/spreadsheets/d/1ZWNRk1rjWptjpGM2UtT0Q3lDULhrqkP_UfHr9roQW3M/edit?usp=sharing > > > > >>>>> > > > > >>>>> There are also some public methods removed in 4.0, such as: > > > > >>>>> - KafkaFuture#Function, KafkaFuture#thenApply > > > > >>>> https://issues.apache.org/jira/browse/KAFKA-17903 > > > > >>>>> - JmxReported(String) > > > > >>> https://issues.apache.org/jira/browse/KAFKA-18077 > > > > >>>>> , but I'm uncertain about how we should handle these. > > > > >>>>> > > > > >>>>> Best, > > > > >>>>> Kuan-Po > > > > >>>>> > > > > >>>>> On 2025/02/06 19:08:49 Chia-Ping Tsai wrote: > > > > >>>>>> hi Kuan-Po > > > > >>>>>> > > > > >>>>>> any update? Now that an upgrade path for bridge versions exists, > > > > >>>>>> we > > > > >>>> can introduce additional "conditions" to assist users in selecting > > > > >>>> the > > > > >>>> "best" bridge version. For example, we can provide guidance on > > > > >>>> which > > > > >>> bridge > > > > >>>> versions offer backward compatibility with Kafka 4.0 client or are > > > > >>>> compatible with Kafka 4.0 server. > > > > >>>>>> > > > > >>>>>> Best, > > > > >>>>>> Chia-Ping > > > > >>>>>> > > > > >>>>>> On 2025/01/22 04:48:36 Chia-Ping Tsai wrote: > > > > >>>>>>>> - If we support 2.0+ to 4.0 client/KS upgrade it's simpler, but > > > > >>> of > > > > >>>> course brokers cannot be 4.0 yet -- but I guess this would be > > > > something > > > > >>>> natural? Given that the clients would be on 2.0, brokers cannot be > > > > >>>> 4.0 > > > > >>> yet, > > > > >>>> or clients would have crashed already... Thus, I think I slightly > > > > prefer > > > > >>>> this one. > > > > >>>>>>> > > > > >>>>>>> Using a major version as a bridge is a viable approach. We can > > > > >>>> emphasize the limitations of this method to guide users in > > > > >>>> selecting > > > > the > > > > >>>> most suitable bridge version. > > > > >>>>>>> > > > > >>>>>>>> For KS, from an API compatibility POV, upgrading from anything > > > > >>>> older than 3.6 might not work any longer (for DSL users; of course, > > > > >>>> depending on what APIs they are using). And for PAPI, the old API > > > > >>>> was > > > > >>>> removed too, so only if the new one is use (introduced in 2.7) a > > > > seamless > > > > >>>> upgrade would work smoothly. > > > > >>>>>>> > > > > >>>>>>> You make a valid point. The previous discussion overlooked the > > > > >>>>>>> APIs > > > > >>>> that were removed in version 4.0. > > > > >>>>>>> > > > > >>>>>>> We could also emphasize the BC advantages. As an example, users > > > > >>> have > > > > >>>> the option of using version 2.7 as a bridge and subsequently > > > > >>>> upgrade > > > > >>>> without code alterations or recompilation. Of course, we need to > > > > >>>> check > > > > >>> the > > > > >>>> version of other PAPI removal. > > > > >>>>>>> > > > > >>>>>>> Best, > > > > >>>>>>> Chia-Ping > > > > >>>>>>> > > > > >>>>>>> > > > > >>>>>>> > > > > >>>>>>> > > > > >>>>>>> > > > > >>>>>>>> Matthias J. Sax <mj...@apache.org> 於 2025年1月22日 凌晨2:55 寫道: > > > > >>>>>>>> For KS, from an API compatibility POV, upgrading from anything > > > > >>>> older than 3.6 might not work any longer (for DSL users; of course, > > > > >>>> depending on what APIs they are using). And for PAPI, the old API > > > > >>>> was > > > > >>>> removed too, so only if the new one is use (introduced in 2.7) a > > > > seamless > > > > >>>> upgrade would work smoothly. > > > > >>>>>>> > > > > >>>>>> > > > > >>>>> > > > > >>>> > > > > >>> > > > > >> > > > > > > > > > > > > > >