Hello Jun, I have updated the KIP and introduced a new validator, NonEmptyListValidator, which ensures that the provided list is either null or a non-empty list without duplicate entries. I’ve also listed the configurations that will be validated using this logic. Please feel free to share any feedback or suggestions.
Best Regards, Jiunn-Yang > Jun Rao <j...@confluent.io.INVALID> 於 2025年5月23日 凌晨2:29 寫道: > > Hi, Jiunn-Yang, > > It seems there are quite a few other configs of type list (e.g. several SSL > related ones). It would be useful to understand if empty lists are valid > for them or not. > > Thanks, > > Jun > > On Tue, May 13, 2025 at 10:12 AM Jun Rao <j...@confluent.io> wrote: > >> Hi, Luke, >> >> Thanks for the reply. >> >> "My thought is that this behavior has been existed >> for years (maybe after "cleanup.policy" was introduced?), there could be >> users relying on the empty cleanup.policy for a long time. " >> >> If you do a google search on "kafka infinite retention", you will get >> links like >> https://stackoverflow.com/questions/39735036/make-kafka-topic-log-retention-permanent >> and >> https://www.reddit.com/r/apachekafka/comments/mpz4bp/kafka_retention_question/, >> both pointing to setting the retention time and retention size to -1 to >> achieve this goal. So, it seems that if a user intentionally wants infinite >> retention, it's more likely they will use that approach instead of setting >> cleanup.policy to empty. On the other hand, our API/tools make it possible >> for users to make a mistake by inadvertently leaving the config value empty. >> >> Thanks, >> >> Jun >> >> On Mon, May 12, 2025 at 11:38 PM Luke Chen <show...@gmail.com> wrote: >> >>> Hi Jun, >>> >>>> Regarding the motivation, currently, we never documented that an empty >>> cleanup.policy implies infinite retention. In fact, if one leaves >>> cleanup.policy empty, it actually breaks remote storage since it will stop >>> the cleaning based on local retention size and time too. So, leaving >>> cleanup.policy empty is probably more like a user mistake than an >>> intentional choice. Based on this assumption, the idea behind the KIP is >>> to >>> fail an empty cleanup.policy so that the user is aware of this likely >>> mistake and provide a new option None for users wanting infinite retention >>> to opt in explicitly. >>> >>> While we never documented the empty cleanup.policy implies infinite >>> retention, we also never documented (or failed) the empty cleanup.policy >>> is >>> an invalid configuration. My thought is that this behavior has been >>> existed >>> for years (maybe after "cleanup.policy" was introduced?), there could be >>> users relying on the empty cleanup.policy for a long time. It is not good >>> to break the backward compatibility in a minor release version (ex: >>> v4.1.0). Even though we think we are fixing a long existing bug, it could >>> be a surprise to users. >>> >>> >>>> We could also consider supporting an empty cleanup.policy by fixing the >>> issue in remote storage. But then the user may never realize this if it's >>> a >>> mistake. >>> >>> Good point! I agree we need to fix it! >>> >>> >>> Hi Chia-Ping, >>> >>>> We can print warnings for empty cleanup.policy in 4.x and in 5.0 we >>> throw >>> exception directly to make it fail fast >>> >>> This suggestion looks good to me! >>> >>> Thank you. >>> Luke >>> >>> On Tue, May 13, 2025 at 2:14 PM Chia-Ping Tsai <chia7...@apache.org> >>> wrote: >>> >>>> hi all, >>>> >>>> Given Luke mentioned the existence of use cases, it is worth considering >>>> the compatibility issue. In fact, I had previously encountered this use >>>> case but advised customers to utilize retention configurations instead. >>>> >>>>> We could also consider supporting an empty cleanup.policy by fixing >>> the >>>>> issue in remote storage. But then the user may never realize this if >>>> it's a >>>>> mistake. >>>> >>>> Good catch! The "empty" or "none" wouldn't make sense for remote >>> storage. >>>> I've opened KAFKA-19273 to ensure topics with tiered storage use a valid >>>> delete policy. >>>> >>>> Best, >>>> Chia-Ping >>>> >>>> >>>> On 2025/05/12 19:06:10 Jun Rao wrote: >>>>> Hi, Luke, >>>>> >>>>> Regarding the motivation, currently, we never documented that an empty >>>>> cleanup.policy implies infinite retention. In fact, if one leaves >>>>> cleanup.policy empty, it actually breaks remote storage since it will >>>> stop >>>>> the cleaning based on local retention size and time too. So, leaving >>>>> cleanup.policy empty is probably more like a user mistake than an >>>>> intentional choice. Based on this assumption, the idea behind the KIP >>> is >>>> to >>>>> fail an empty cleanup.policy so that the user is aware of this likely >>>>> mistake and provide a new option None for users wanting infinite >>>> retention >>>>> to opt in explicitly. >>>>> >>>>> We could also consider supporting an empty cleanup.policy by fixing >>> the >>>>> issue in remote storage. But then the user may never realize this if >>>> it's a >>>>> mistake. >>>>> >>>>> Thanks, >>>>> >>>>> Jun >>>>> >>>>> >>>>> On Sun, May 11, 2025 at 7:53 PM Luke Chen <show...@gmail.com> wrote: >>>>> >>>>>> Hi Jiunn-Yang, >>>>>> >>>>>> Thanks for the KIP. >>>>>> >>>>>> Comments: >>>>>> 1. "it is acceptable because an empty cleanup.policy is considered >>>> invalid >>>>>> in Kafka. Therefore, this trade-off is justified." >>>>>> Could you explain more about this? Why is this trade-off justified? >>>>>> If we think the empty cleanup.policy is invalid in kafka, why do we >>>> provide >>>>>> an additional "none" option to users in this KIP? >>>>>> FYI, there are indeed use cases that need to keep all history data >>>> without >>>>>> a cleanup policy. >>>>>> >>>>>> 2. Following (1), I agree we should fail fast for empty >>>>>> "group.coordinator.rebalance.protocols" and "process.roles" configs >>>> since >>>>>> they are invalid. >>>>>> But about "cleanup.policy", I don't see a persuasive reason why we >>>> should >>>>>> break backward compatibility to change it. >>>>>> "This provides a clear and direct way to configure Kafka to retain >>> all >>>> log >>>>>> segments without any automatic cleanup." >>>>>> This is the motivation we mentioned in the KIP, but to me, backward >>>>>> compatibility is much more important than "a clear and direct way to >>>> config >>>>>> kafka". >>>>>> Do we really have to change the "cleanup.policy" config? >>>>>> >>>>>> Thanks. >>>>>> Luke >>>>>> >>>>>> >>>>>> On Wed, May 7, 2025 at 2:17 AM Jun Rao <j...@confluent.io.invalid> >>>> wrote: >>>>>> >>>>>>> Hi, Jiunn-Yang, >>>>>>> >>>>>>> Thanks for the updated KIP. It looks good to me. >>>>>>> >>>>>>> Jun >>>>>>> >>>>>>> On Tue, May 6, 2025 at 4:58 AM 黃竣陽 <s7133...@gmail.com> wrote: >>>>>>> >>>>>>>> Hi Jun, chia >>>>>>>> >>>>>>>> Thanks for all the comments. They have all been addressed in the >>>>>> updated >>>>>>>> KIP. >>>>>>>> >>>>>>>> I've removed all deprecated-related sections. Additionally, an >>>>>> exception >>>>>>>> will now be thrown if a >>>>>>>> developer passes an empty validStrings list to the inNonEmpty >>>> method. >>>>>>>> >>>>>>>> Best Regards, >>>>>>>> Jiunn-Yang >>>>>>>> >>>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年5月6日 凌晨12:46 寫道: >>>>>>>>> >>>>>>>>> hi Jiunn-Yang >>>>>>>>> >>>>>>>>> The `inNonEmpty` is used to prevent users pass empty config, >>> so >>>>>> should >>>>>>> it >>>>>>>>> be non-empty too? >>>>>>>>> >>>>>>>>> For example, `inNonEmpty()` should throw exception directly. >>>>>>>>> >>>>>>>>> Best, >>>>>>>>> Chia-Ping >>>>>>>>> >>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年5月6日 週二 上午12:28寫道: >>>>>>>>> >>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>> >>>>>>>>>> Thanks for the reply. There are still references to the >>>> deprecated >>>>>>>> method. >>>>>>>>>> >>>>>>>>>> "stop relying on the deprecated methods" >>>>>>>>>> "Finally, the deprecated method will be removed in Kafka 5.0" >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> >>>>>>>>>> Jun >>>>>>>>>> >>>>>>>>>> On Sat, May 3, 2025 at 7:42 AM 黃竣陽 <s7133...@gmail.com> >>> wrote: >>>>>>>>>> >>>>>>>>>>> Hi Jun, chia, >>>>>>>>>>> >>>>>>>>>>> Thanks for all the comments. They have all been addressed in >>>> the >>>>>>>> updated >>>>>>>>>>> KIP. >>>>>>>>>>> >>>>>>>>>>> Best Regards, >>>>>>>>>>> Jiunn-Yang >>>>>>>>>>> >>>>>>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年5月3日 凌晨2:03 寫道: >>>>>>>>>>>> >>>>>>>>>>>> hi Jiunn-Yang >>>>>>>>>>>> >>>>>>>>>>>> in the "Compatibility, Deprecation, and Migration Plan", >>>> could you >>>>>>> add >>>>>>>>>>>> description to remind readers that "clean.policy=" should >>> be >>>>>>> replaced >>>>>>>>>> by >>>>>>>>>>>> "clean.policy=none" if they do want to disable delete and >>>> compact. >>>>>>>>>>>> >>>>>>>>>>>> Best, >>>>>>>>>>>> Chia-Ping >>>>>>>>>>>> >>>>>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年5月3日 週六 >>> 上午1:55寫道: >>>>>>>>>>>> >>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>> >>>>>>>>>>>>> It's fine not to deprecate ValidList#in for now. Could you >>>> update >>>>>>> the >>>>>>>>>>> KIP >>>>>>>>>>>>> completely? There are still references to deprecation. >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, >>>>>>>>>>>>> >>>>>>>>>>>>> Jun >>>>>>>>>>>>> >>>>>>>>>>>>> On Fri, May 2, 2025 at 4:59 AM 黃竣陽 <s7133...@gmail.com> >>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi Jun, >>>>>>>>>>>>>> >>>>>>>>>>>>>> I don’t think we should deprecate the ValidList#in >>> method, >>>> as >>>>>>> there >>>>>>>>>> may >>>>>>>>>>>>> be >>>>>>>>>>>>>> future scenarios where we want >>>>>>>>>>>>>> to allow list configs to be empty. It’s useful to have >>> both >>>>>>> methods: >>>>>>>>>> in >>>>>>>>>>>>>> (which allows empty lists) >>>>>>>>>>>>>> and inNonEmpty (which enforces non-empty lists). >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Just a minor comment. It would be useful to document >>> that >>>>>> during >>>>>>>>>>>>> upgrade, >>>>>>>>>>>>>>> if cleanup.policy is empty, the broker will fail to >>> start. >>>>>>>>>>>>>> >>>>>>>>>>>>>> I’ve updated the KIP accordingly. >>>>>>>>>>>>>> >>>>>>>>>>>>>> Best Regards, >>>>>>>>>>>>>> Jiunn-Yang >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年5月2日 凌晨12:50 >>> 寫道: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thanks for the reply. Sounds good. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Just a minor comment. It would be useful to document >>> that >>>>>> during >>>>>>>>>>>>> upgrade, >>>>>>>>>>>>>>> if cleanup.policy is empty, the broker will fail to >>> start. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Jun >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Thu, May 1, 2025 at 8:40 AM 黃竣陽 <s7133...@gmail.com> >>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Hello Jun, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Since ValidList is a public API, we need to maintain >>>> backward >>>>>>>>>>>>>>>> compatibility. Therefore, the isEmptyAllowed flag is >>>>>> necessary. >>>>>>>>>>>>>>>> We can update the signature of isNonEmpty() to remove >>> the >>>>>>> boolean >>>>>>>>>>>>>>>> parameter. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Best Regards, >>>>>>>>>>>>>>>> Jiunn-Yang >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年5月1日 凌晨4:17 >>>> 寫道: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks for the reply. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Do we really need isEmptyAllowed? It's awkward since >>> the >>>>>> method >>>>>>>>>> name >>>>>>>>>>>>> is >>>>>>>>>>>>>>>>> inNonEmpty. Also, it's not clear when it's set to >>> true. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Jun >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On Fri, Apr 25, 2025 at 6:26 AM 黃竣陽 < >>> s7133...@gmail.com> >>>>>>> wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Hi Jun, >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Thank you for pointing that out. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> I have revised the KIP as follows: >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> “In this case, the change does not introduce new >>> invalid >>>>>>>>>>>>>> configurations >>>>>>>>>>>>>>>> or >>>>>>>>>>>>>>>>>> prevent any currently valid setup. >>>>>>>>>>>>>>>>>> The main behavioral difference is that we now >>> explicitly >>>>>>> throw a >>>>>>>>>>>>>>>>>> ConfigException during the storage format validation >>>> phase >>>>>>>>>>>>>>>>>> instead of relying on the current behavior.” >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> This reflects the correct behavior. >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> Best Regards, >>>>>>>>>>>>>>>>>> Jiunn-Yang >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年4月25日 >>>> 凌晨1:17 寫道: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> "The main behavioral difference introduced by this >>>> change >>>>>> is >>>>>>>>>> that >>>>>>>>>>> a >>>>>>>>>>>>>>>>>>> ConfigException will now be thrown during the >>> storage >>>>>> format >>>>>>>>>>>>>>>> validation >>>>>>>>>>>>>>>>>>> phase, rather than during server startup." >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> It seems that currently formating the storage >>> already >>>> fails >>>>>>> if >>>>>>>>>>>>>>>>>>> group.coordinator.rebalance.protocols and >>> process.roles >>>>>> are >>>>>>>>>>> empty. >>>>>>>>>>>>>> It >>>>>>>>>>>>>>>>>> just >>>>>>>>>>>>>>>>>>> gets a different exception. >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> Jun >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> On Thu, Apr 24, 2025 at 5:32 AM 黃竣陽 < >>>> s7133...@gmail.com> >>>>>>>> wrote: >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Hi Jun, chia, >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Thanks for your feedback. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> I add a new section for this change: >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> - Validation for >>>> group.coordinator.rebalance.protocols and >>>>>>>>>>>>>>>> process.roles >>>>>>>>>>>>>>>>>>>> will be >>>>>>>>>>>>>>>>>>>> moved from the server startup phase to the storage >>>> format >>>>>>>>>> phase. >>>>>>>>>>>>>>>>>>>> - For cleanup.policy, setting an empty list will >>> now >>>> be >>>>>>>>>>> considered >>>>>>>>>>>>>>>>>> invalid >>>>>>>>>>>>>>>>>>>> and will >>>>>>>>>>>>>>>>>>>> result in a ConfigException during storage format >>>> phase. >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> Best Regards, >>>>>>>>>>>>>>>>>>>> Jiunn-Yang >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年4月24日 >>>> 凌晨4:44 >>>>>> 寫道: >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Thanks for the reply. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Q2. It's true that >>>> group.coordinator.rebalance.protocols >>>>>>> and >>>>>>>>>>>>>>>>>>>> process.roles >>>>>>>>>>>>>>>>>>>>> configurations can't be empty right now. With this >>>> KIP, >>>>>> the >>>>>>>>>> user >>>>>>>>>>>>>> will >>>>>>>>>>>>>>>>>>>>> probably get a different (and more accurate) >>>> exception. >>>>>> It >>>>>>>>>> will >>>>>>>>>>>>> be >>>>>>>>>>>>>>>>>> useful >>>>>>>>>>>>>>>>>>>>> to document that. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Regarding cleanup.policy, I kind of agree with >>>> Chia-Ping. >>>>>>> If >>>>>>>> a >>>>>>>>>>>>> user >>>>>>>>>>>>>>>>>>>> leaves >>>>>>>>>>>>>>>>>>>>> cleanup.policy empty, it's more likely to be a >>>> mistake >>>>>> than >>>>>>>> an >>>>>>>>>>>>>>>>>> intention. >>>>>>>>>>>>>>>>>>>>> If we automatically treat it as None, the user >>> will >>>> never >>>>>>>>>>> realize >>>>>>>>>>>>>> the >>>>>>>>>>>>>>>>>>>>> mistake. Throwing an exception will let the user >>>> realize >>>>>>>> there >>>>>>>>>>>>> is a >>>>>>>>>>>>>>>>>>>> mistake. >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> Jun >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> On Wed, Apr 23, 2025 at 8:26 AM Chia-Ping Tsai < >>>>>>>>>>>>> chia7...@gmail.com >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> hi Jiunn-Yang, >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP, and I understand that >>>> maintaining >>>>>>>>>>>>>> compatibility >>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>>>>>> important. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> However, according to the documentation, we don't >>>> allow >>>>>> an >>>>>>>>>>> empty >>>>>>>>>>>>>>>> value >>>>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>>>> the cleanup.policy. Hence, should we consider >>>> throwing >>>>>> an >>>>>>>>>>>>>> exception >>>>>>>>>>>>>>>>>> for >>>>>>>>>>>>>>>>>>>> an >>>>>>>>>>>>>>>>>>>>>> empty value in version 4.x? This could streamline >>>> the >>>>>> code >>>>>>>>>> and >>>>>>>>>>>>>> avoid >>>>>>>>>>>>>>>>>> an >>>>>>>>>>>>>>>>>>>>>> extra deprecation cycle. >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Best, >>>>>>>>>>>>>>>>>>>>>> Chia-Ping >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年4月23日 >>> 週三 >>>>>>>> 上午6:33寫道: >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Regarding "The none policy will not delete or >>>> compact >>>>>> any >>>>>>>>>>>>>>>> segments", >>>>>>>>>>>>>>>>>> we >>>>>>>>>>>>>>>>>>>>>>> should be more accurate. We won't delete >>> segments >>>> based >>>>>>> on >>>>>>>>>>>>>>>>>>>>>>> log.retention.bytes/log.retention.ms, but we >>>> should >>>>>>>>>> continue >>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>> delete >>>>>>>>>>>>>>>>>>>>>>> segments based on log.local.retention.bytes/ >>>>>>>>>> log.retention.ms. >>>>>>>>>>>>>>>>>>>> Otherwise, >>>>>>>>>>>>>>>>>>>>>>> we >>>>>>>>>>>>>>>>>>>>>>> risk running out of local disk space when remote >>>>>> storage >>>>>>> is >>>>>>>>>>>>>>>> enabled. >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> Jun >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> On Tue, Apr 22, 2025 at 9:45 AM Jun Rao < >>>>>>> j...@confluent.io> >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Thanks for the reply. >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Q2. What about existing empty values for >>>>>>>>>>>>>>>>>>>>>>>> group.coordinator.rebalance.protocols and >>>>>> process.roles >>>>>>>>>>> during >>>>>>>>>>>>>>>>>>>> upgrade? >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> Jun >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> On Tue, Apr 22, 2025 at 7:29 AM 黃竣陽 < >>>>>> s7133...@gmail.com >>>>>>>> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Hello Jun, >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Thanks for review this KIP. >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Q1 & Q3: >>>>>>>>>>>>>>>>>>>>>>>>> I’ve updated the method name accordingly and >>>> revised >>>>>>> the >>>>>>>>>>>>>>>>>>>>>> cleanup.policy >>>>>>>>>>>>>>>>>>>>>>>>> documentation >>>>>>>>>>>>>>>>>>>>>>>>> to clarify that the none policy cannot be used >>>> with >>>>>> any >>>>>>>>>>> other >>>>>>>>>>>>>>>>>> policy. >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Q2: >>>>>>>>>>>>>>>>>>>>>>>>> For users currently using an empty >>>> cleanup.policy, >>>>>> the >>>>>>>>>>>>> approach >>>>>>>>>>>>>>>> is >>>>>>>>>>>>>>>>>> to >>>>>>>>>>>>>>>>>>>>>>>>> apply the none policy >>>>>>>>>>>>>>>>>>>>>>>>> during the preProcessParsedConfig step. >>>>>> Additionally, a >>>>>>>>>>>>> warning >>>>>>>>>>>>>>>>>>>>>> message >>>>>>>>>>>>>>>>>>>>>>>>> will be emitted to inform users >>>>>>>>>>>>>>>>>>>>>>>>> of the upcoming change. >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> Best Regards, >>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 >>> 2025年4月22日 >>>>>>> 凌晨4:52 >>>>>>>>>> 寫道: >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang, >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP. A few comments. >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> 1. It's fine to introduce a new value None >>> for >>>>>>>>>>>>> cleanup.policy. >>>>>>>>>>>>>>>> But >>>>>>>>>>>>>>>>>>>>>> now >>>>>>>>>>>>>>>>>>>>>>>>> not >>>>>>>>>>>>>>>>>>>>>>>>>> all value combinations are valid. For >>> example, >>>> None >>>>>>>> can't >>>>>>>>>>> be >>>>>>>>>>>>>>>> used >>>>>>>>>>>>>>>>>>>>>> with >>>>>>>>>>>>>>>>>>>>>>>>>> Delete or Compact. It would be useful to >>>> document >>>>>>> that. >>>>>>>>>>>>>>>>>>>>>>>>>> 2. What's the behavior during upgrade when an >>>>>> existing >>>>>>>>>>>>> config >>>>>>>>>>>>>>>> has >>>>>>>>>>>>>>>>>> an >>>>>>>>>>>>>>>>>>>>>>>>> empty >>>>>>>>>>>>>>>>>>>>>>>>>> list. >>>>>>>>>>>>>>>>>>>>>>>>>> 3. inWithEmptyCheck: It's not clear what the >>>> empty >>>>>>> check >>>>>>>>>>>>> does. >>>>>>>>>>>>>>>> How >>>>>>>>>>>>>>>>>>>>>>> about >>>>>>>>>>>>>>>>>>>>>>>>>> sth like inNonEmpty ? >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Thanks, >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> Jun >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Apr 15, 2025 at 8:25 AM 黃竣陽 < >>>>>>> s7133...@gmail.com >>>>>>>>> >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> Hello everyone, >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> I would like to start a discussion on >>> KIP-1161: >>>>>>>>>>>>>> cleanup.policy >>>>>>>>>>>>>>>>>>>>>>>>> shouldn't >>>>>>>>>>>>>>>>>>>>>>>>>>> be empty >>>>>>>>>>>>>>>>>>>>>>>>>>> < >>> https://cwiki.apache.org/confluence/x/HArXF> >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> This proposal aims to improve the >>>> cleanup.policy >>>>>>>>>>>>>> configuration. >>>>>>>>>>>>>>>>>>>>>>>>> Currently, >>>>>>>>>>>>>>>>>>>>>>>>>>> this setting should not be left empty. >>>>>>>>>>>>>>>>>>>>>>>>>>> Therefore, there are two proposed >>> improvements: >>>>>>>>>>>>>>>>>>>>>>>>>>> 1. Update ValidList to validate whether an >>>> empty >>>>>> list >>>>>>>> is >>>>>>>>>>>>>>>> allowed. >>>>>>>>>>>>>>>>>>>>>>>>>>> 2. Introduce a new 'none' value for >>>> cleanup.policy. >>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>> Best Regards, >>>>>>>>>>>>>>>>>>>>>>>>>>> Jiunn-Yang >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >>