Hello Jun,

2. My original conclusion was incorrect. bootstrap.servers can support 
NO_DEFAULT_VALUE with the validator 
ConfigDef.ValidList.anyNonDuplicateValues(false, false). I propose updating the 
KIP with the following changes:

1.ConsumerConfig – Change the default value of bootstrap.servers from List.of() 
to NO_DEFAULT_VALUE.
2. ProducerConfig – Change the default value of bootstrap.servers from 
List.of() to NO_DEFAULT_VALUE.
3. WorkerConfig – Change the default value of bootstrap.servers from 
"localhost:9092" to NO_DEFAULT_VALUE 
and deprecate the constant BOOTSTRAP_SERVERS_DEFAULT.

Best Regards,
Jiunn-Yang

> Jun Rao <j...@confluent.io.INVALID> 於 2025年8月12日 凌晨3:03 寫道:
> 
> Hi, Jiunn-Yang,
> 
> Thanks for the reply.
> 
> 1 and 3. Sounds good.
> 
> 2. Which bootstrap.servers are you referring to? Also, it's not clear to me
> why the validation fails since typically the validation happens when the
> config is initialized with the binding config file.
> 
> Jun
> 
> On Mon, Aug 11, 2025 at 6:38 AM 黃竣陽 <s7133...@gmail.com> wrote:
> 
>> Hello all,
>> 
>> I’ve started implementing this KIP, and there are a few configurations
>> that need further discussion:
>> 
>> 1. HeaderFrom fields
>> This configuration should allow duplicate values. Therefore, its default
>> value
>> should be set to NO_DEFAULT_VALUE, and its validator should be
>> NonEmptyListValidator().
>> See the test case [1] for reference.
>> 
>> 2. bootstrap.servers
>> If we set its default value to NO_DEFAULT_VALUE and use the validator
>> ConfigDef.ValidList.anyNonDuplicateValues(false, false),
>> initialization will fail because the default value does not pass the
>> validator. I see two possible solutions:
>> 
>> Option 2.1: Set the default value to List.of("localhost:9092") (similar to
>> WorkerConfig) and use the validator
>> ConfigDef.ValidList.anyNonDuplicateValues(false, false). However, this
>> feels a bit odd, as the default value
>> should ideally be useful, and localhost:9092 is not meaningful for most
>> scenarios.
>> 
>> Option 2.2: Keep the default value as NO_DEFAULT_VALUE and use
>> NonEmptyListValidator(). In this case,
>> we would need to move NonEmptyListValidator from the connect.transforms
>> module to the client module,
>> and make it a public API within ConfigDef. This would also align with how
>> most bootstrap.servers configs are handled.
>> 
>> 3. Remove Cast fields config change
>> This configuration has its own validator, so we should leave it unchanged.
>> 
>> [1]
>> https://github.com/apache/kafka/blob/18045c6ac30921503deffbef1744bb365dc599fb/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HeaderFromTest.java#L240
>> 
>> Best Regards,
>> Jiunn-Yang
>> 
>>> 黃竣陽 <s7133...@gmail.com> 於 2025年8月6日 晚上11:59 寫道:
>>> 
>>> Hi Jun,
>>> 
>>> Thanks for the reply,
>>> 
>>> I have updated the KIP
>>> 
>>> Best Regards,
>>> Jiunn-Yang
>>> 
>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年8月6日 晚上11:34 寫道:
>>>> 
>>>> Hi, Jiunn-Yang,
>>>> 
>>>> Regarding bootstrap.servers in MirrorClientConfig, it's weird that it
>>>> defaults to an empty list while empty list is not allowed. It seems that
>>>> this should have no default value.
>>>> 
>>>> Thanks,
>>>> 
>>>> Jun
>>>> 
>>>> On Wed, Aug 6, 2025 at 7:56 AM Chia-Ping Tsai <chia7...@gmail.com>
>> wrote:
>>>> 
>>>>> Thanks to Jiunn-Yang for this hard KIP.
>>>>> 
>>>>> It might not be perfect, but we can refine it during the PR review
>> process
>>>>> :)
>>>>> 
>>>>> 
>>>>> 黃竣陽 <s7133...@gmail.com> 於 2025年8月6日 週三 下午7:32寫道:
>>>>> 
>>>>>> Hello chia,
>>>>>> 
>>>>>> Thanks for the reply.
>>>>>> 
>>>>>> chia05: I have updated the KIP to change the default values of
>>>>>> task.assigned.groups
>>>>>> and task.assigned.partitions from null to NO_DEFAULT_VALUE.
>>>>>> 
>>>>>> chia06: I have also updated the KIP based on your feedback.
>>>>>> 
>>>>>> Best Regards,
>>>>>> Jiunn-Yang
>>>>>> 
>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年8月6日 凌晨12:54 寫道:
>>>>>>> 
>>>>>>> hi Jiunn-Yang
>>>>>>> 
>>>>>>> chia05:
>>>>>>> 
>>>>>>> `task.assigned.groups` and `task.assigned.partitions` should not have
>>>>>>> default value, right?
>>>>>>> 
>>>>>>> chia06:
>>>>>>> 
>>>>>>> `new HashSet<>(values).size()` -> `Set.copyOf(values).size()`
>>>>>>> 
>>>>>>> Best,
>>>>>>> Chia-Ping
>>>>>>> 
>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年8月5日 週二 下午11:39寫道:
>>>>>>> 
>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>> 
>>>>>>>> Thanks for the reply and your patience. The KIP looks good to me
>> now.
>>>>>>>> 
>>>>>>>> Hi, Luke, Mickael,
>>>>>>>> 
>>>>>>>> Could you take a look at the KIP again and see if it makes sense to
>>>>> you?
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> 
>>>>>>>> Jun
>>>>>>>> 
>>>>>>>> On Tue, Aug 5, 2025 at 3:04 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>>> 
>>>>>>>>> Hello Jun,
>>>>>>>>> 
>>>>>>>>> Thanks for the reply,
>>>>>>>>> 
>>>>>>>>> JR46: I have clarified the behavior for null and empty values, so
>>>>> users
>>>>>>>>> can
>>>>>>>>> understand the reasoning behind disallowing empty lists.
>>>>>>>>> 
>>>>>>>>> JR48: I've updated the KIP accordingly.
>>>>>>>>> 
>>>>>>>>> Best Regards,
>>>>>>>>> Jiunn-Yang
>>>>>>>>> 
>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年8月5日 凌晨12:45 寫道:
>>>>>>>>>> 
>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>> 
>>>>>>>>>> Thanks for the reply.
>>>>>>>>>> 
>>>>>>>>>> JR46. "Currently, if plugin.path is set to an empty list, no
>>>>>>>>> user-specified
>>>>>>>>>> plugin locations are processed, but plugins from the parent
>>>>>> classloader
>>>>>>>>> are
>>>>>>>>>> still loaded." Could you add why the current behavior is bad for
>> the
>>>>>>>>> users?
>>>>>>>>>> 
>>>>>>>>>> JR48. If we want to preserve the current behavior, we should
>> remove
>>>>>> the
>>>>>>>>>> following validation, right?
>>>>>>>>>>    if (validStrings.length == 0) {
>>>>>>>>>>        throw new IllegalArgumentException("Valid strings list
>>>>>>>> cannot
>>>>>>>>>> be empty for in validator");
>>>>>>>>>> 
>>>>>>>>>> Jun
>>>>>>>>>> 
>>>>>>>>>> On Fri, Aug 1, 2025 at 6:47 PM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Hello Jun,
>>>>>>>>>>> 
>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>> 
>>>>>>>>>>> JR42, JR45, JR46, JR47: I have updated the KIP.
>>>>>>>>>>> 
>>>>>>>>>>> JR43: If bootstrap.servers is empty for these configurations,
>>>>>>>>>>> it will fail when creating the AdminClient. I have updated the
>> KIP
>>>>> to
>>>>>>>>>>> reflect this behavior.
>>>>>>>>>>> 
>>>>>>>>>>> JR44: Thanks for pointing this out. Kafka will indeed fail at the
>>>>>>>>> storage
>>>>>>>>>>> format phase
>>>>>>>>>>> if the configuration is invalid. I have updated the KIP
>>>>> accordingly.
>>>>>>>>>>> 
>>>>>>>>>>> JR48: The current in() method allows empty lists by default, so I
>>>>>>>>> believe
>>>>>>>>>>> setting isEmptyAllowed to true
>>>>>>>>>>> better preserves the original behavior. Therefore, I prefer not
>> to
>>>>>>>>> change
>>>>>>>>>>> this default.
>>>>>>>>>>> 
>>>>>>>>>>> Best Regards,
>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>> 
>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年8月2日 凌晨2:38 寫道:
>>>>>>>>>>>> 
>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>> 
>>>>>>>>>>>> Thanks for the reply. A few more comments.
>>>>>>>>>>>> 
>>>>>>>>>>>> JR42. [6] [7] are not needed since currently an empty list
>> already
>>>>>>>>> causes
>>>>>>>>>>>> an exception.
>>>>>>>>>>>> 
>>>>>>>>>>>> JR43. Could you document the current behavior when
>>>>> bootstrap.servers
>>>>>>>> is
>>>>>>>>>>>> empty in MirrorClientConfig and WorkerConfig?
>>>>>>>>>>>> 
>>>>>>>>>>>> JR44. [12] seems incorrect. I set log.dir, but left log.dirs
>> empty
>>>>>>>> and
>>>>>>>>>>> got
>>>>>>>>>>>> the following.
>>>>>>>>>>>> bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c
>>>>>>>>>>>> config/server.properties
>>>>>>>>>>>> Exception in thread "main" java.lang.IllegalArgumentException:
>>>>>>>>>>> requirement
>>>>>>>>>>>> failed: At least one log directory must be defined via log.dirs
>> or
>>>>>>>>>>> log.dir.
>>>>>>>>>>>> 
>>>>>>>>>>>> bin/kafka-server-start.sh config/server.properties
>>>>>>>>>>>> [2025-08-01 11:31:20,097] INFO Registered
>>>>>>>>>>>> `kafka:type=kafka.Log4jController` MBean
>>>>>>>>>>>> (kafka.utils.Log4jControllerRegistration$)
>>>>>>>>>>>> [2025-08-01 11:31:20,238] ERROR Exiting Kafka due to fatal
>>>>> exception
>>>>>>>>>>>> (kafka.Kafka$)
>>>>>>>>>>>> java.lang.IllegalArgumentException: requirement failed: At least
>>>>> one
>>>>>>>>> log
>>>>>>>>>>>> directory must be defined via log.dirs or log.dir.
>>>>>>>>>>>> 
>>>>>>>>>>>> JR45. Could you group all configs for WorkerConfig together?
>>>>>>>>>>>> 
>>>>>>>>>>>> JR46. plugin.path: We have the following code. So, currently, it
>>>>>>>> seems
>>>>>>>>>>> that
>>>>>>>>>>>> an empty list is allowed for plugin.path and we treat it by
>> adding
>>>>>>>> the
>>>>>>>>>>>> parent path of the classloader. It would be useful to justify
>> why
>>>>>>>>>>>> disallowing empty is better for the users.
>>>>>>>>>>>> 
>>>>>>>>>>>> public static Set<PluginSource> pluginSources(Set<Path>
>>>>>>>>>>>> pluginLocations, ClassLoader classLoader,
>> PluginClassLoaderFactory
>>>>>>>>>>> factory)
>>>>>>>>>>>> {
>>>>>>>>>>>>   Set<PluginSource> pluginSources = new LinkedHashSet<>();
>>>>>>>>>>>>   for (Path pluginLocation : pluginLocations) {
>>>>>>>>>>>>       try {
>>>>>>>>>>>> 
>>>>> pluginSources.add(isolatedPluginSource(pluginLocation,
>>>>>>>>>>>> classLoader, factory));
>>>>>>>>>>>>       } catch (InvalidPathException | MalformedURLException e)
>>>>> {
>>>>>>>>>>>>           log.error("Invalid path in plugin path: {}.
>>>>> Ignoring.",
>>>>>>>>>>>> pluginLocation, e);
>>>>>>>>>>>>       } catch (IOException e) {
>>>>>>>>>>>>           log.error("Could not get listing for plugin path: {}.
>>>>>>>>>>>> Ignoring.", pluginLocation, e);
>>>>>>>>>>>>       }
>>>>>>>>>>>>   }
>>>>>>>>>>>> 
>>>>>>>>> pluginSources.add(classpathPluginSource(classLoader.getParent()));
>>>>>>>>>>>>   return pluginSources;
>>>>>>>>>>>> }
>>>>>>>>>>>> 
>>>>>>>>>>>> JR47. typo in "Should not allow setting validStrings is empty"
>>>>>>>>>>>> 
>>>>>>>>>>>> JR48. We should pass in isEmptyAllowed as false in the code
>> below,
>>>>>>>>> right?
>>>>>>>>>>>> public static ValidList in(String... validStrings) {
>>>>>>>>>>>>   if (validStrings.length == 0) {
>>>>>>>>>>>>       throw new IllegalArgumentException("Valid strings list
>>>>>>>> cannot
>>>>>>>>>>>> be empty for in validator");
>>>>>>>>>>>>   }
>>>>>>>>>>>>   return new ValidList(List.of(validStrings), true, false);
>>>>>>>>>>>> }
>>>>>>>>>>>> 
>>>>>>>>>>>> Jun
>>>>>>>>>>>> 
>>>>>>>>>>>> On Tue, Jul 29, 2025 at 8:53 AM 黃竣陽 <s7133...@gmail.com> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> Hello Jun,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Sorry for the late reply,
>>>>>>>>>>>>> 
>>>>>>>>>>>>> JR40, JR41: I have updated the KIP based on your comments.
>> Please
>>>>>>>>> take a
>>>>>>>>>>>>> look.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年7月24日 凌晨2:56 寫道:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Hi, Jiunn-Yang,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> JR40. In the table, there are a few configs for which we now
>>>>>>>> disallow
>>>>>>>>>>>>> empty
>>>>>>>>>>>>>> lists. It would be useful to document the current behavior for
>>>>>> each
>>>>>>>>> of
>>>>>>>>>>>>> them
>>>>>>>>>>>>>> more accurately. It seems that they should all lead to some
>> bad
>>>>>>>>>>> behavior.
>>>>>>>>>>>>>> For example, if log.dirs is empty, it seems that we can't
>> create
>>>>>>>>>>> topics?
>>>>>>>>>>>>>> If group.coordinator.rebalance.protocols is empty, the group
>>>>>>>>> rebalance
>>>>>>>>>>>>>> protocol will fail?
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> JR41. It would be useful to clean up the "Compatibility,
>>>>>>>> Deprecation,
>>>>>>>>>>> and
>>>>>>>>>>>>>> Migration Plan" section a bit.
>>>>>>>>>>>>>> JR41.1 The migration plan has "Introduce a new properties
>>>>>>>>>>> isEmptyAllowed
>>>>>>>>>>>>> ,
>>>>>>>>>>>>>> isNullAllowed", which needs to be changed.
>>>>>>>>>>>>>> JR41.2 It started with "For users who configure an empty
>> list",
>>>>>> but
>>>>>>>>> not
>>>>>>>>>>>>> all
>>>>>>>>>>>>>> the bullet points are about empty lists.
>>>>>>>>>>>>>> JR41.3 To me, it would be useful to summarize why the behavior
>>>>>>>>> changes
>>>>>>>>>>>>> are
>>>>>>>>>>>>>> justified. We made 3 types of changes. (1) Disallow null. This
>>>>> is
>>>>>>>> ok
>>>>>>>>>>>>> since
>>>>>>>>>>>>>> one can't really set a null value through a config file. (2)
>>>>>>>> Disallow
>>>>>>>>>>>>>> duplicates. This is ok since it's rare and confusing. (3)
>>>>> Disallow
>>>>>>>>>>> empty.
>>>>>>>>>>>>>> Ideally, we want to claim that for those cases, they all lead
>> to
>>>>>>>> some
>>>>>>>>>>>>> other
>>>>>>>>>>>>>> errors or had behavior currently.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Wed, Jul 23, 2025 at 4:42 AM 黃竣陽 <s7133...@gmail.com>
>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Hello Jun,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> JR34 ,JR36, JR39: I’ve updated the KIP to reflect these
>>>>> changes.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> JR38: I clarified the following configurations:
>>>>>>>>>>>>>>> early.start.listeners: This config is optional and allows
>> both
>>>>>>>> null
>>>>>>>>>>> and
>>>>>>>>>>>>>>> empty lists.
>>>>>>>>>>>>>>> log.dirs and plugin.path: These are also optional, but only
>>>>> allow
>>>>>>>>>>>>>>> null—empty lists are not permitted.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.INVALID> 於 2025年7月23日 凌晨2:28 寫道:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Hi, Jiunn-Yang and Chia-Ping,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> JR34. Sounds good.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> JR36. Could you document that the default value for
>>>>>>>>>>>>>>>> sasl.oauthbearer.expected.audience and ssl.cipher.suites
>> have
>>>>>>>> been
>>>>>>>>>>>>>>> changed?
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> JR38. My concern wasn't quite addressed. "If the
>> configuration
>>>>>> is
>>>>>>>>>>>>>>> optional,
>>>>>>>>>>>>>>>> we will reject any duplicate values in the list." This
>> implies
>>>>>>>> that
>>>>>>>>>>> if
>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>> config is optional, we allow empty lists. However, for
>>>>>>>> plugin.path,
>>>>>>>>>>> we
>>>>>>>>>>>>>>>> reject empty lists.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> JR39. We can remove the fields isEmptyAllowed and
>>>>> isNullAllowed
>>>>>>>>> since
>>>>>>>>>>>>>>> they
>>>>>>>>>>>>>>>> are not public facing.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Tue, Jul 22, 2025 at 4:26 AM 黃竣陽 <s7133...@gmail.com>
>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hello Jun, Chia,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks for the reply,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> JR36: I’ve updated the following configurations:
>>>>>>>>>>>>>>>>> - sasl.oauthbearer.expected.audience
>>>>>>>>>>>>>>>>> - ssl.cipher.suites
>>>>>>>>>>>>>>>>> - ssl.enabled.protocols
>>>>>>>>>>>>>>>>> These now allow both empty and non-empty lists. Since the
>>>>>>>> default
>>>>>>>>>>>>> values
>>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>> sasl.oauthbearer.expected.audience and ssl.cipher.suites
>> were
>>>>>>>>>>>>> previously
>>>>>>>>>>>>>>>>> null,
>>>>>>>>>>>>>>>>> I’ve updated their defaults to List.of() for consistency.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> JR37: A ClassCastException does not occur in
>>>>> MirrorClientConfig
>>>>>>>>> and
>>>>>>>>>>> it
>>>>>>>>>>>>>>>>> should be none.
>>>>>>>>>>>>>>>>> I’ve updated this in the KIP.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> JR38 & JR40: I’ve added a note below the table to indicate
>>>>>> which
>>>>>>>>>>>>>>>>> configurations require special attention.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> JR39: Yes, these properties are package-private.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Best Regards,
>>>>>>>>>>>>>>>>> Jiunn-Yang
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Chia-Ping Tsai <chia7...@gmail.com> 於 2025年7月22日 下午6:04
>> 寫道:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> JR34. Hmm, it seems that the code in taskConfigs() could
>>>>>> return
>>>>>>>>> an
>>>>>>>>>>>>>>> empty
>>>>>>>>>>>>>>>>>> list for a task if knownSourceTopicPartitions is less than
>>>>>>>>>>> maxTasks,
>>>>>>>>>>>>>>>>>> Chia-Ping?
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Yes, `MirrorSourceConnector#taskConfigs` could return an
>>>>> empty
>>>>>>>>>>> list,
>>>>>>>>>>>>>>>>> which
>>>>>>>>>>>>>>>>>> means no `MirrorSourceTask` can be created.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> By contrast, if any `MirrorSourceTask` is created, the
>>>>> configs
>>>>>>>>> used
>>>>>>>>>>>>> by
>>>>>>>>>>>>>>>>>> `MirrorSourceTask` must contain `task.assigned.partitions`
>>>>>>>> with a
>>>>>>>>>>>>>>>>> non-empty
>>>>>>>>>>>>>>>>>> value.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Jun Rao <j...@confluent.io.invalid> 於 2025年7月22日 週二
>>>>> 上午5:14寫道:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Hi, Jiunn-Yang and Chia-Ping,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks for the reply.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> JR34. Hmm, it seems that the code in taskConfigs() could
>>>>>>>> return
>>>>>>>>> an
>>>>>>>>>>>>>>> empty
>>>>>>>>>>>>>>>>>>> list for a task if knownSourceTopicPartitions is less
>> than
>>>>>>>>>>> maxTasks,
>>>>>>>>>>>>>>>>>>> Chia-Ping?
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> JR36. Sounds good. Could you update the KIP? Also, should
>>>>> we
>>>>>>>> do
>>>>>>>>>>> the
>>>>>>>>>>>>>>> same
>>>>>>>>>>>>>>>>>>> for ssl.cipher.suites and
>>>>> sasl.oauthbearer.expected.audience?
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> JR37. Is it true that
>> MirrorClientConfig.bootstrap.servers
>>>>>>>>> returns
>>>>>>>>>>>>>>>>>>> ClassCastException for null? It seems that null could be
>>>>>>>> casted
>>>>>>>>> to
>>>>>>>>>>>>> any
>>>>>>>>>>>>>>>>>>> class.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> JR38. "If the configuration is optional, we will reject
>> any
>>>>>>>>>>>>> duplicate
>>>>>>>>>>>>>>>>>>> values in the list." Could you clarify this? For example,
>>>>>>>>>>>>> plugin.path
>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>> optional, but with a default value. We reject duplicates
>> as
>>>>>>>> well
>>>>>>>>>>> as
>>>>>>>>>>>>>>>>> empty
>>>>>>>>>>>>>>>>>>> lists.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> JR39. isEmptyAllowed and isNullAllowed are not public
>>>>> fields,
>>>>>>>>>>> right?
>>>>>>>>>>>>>>>>> They
>>>>>>>>>>>>>>>>>>> are only public in the anyNonDuplicateValues() method.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> JR40. It would be useful to mention that if
>> cleanup.policy
>>>>> is
>>>>>>>>>>> empty
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>> remote.storage.enable is true, the local log segments
>> will
>>>>> be
>>>>>>>>>>>>> cleaned
>>>>>>>>>>>>>>>>> based
>>>>>>>>>>>>>>>>>>> on log.local.retention.bytes and log.local.retention.ms.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Jun
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On Fri, Jul 18, 2025 at 9:52 AM Chia-Ping Tsai <
>>>>>>>>>>> chia7...@gmail.com>
>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> JR34: For these two configurations, setting an empty
>> list
>>>>>>>>> feels
>>>>>>>>>>> a
>>>>>>>>>>>>>>> bit
>>>>>>>>>>>>>>>>>>>>> unintuitive. If an empty list is
>>>>>>>>>>>>>>>>>>>>> provided, the consumer will call the unsubscribe
>> method,
>>>>>>>> which
>>>>>>>>>>>>>>> doesn't
>>>>>>>>>>>>>>>>>>>>> seem appropriate given
>>>>>>>>>>>>>>>>>>>>> the documentation states: "Topic-partitions assigned to
>>>>>> this
>>>>>>>>>>> task
>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>> replicate."
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> agreed. Additionally, the source code [0] shows that it
>> is
>>>>>>>> not
>>>>>>>>>>>>>>> intended
>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>> generate empty tps for the source task
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> [0]
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>> 
>> https://github.com/apache/kafka/blob/9b542b6ea21e84677a9292f250fc25f8b4162e6f/connect/mirror/src/main/java/org/apache/kafka/connect/mirror/MirrorSourceConnector.java#L202
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>> 
>> 
>> 

Reply via email to