Boyang,

thanks a lot for the KIP.

Couple of questions:

> (MODIFIED) public Map<String, Object> getRestoreConsumerConfigs(final String 
> clientId);

You mean that the implementation/semantics of this method changes, but
not the API itself? Might be good to add this as "comment style" instead
of "(MODIFIED)" prefix.

> By rewriting the getRestoreConsumerConfigs() function and adding the 
> getGlobalConsumerConfigs() function, if one user uses restoreConsumerPrefix() 
> or globalConsumerPrefix() when adding new configurations, the configs shall 
> overwrite base consumer config. If not specified, restore consumer and global 
> consumer shall share the same config with base consumer.

While this does make sense for backward compatibility, I am wonder if it
makes the config "inheritance logic" (ie, hierarchy) too complex? We
basically introduce a second level of overwrites. It might be simpler to
not introduce this hierarchy with the cost to break backward compatibility.

For example, config `request.timeout.ms`:

User sets `request.timeout.ms=<user-value>`
To change it for the main consumer, user also sets
`consumer.request.timeout.ms=<consumer-value>`

If user only wants to change the config for main consumer, but not for
global or restore consumer, user needs to add two more configs:

`restore.consumer.request.timeout.ms=<user-value>`
and
`global.consumer.request.timeout.ms=<user-value>`

to reset both back to the default config. IMHO, this is not an optimal
user experience. Thus, it might be worth to change the semantics for
`consumer.` prefix to only apply those configs to the main consumer.


Not sure what other think what the better solution is (I am not sure by
myself to be honest---just wanted to point it out and discuss the
pros/cons for both).


Another though would be, to introduce one more prefix `main.consumer.`
-- using this, the existing `consumer.` prefix would apply to all
consumers (keeping it's current semantics) while we have overwrites for
all three consumers -- this allow to directly set `main.consumer`
instead of `consumer` avoiding the weird pattern from my example above
and preserves backward compatibility. Ie, if we introduce an hierarchy
of overwrite, a "full" hierarchy might be better than a "partial" hierarchy.


Looking forward to your thoughts.


-Matthias


On 4/1/18 5:55 PM, Guozhang Wang wrote:
> Thanks for the KIP Boyang, the KIP looks good to me.
> 
> For config values, we use underscore for keeping a single word; for config
> keys, though, we do not use underscores or dashes. I'd suggest using dots
> to be consistent with others.
> 
> 
> Otherwise I'm +1 on the KIP.
> 
> 
> Guozhang
> 
> 
> On Sun, Apr 1, 2018 at 10:56 AM, Ted Yu <yuzhih...@gmail.com> wrote:
> 
>> Looks good overall.
>>
>> public static final String RESTORE_CONSUMER_PREFIX = "restore-consumer.";
>>
>> For other constants in StreamsConfig, underscore is used instead of dash.
>>
>> Cheers
>>
>> On Sun, Apr 1, 2018 at 9:38 AM, Boyang Chen <bche...@outlook.com> wrote:
>>
>>> Hey friends,
>>>
>>>
>>> I would like to start a discussion thread for KIP 276:
>>>
>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>> 276+Add+StreamsConfig+prefix+for+different+consumers
>>>
>>>
>>> And pull request is here:
>>>
>>> https://github.com/apache/kafka/pull/4805
>>>
>>> [https://avatars3.githubusercontent.com/u/5845561?s=400&v=4]<https://
>>> github.com/apache/kafka/pull/4805>
>>>
>>> KAFKA-6657: Add StreamsConfig prefix for different consumers by abbccdda
>> ·
>>> Pull Request #4805 · apache/kafka<https://github.
>>> com/apache/kafka/pull/4805>
>>> github.com
>>> This pull request is for jira 6657. The KIP proposal is here Added unit
>>> tests for new getGlobalConsumerConfigs API and make sure existing restore
>>> consumer tests are passing.
>>>
>>>
>>>
>>>
>>>
>>> Thanks,
>>>
>>> Boyang
>>>
>>
> 
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to