@Matthias

That's a good question: I think adding another config for the main consumer
makes good tradeoffs between compatibility and new user convenience. Just
to clarify, from user's pov on upgrade:

1) I'm already overriding some consumer configs, and now I want to override
these values differently for restore consumers, I'd add one new line for
the restore consumer prefix.

2) I'm already overriding some consumer configs, and now I want to NOT
overriding them for restore consumers, I'd change my override from
`consumer.X` to `main.consumer.X`.

3) I'm new and have not any consumer overrides, and now if I want to
override some, I'd use `main.consumer`, `restore.consumer` for specific
consumer types, and ONLY consider `consumer` for the ones that I want to
apply universally.

4) I'm already overriding some consumer configs and I'm happy with what I
get, I do not change anything.


Guozhang

On Mon, Apr 2, 2018 at 11:10 AM, Ted Yu <yuzhih...@gmail.com> wrote:

> bq. to introduce one more prefix `main.consumer.`
>
> Makes sense.
>
> On Mon, Apr 2, 2018 at 11:06 AM, Matthias J. Sax <matth...@confluent.io>
> wrote:
>
> > 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
> > >>>
> > >>
> > >
> > >
> > >
> >
> >
>



-- 
-- Guozhang

Reply via email to