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