Hi Luke, Chia, Thanks for your information.
>> FYI, there are indeed use cases that need to keep all history data without >> a cleanup policy. I agree that we should maintain backward compatibility. Therefore, I will update the KIP as follows: - If the user sets an empty cleanup.policy, we will log a warning message and default it to 'none’. - Starting from Kafka 5.0, setting an empty cleanup.policy will no longer be allowed. Best Regards, Jiunn-Yang > Chia-Ping Tsai <chia7...@gmail.com> 於 2025年5月12日 上午11:56 寫道: > > hi Luke > > We can print warnings for empty cleanup.policy in 4.x and in 5.0 we throw > exception directly to make it fail fast > > Jiunn: WDYT? > > Best, > Chia-Ping > >> Luke Chen <show...@gmail.com> 於 2025年5月12日 上午10:52 寫道: >> >> 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 >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>> >>>> >>>