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 >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>>> >>> >>> >>