Hi, Jun

Thanks for the reply.

I think the following configs could use null as the default value and treat
an "empty list" as an illegal value.

`sasl.oauthbearer.expected.audience`, `ssl.cipher.suites`,
`ssl.enabled.protocols`,
and `log.dirs`

Jun Rao <j...@confluent.io.invalid> 於 2025年7月11日 週五 上午6:59寫道:

> Hi, Chia-Ping, Jiunn-Yang,
>
> Thanks for the reply.
>
> As you said, if ssl.cipher.suites is empty, intuitively this means that no
> cipher is allowed. So, this should be an illegal config. It just happens
> that our implementation treats it as if the config is not set (meaning the
> value is null). So, it seems that a more intuitive convention is: if the
> config is not set, it defaults to all available cipher suites. If it's
> explicitly set, it can't be empty.
>
> Jun
>
>
>
> On Wed, Jul 9, 2025 at 8:27 AM 黃竣陽 <s7133...@gmail.com> wrote:
>
> > Hi Jun, Chia
> >
> > >> Also, it would be useful to add a compatibility column in the table.
> If
> > a
> > >> value is formally disallowed, it would be useful to compare the old
> and
> > the
> > >> new behavior (e.g. a different exception is thrown, etc).
> > I’ve updated the table to show which exceptions will be thrown for each
> > behavior.
> >
> > >>> I don't understand the point of "5.0". Could you please share more
> > details?
> > >>> It seems to me changing the type or default value should be fine in
> > minor
> > >>> release if we don't break the existing property files.
> > I don't think this requires any compatibility considerations, so I’ve
> > removed the Kafka 5.0 changes section.
> >
> > >>> `max.connections.per.ip.overrides` is parsed as "map" type, so using
> > `LIST`
> > >>> instead of `String` does not seems to make sense.
> > I have removed the config from KIP
> >
> > Best Regards,
> > Jiunn-Yang
> >
> > > Chia-Ping Tsai <chia7...@apache.org> 於 2025年7月9日 晚上10:26 寫道:
> > >
> > >> For ssl.cipher.suites, changing the default value from null to empty
> is
> > >> actually a breaking change. According to the doc, null means that all
> > the
> > >> available cipher suites are supported. I am thinking that we should
> > >> continue to allow null as the default since it could represent a state
> > >> different from empty.
> > >
> > > "Empty list" seems to be a weird case. It appears to signify that no
> > cipher suites are accepted. However, in the codebase, an empty list is
> > handled as if all available cipher suites are supported [0]. We should
> not
> > support the case of "no supported cipher suite," as it doesn't make
> sense.
> > >
> > > In short, changing the default value from null to empty does not break
> > the behavior.
> > >
> > > [0]
> >
> https://github.com/apache/kafka/blob/dabde76ebf105aaa945db60b7753331c83a8c989/clients/src/main/java/org/apache/kafka/common/security/ssl/DefaultSslEngineFactory.java#L139
> > >
> > > On 2025/07/08 17:01:07 Jun Rao wrote:
> > >> Hi, Jiunn-Yang,
> > >>
> > >> I agree with Chia-Ping. If we allow cleanup.policy to be empty, we
> will
> > >> just continue to allow it in all future releases.
> > >>
> > >> For ssl.cipher.suites, changing the default value from null to empty
> is
> > >> actually a breaking change. According to the doc, null means that all
> > the
> > >> available cipher suites are supported. I am thinking that we should
> > >> continue to allow null as the default since it could represent a state
> > >> different from empty.
> > >>
> > >> Also, it would be useful to add a compatibility column in the table.
> If
> > a
> > >> value is formally disallowed, it would be useful to compare the old
> and
> > the
> > >> new behavior (e.g. a different exception is thrown, etc).
> > >>
> > >> Thanks,
> > >>
> > >> Jun
> > >>
> > >> On Tue, Jul 8, 2025 at 8:36 AM Chia-Ping Tsai <chia7...@gmail.com>
> > wrote:
> > >>
> > >>> hi Jiunn
> > >>>
> > >>> Thanks for the explanation. I have updated the KIP accordingly: in
> > Kafka
> > >>>> 4.x, cleanup.policy
> > >>>> can be set to an empty list with a warning message emitted; however,
> > in
> > >>>> Kafka 5.0, setting an
> > >>>> empty list for cleanup.policy will no longer be allowed.
> > >>>
> > >>>
> > >>> If we agree to support "empty list", the approach of "none" could be
> > >>> eliminated, right?
> > >>>
> > >>> I don't understand the point of "5.0". Could you please share more
> > details?
> > >>> It seems to me changing the type or default value should be fine in
> > minor
> > >>> release if we don't break the existing property files.
> > >>>
> > >>> `max.connections.per.ip.overrides` is parsed as "map" type, so using
> > `LIST`
> > >>> instead of `String` does not seems to make sense.
> > >>>
> > >>> Best,
> > >>> Chia-Ping
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> 黃竣陽 <s7133...@gmail.com> 於 2025年7月8日 週二 下午11:25寫道:
> > >>>
> > >>>> Hi all,
> > >>>>
> > >>>>>> Null could make sense as the default value, but it just means that
> > the
> > >>>>>> config key is not set explicitly.
> > >>>>>> Given that, it's probably simpler to just allow
> > >>>>>> log.cleanup.policy to be empty and properly support it?
> > >>>> Thanks for the explanation. I have updated the KIP accordingly: in
> > Kafka
> > >>>> 4.x, cleanup.policy
> > >>>> can be set to an empty list with a warning message emitted; however,
> > in
> > >>>> Kafka 5.0, setting an
> > >>>> empty list for cleanup.policy will no longer be allowed.
> > >>>>
> > >>>>> For another, there is an additional issue which could be handled by
> > >>> this
> > >>>>> KIP. Some configs have "string" type, but they are handled as a
> LIST.
> > >>> For
> > >>>>> example, `early.start.listeners`, `security.providers`. Could we
> > change
> > >>>>> their type to LIST to benefit from this KIP? I mean to make them
> > >>>>> non-nullable.
> > >>>> I have also updated the KIP to include the tables detailing the
> > changes
> > >>>> for LIST-type configuration
> > >>>> default values and the migration from STRING-type to LIST-type
> > >>>> configurations.
> > >>>>
> > >>>> Best Regards,
> > >>>> Jiunn-Yang
> > >>>>
> > >>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月8日 清晨7:06 寫道:
> > >>>>>
> > >>>>> hi all,
> > >>>>>
> > >>>>> JR11. There is an existing config interceptor.classes that allows
> an
> > >>>> empty
> > >>>>>> list and it makes intuitive sense. So, it seems that it's ok to
> > >>> support
> > >>>>>> empty lists in general. Given that, it's probably simpler to just
> > >>> allow
> > >>>>>> log.cleanup.policy to be empty and properly support it?
> > >>>>>
> > >>>>>
> > >>>>> yes, that is what I meant before. Additionally, the `LIST` type
> > should
> > >>>> not
> > >>>>> accept "null". Instead, we should use an empty list as the default
> > >>> value.
> > >>>>> For example, `sasl.oauthbearer.expected.audience` should never has
> > >>> "null"
> > >>>>> value. That could eliminate the null check.
> > >>>>>
> > >>>>> For another, there is an additional issue which could be handled by
> > >>> this
> > >>>>> KIP. Some configs have "string" type, but they are handled as a
> LIST.
> > >>> For
> > >>>>> example, `early.start.listeners`, `security.providers`. Could we
> > change
> > >>>>> their type to LIST to benefit from this KIP? I mean to make them
> > >>>>> non-nullable.
> > >>>>>
> > >>>>> Best,
> > >>>>> Chia-Ping
> > >>>>>
> > >>>>>
> > >>>>>
> > >>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年7月8日 週二 上午5:56寫道:
> > >>>>>
> > >>>>>> Hi, Jiunn-Yang,
> > >>>>>>
> > >>>>>> Thanks for the reply.
> > >>>>>>
> > >>>>>> JR10. Regarding supporting the null value, I am not sure how one
> > could
> > >>>> set
> > >>>>>> a null value in a config file. For example, if you set the
> following
> > >>> in
> > >>>> a
> > >>>>>> config file.
> > >>>>>> configkey=
> > >>>>>> The value of configkey will be an empty list, instead of null,
> > right?
> > >>>>>>
> > >>>>>> Null could make sense as the default value, but it just means that
> > the
> > >>>>>> config key is not set explicitly.
> > >>>>>>
> > >>>>>> JR11. There is an existing config interceptor.classes that allows
> an
> > >>>> empty
> > >>>>>> list and it makes intuitive sense. So, it seems that it's ok to
> > >>> support
> > >>>>>> empty lists in general. Given that, it's probably simpler to just
> > >>> allow
> > >>>>>> log.cleanup.policy to be empty and properly support it?
> > >>>>>>
> > >>>>>> Jun
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>> On Fri, Jul 4, 2025 at 5:13 AM 黃竣陽 <s7133...@gmail.com> wrote:
> > >>>>>>
> > >>>>>>> Hello Jun,
> > >>>>>>>
> > >>>>>>> JR10: The sasl.oauthbearer.expected.audience is optional, that is
> > >>>> right,
> > >>>>>>> so I think
> > >>>>>>> that we can allow null value, but not allow the empty
> > >>>>>>>
> > >>>>>>> JR11: In this KIP, the goal is to address configurations that
> > should
> > >>>> not
> > >>>>>>> accept empty arrays.
> > >>>>>>> We want to prevent users from passing in an empty list when it's
> > not
> > >>>>>>> valid. I believe there are two
> > >>>>>>> main scenarios to consider:
> > >>>>>>>
> > >>>>>>> 1. Nullable but not empty:
> > >>>>>>> The parameter allows either a null value or a non-empty list. In
> > this
> > >>>>>>> case,
> > >>>>>>> if the user provides an empty list, we should throw a
> > >>> ConfigException.
> > >>>>>>>
> > >>>>>>> 2. Non-null and non-empty only: The parameter must always
> contain a
> > >>>>>>> non-empty list — null is also
> > >>>>>>> invalid. In this case, if the user provides either a null or an
> > empty
> > >>>>>>> list, we should throw a ConfigException.
> > >>>>>>>
> > >>>>>>> Therefore, I want to prevent scenarios where users can pass in an
> > >>> empty
> > >>>>>>> list.
> > >>>>>>>
> > >>>>>>> JR12: I’ve updated NonEmptyListValidator to include an allowNull
> > >>>>>> property.
> > >>>>>>> This allows us to specify
> > >>>>>>> whether a configuration permits null values or not.
> > >>>>>>>
> > >>>>>>> JR13: I have updated the table
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年7月1日 清晨6:30 寫道:
> > >>>>>>>>
> > >>>>>>>> Hi, Jiunn-Yang,
> > >>>>>>>>
> > >>>>>>>> Sorry for the late reply. A few more comments.
> > >>>>>>>>
> > >>>>>>>> JR10. The doc for sasl.oauthbearer.expected.audience says that
> > it's
> > >>>>>>>> optional. So an empty list seems to be valid.
> > >>>>>>>>
> > >>>>>>>> JR11. Thinking a bit more. If we are going to support empty
> lists
> > in
> > >>>>>>>> general, it's probably more consistent to just allow
> > >>>> log.cleanup.policy
> > >>>>>>> to
> > >>>>>>>> be empty as Luke suggested, instead of introducing a new option
> > >>> None.
> > >>>>>>>>
> > >>>>>>>> JR12. NonEmptyListValidator allows the input to be null. It
> seems
> > >>> that
> > >>>>>>>> only ssl.cipher.suites allows null. The remaining ones shouldn't
> > be
> > >>>>>> null.
> > >>>>>>>>
> > >>>>>>>> JR13. The table is very helpful. Could you also describe the
> > old/new
> > >>>>>>>> behavior for each config with an empty list or duplicate entry?
> > >>>>>>>>
> > >>>>>>>> Thanks,
> > >>>>>>>>
> > >>>>>>>> Jun
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> On Mon, Jun 30, 2025 at 6:02 AM 黃竣陽 <s7133...@gmail.com> wrote:
> > >>>>>>>>
> > >>>>>>>>> Hello all,
> > >>>>>>>>>
> > >>>>>>>>> I am manually bumping this thread. Any feedback would be
> > >>> appreciated.
> > >>>>>>>>>
> > >>>>>>>>> Best regards,
> > >>>>>>>>> Jiunn-Yang
> > >>>>>>>>>
> > >>>>>>>>>> 黃竣陽 <s7133...@gmail.com> 於 2025年5月28日 晚上11:21 寫道:
> > >>>>>>>>>>
> > >>>>>>>>>> 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
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>
> > >>
> >
> >
> >
>

Reply via email to