Hi Jun, Thanks for the reply.
JR26: I’ve addressed this change in the KIP. JR27: I’ve documented the following configurations in the KIP: ConsumerConfig partition.assignment.strategy StreamsConfig bootstrap.servers MirrorCheckpointConfig groups groups.exclude task.assigned.groups MirrorSourceConfig topics topics.exclude config.properties.exclude WorkerConfig plugin.path RestServerConfig rest.extension.classes Other configurations already have default values and corresponding validators: LogConfig leader.replication.throttled.replicas: List.of() → ThrottledReplicaListValidator follower.replication.throttled.replicas: List.of() → ThrottledReplicaListValidator StreamsConfig rack.aware.assignment.tags: List.of() → atMostOfSize ConnectorConfig transforms: List.of() → aliasValidator predicates: List.of() → aliasValidator SourceConnectorConfig topic.creation.groups: List.of() → ConfigDef.CompositeValidator DistributedConfig inter.worker.verification.algorithms: defaultVerificationAlgorithms(crypto) → ConfigDef.LambdaValidator RestServerConfig admin.listeners: null → AdminListenersValidator listeners: List.of("http://:8083") → ListenersValidator Best Regards, Jiunn-Yang > Jun Rao <j...@confluent.io.INVALID> 於 2025年7月16日 清晨7:14 寫道: > > Hi, Jiunn-Yang, > > Thanks for the reply. > > JR 26. early.start.listeners and interceptor.classes: It seems that both > could be empty? > > JR27. The following configs of type LIST are missing. > > ConsumerConfig > partition.assignment.strategy > > BrokerSecurityConfigs > > QuorumConfig > > LogConfig > leader.replication.throttled.replicas > follower.replication.throttled.replicas > > StreamsConfig > rack.aware.assignment.tags > bootstrap.servers > > MirrorCheckpointConfig > groups > groups.exclude > > MirrorCheckpointConfig > task.assigned.groups > > MirrorSourceConfig > topics > topics.exclude > config.properties.exclude > > ConnectorConfig > transforms > predicates > > SourceConnectorConfig > topic.creation.groups > > WorkerConfig > plugin.path > > DistributedConfig > inter.worker.verification.algorithms > > RestServerConfig > rest.extension.classes > admin.listeners > listeners > > Thanks, > > Jun > > On Tue, Jul 15, 2025 at 6:22 AM 黃竣陽 <s7133...@gmail.com> wrote: > >> Hello Jun Chia, >> >> Thanks for the reply, >> >> JR20: This configuration should remain unchanged. I have updated the KIP. >> >> JR21: For both Consumer and Producer, the default value is an empty list, >> and the >> validator used is NonNullValidator. I think we can change the validator to >> ValidList.anyNonDuplicateValues >> with isNullAllowed = false and isEmptyAllowed = false. >> >> JR23: I’ve addressed this change in the KIP. Although the default value of >> early.start.listeners remains >> unchanged, the validator now disallows empty lists. >> >> JR24: Since log.dirs does not change its default value, I used a dash (-) >> to indicate that the field remains unchanged. >> >> JR25: I’ve updated the table and aligned similar validators as much as >> possible for consistency. >> >> Best Regards, >> Jiunn-Yang >> >>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月15日 下午2:12 寫道: >>> >>>> JR20. controller.listener.names : It's required on the broker. Is it >>> required on the controller? >>> >>> there is a small "sugar" in the controller, which we will >>> create listener.security.protocol.map based on controller.listener.names >>> if listener.security.protocol.map is not explicitly set [0] >>> Additionally, `controller.listener.names` is also used to filter out the >>> advertised controller listeners [1] >>> >>> >>>> JR22. group.coordinator.rebalance.protocols: Currently, it can be set to >>> null, right? >>> >>> I don't think so. There is no null check after calling >>> >> `getList(GroupCoordinatorConfig.GROUP_COORDINATOR_REBALANCE_PROTOCOLS_CONFIG)`[2], >>> which causes an NPE if getList returns null." >>> >>> [0] >>> >> https://github.com/apache/kafka/blob/trunk/server/src/main/java/org/apache/kafka/server/config/AbstractKafkaConfig.java#L133 >>> [1] >>> >> https://github.com/apache/kafka/blob/7ea32a0e938c22119f11908aa419aaf0ffd9b6d8/core/src/main/scala/kafka/server/KafkaConfig.scala#L459 >>> [2] >>> >> https://github.com/apache/kafka/blob/7ea32a0e938c22119f11908aa419aaf0ffd9b6d8/core/src/main/scala/kafka/server/KafkaConfig.scala#L373 >>> >>> Jun Rao <j...@confluent.io.invalid> 於 2025年7月15日 週二 上午6:20寫道: >>> >>>> Hi, Jiunn-Yang, >>>> >>>> Thanks for the updated KIP. >>>> >>>> JR20. controller.listener.names : It's required on the broker. Is it >>>> required on the controller? >>>> >>>> JR21. bootstrap.servers: Some of them (e.g. in producer/consumer) >> already >>>> require it to be non-null. >>>> >>>> JR22. group.coordinator.rebalance.protocols: Currently, it can be set to >>>> null, right? >>>> >>>> JR23. early.start.listeners: It allows default value of null, which >> means >>>> that all listeners included in controller.listener.names will also be >> early >>>> start listeners. >>>> >>>> JR24. log.dirs: It currently has a default value of null. >>>> >>>> JR25. It seems there are quite a few more configs of type list. Do they >>>> need to be changed too? >>>> >>>> AdminClientConfig: 4 >>>> ConsumerConfig: 5 >>>> ProducerConfig: 4 >>>> SaslConfigs: 1 >>>> SslConfigs: 2 >>>> BrokerSecurityConfigs: 5 >>>> MirrorClientConfig: 1 >>>> org.apache.kafka.connect.mirror : 16 >>>> org.apache.kafka.connect.runtime : 21 >>>> GroupCoordinatorConfig: 3 >>>> QuorumConfig: 2 >>>> ServerConfigs: 1 >>>> KRaftConfigs: 1 >>>> ClientMetricsConfigs: 2 >>>> MetricConfigs: 2 >>>> LogConfig: 4 >>>> StreamsConfig: 4 >>>> >>>> Jun >>>> >>>> On Fri, Jul 11, 2025 at 8:13 PM 黃竣陽 <s7133...@gmail.com> wrote: >>>> >>>>> Hi Chia, Jun >>>>> >>>>> Thanks for the reply, >>>>> I have updated the table in the KIP. >>>>> >>>>> Best Regards, >>>>> Jiunn-Yang >>>>> >>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月11日 清晨7:38 寫道: >>>>>> >>>>>> 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 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>> >>>>> >>>>> >>>> >> >>