The other question to figure out is the hierarchy of overrides. Currently
some configs can be overridden at the topic level using a fairly ad hoc
mechanism. I think Aditya's quota proposal requires having defaults and
overrides at the client.id level. You could imagine similar requirements at
the user level when we have user as a concept. You could also imagine
overrides at a broker level (currently you do this by just changing the
config on that broker only).

With respect to dynamic update: Some configs (e.g. socket buffers) CAN'T be
dynamically updated, and others (e.g. cleaner buffer) could theoretically
be updated by the implementation would be quite complicated.

I think do really get this right:
1. We would need to be able to mark configs as updatable or not (shouldn't
be too hard after the conversion to the config def stuff) in a way that
this automatically flows to the documentation. Obviously if you had to
guess which config was updatable that would be a nightmare.
2. We will want to go with a pattern where instead of injecting individual
values into the objects that need them from the config we pass some kind of
Config object which has a reference to the current immutable config
instance. To get a config you always have to dereference
    config.current.myConfigValue
so that when current gets updated you get all the new configs atomically.
3. We will need to support a flexible notion of override that generalizes
the LogConfig stuff we did at the topic level.

This is all a fair amount of work to do well.

-Jay

On Wed, Mar 18, 2015 at 10:11 AM, Andrii Biletskyi <
andrii.bilets...@stealth.ly> wrote:

> Aditya,
>
> Yes, you are right. We agreed to think how global config can
> be done w/o restarting the broker, consumers/producers. I haven't
> yet updated the KIP accordingly though.
> In short, the problem is that KafkaConfig is "spread out" over different
> components, like SocketServer, OffsetManager etc. This makes
> it hard to dynamically change config, at least if we follow dynamic
> LogConfig approach. So my opinion and vision is that we need to
> treat each config block (like quotas in your case) separately. Logically,
> different cases will be handled differently, some of the configs are
> not eligible for dynamic change at all.
>
> Thanks,
> Andrii Biletskyi
>
> On Wed, Mar 18, 2015 at 6:54 PM, Aditya Auradkar <
> aaurad...@linkedin.com.invalid> wrote:
>
> > Hi Andrii,
> >
> > Thanks for the writeup.
> > IMO, we should be able to support dynamically changing certain configs.
> > For example: the Quota proposal relies on such a mechanism for changing
> > quotas on the fly.
> >
> > Aditya
> > ________________________________________
> > From: Andrii Biletskyi [andrii.bilets...@stealth.ly]
> > Sent: Tuesday, March 03, 2015 10:30 AM
> > To: dev@kafka.apache.org
> > Subject: Re: [DISCUSS] KIP-5 - Broker Configuration Management
> >
> > Hey Jun,
> >
> > Initially I was thinking about instead of 3-4 state that global config
> > changes
> > take effect only after broker restart. So it's just:
> >
> > 3-4. On each broker startup apply global config from ZK
> >
> > In other words, the comprehensive workflow is the following:
> > 1. Issue ChangeGlobalConfigRequest
> > 2. Controller validates / stores config in ZK
> > (out of scope of this KIP) 3. Do rolling restart for brokers one by one
> to
> > pick up
> > config changes
> >
> > My understanding is that we won't be able to handle config change
> > dynamically
> > as we do for Log config. The main reason, from my point of view, is that
> > broker config operates such settings as num.io.threads updating which
> would
> > mean
> > gracefully restart some of the broker's components (in this case
> > SocketServer) which is,
> > in turn, might be very tricky.
> >
> > Thanks,
> > Andrii Biletskyi
> >
> > On Tue, Mar 3, 2015 at 7:43 PM, Jun Rao <j...@confluent.io> wrote:
> >
> > > It seems the proposed workflow is the following.
> > >
> > > 1. Client issues a global config update request to the broker.
> > > 2. Broker writes the new config to ZK.
> > > 3. Controller picks up the changes from ZK.
> > > 4. Controller propagates the config changes to all brokers.
> > >
> > > Do we need to add a new request/response to propagate the config
> changes?
> > >
> > > Also, this logic is a bit different from how per topic config changes
> > > works: each broker reads from ZK directly. It would be good to make
> them
> > > consistent.
> > >
> > > Thanks,
> > >
> > > Jun
> > >
> > >
> > > On Wed, Jan 21, 2015 at 10:34 PM, Joe Stein <joe.st...@stealth.ly>
> > wrote:
> > >
> > > > Created a KIP
> > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-5+-+Broker+Configuration+Management
> > > >
> > > > JIRA https://issues.apache.org/jira/browse/KAFKA-1786
> > > >
> > > > /*******************************************
> > > >  Joe Stein
> > > >  Founder, Principal Consultant
> > > >  Big Data Open Source Security LLC
> > > >  http://www.stealth.ly
> > > >  Twitter: @allthingshadoop <http://www.twitter.com/allthingshadoop>
> > > > ********************************************/
> > > >
> > >
> >
>

Reply via email to