Made one change to the KIP - I added a *validate* method to the
*Reconfigurable* interface so that we can validate new configs before they
are applied.

A couple of initial implementations:

   1. Dynamic updates of keystores:
   
https://github.com/rajinisivaram/kafka/commit/3071b686973a59a45546e9db6bdb05578d2edc0b
   2. Metrics reporter reconfiguration:
   
https://github.com/rajinisivaram/kafka/commit/7c0aa1ea1d81273fe6c082d47fff16208885d3df


On Fri, Dec 1, 2017 at 4:04 PM, Rajini Sivaram <rajinisiva...@gmail.com>
wrote:

> Hi all,
>
> If there are no other suggestions or comments, I will start vote next
> week. In the meantime, please feel free to review and add any suggestions
> or improvements.
>
> Regards,
>
> Rajini
>
> On Wed, Nov 29, 2017 at 11:52 AM, Rajini Sivaram <rajinisiva...@gmail.com>
> wrote:
>
>> Hi Jason,
>>
>> Thanks for reviewing the KIP.
>>
>> I hadn't included *inter.broker.protocol.version*, but you have provided
>> a good reason to do that in order to avoid an additional rolling restart
>> during upgrade. I had included *log.message.format.version* along with
>> other default topic configs, but it probably makes sense to do these two
>> together.
>>
>>
>> On Wed, Nov 29, 2017 at 12:00 AM, Jason Gustafson <ja...@confluent.io>
>> wrote:
>>
>>> Hi Rajini,
>>>
>>> One quick question I was wondering about is whether this could be used to
>>> update the inter-broker protocol version or the message format version?
>>> Potentially then we'd only need one rolling restart to upgrade the
>>> cluster.
>>> I glanced quickly through the uses of this config in the code and it
>>> seems
>>> like it might be possible. Not sure if there are any complications you or
>>> others can think of.
>>>
>>> Thanks,
>>> Jason
>>>
>>> On Tue, Nov 28, 2017 at 2:48 PM, Rajini Sivaram <rajinisiva...@gmail.com
>>> >
>>> wrote:
>>>
>>> > Hi Colin,
>>> >
>>> > Thank you for reviewing the KIP.
>>> >
>>> > *kaka-configs.sh* will be converted to use *AdminClient* under
>>> KAFKA-5722.
>>> > This is targeted for the next release (1.1.0). Under this KIP, we will
>>> > implement *AdminClient#alterConfigs* for the dynamic configs listed in
>>> the
>>> > KIP. This will include validation of the configs and will return
>>> > appropriate errors if configs are invalid. Integration tests will also
>>> be
>>> > added using AdmnClient. Only the actual conversion of ConfigCommand to
>>> use
>>> > AdminClient will be left to be done under KAFKA-5722.
>>> >
>>> > Once KAFKA-5722 is implemented,* kafka-confgs.sh* can be used to
>>> obtain the
>>> > current configuration, which can be redirected to a text file to
>>> create a
>>> > static *server.properties* file. This should help when downgrading -
>>> but it
>>> > does require brokers to be running. We can also document how to obtain
>>> the
>>> > properties using *zookeeper-shell.sh* while downgrading if brokers are
>>> > down.
>>> >
>>> > If we rename properties, we should add the new property to ZK based on
>>> the
>>> > value of the old property when the upgraded broker starts up. But we
>>> would
>>> > probably leave the old property as is. The old property will be
>>> returned
>>> > and used as a synonym only as long as the broker is on a version where
>>> it
>>> > is still valid. But it can remain in ZK and be updated if downgrading
>>> - it
>>> > will be up to the user to update the old property if downgrading or
>>> delete
>>> > it if not needed. Renaming properties is likely to be confusing in any
>>> case
>>> > even without dynamic configs, so hopefully it will be very rare.
>>> >
>>> >
>>> > Rajini
>>> >
>>> > On Tue, Nov 28, 2017 at 7:47 PM, Colin McCabe <cmcc...@apache.org>
>>> wrote:
>>> >
>>> > > Hi Rajini,
>>> > >
>>> > > This seems like a nice improvement!
>>> > >
>>> > > One thing that is a bit concerning is that, if bin/kafka-configs.sh
>>> is
>>> > > used, there is no  way for the broker to give feedback or error
>>> > > messages.  The broker can't say "sorry, I can't reconfigure that in
>>> that
>>> > > way."  Or even "that configuration property is not reconfigurable in
>>> > > this version of the software."  It seems like in the examples give,
>>> > > users will simply set a configuration using bin/kafka-configs.sh, but
>>> > > then they have to check the broker log files to see if it could
>>> actually
>>> > > be applied.  And even if it couldn't be applied, then it still
>>> lingers
>>> > > in ZooKeeper.
>>> > >
>>> > > This seems like it would lead to a lot of user confusion, since they
>>> get
>>> > > no feedback when reconfiguring something.  For example, there will
>>> be a
>>> > > lot of scenarios where someone finds a reconfiguration command on
>>> > > Google, runs it, but then it doesn't do anything because the software
>>> > > version is different.  And there's no error message or feedback about
>>> > > this.  It just doesn't work.
>>> > >
>>> > > To prevent this, I think we should convert bin/kafka-configs.sh to
>>> use
>>> > > AdminClient's AlterConfigsRequest.  This allows us to detect
>>> scenarios
>>> > > where, because of a typo, different software version, or a value of
>>> the
>>> > > wrong type (eg. string vs. int), the given configuration cannot be
>>> > > applied.  We really should convert kafka-configs.sh to use
>>> AdminClient
>>> > > anyway, for all the usual reasons-- people want to lock down
>>> ZooKeeper,
>>> > > ACLs should be enforced, internal representations should be hidden,
>>> we
>>> > > should support environments where ZK is not exposed, etc. etc.
>>> > >
>>> > > Another issue that I see here is, how does this interact with
>>> downgrade?
>>> > >  Presumably, if the user downgrades to a version that doesn't support
>>> > > KIP-226, all the dynamic configurations stored in ZK revert to
>>> whatever
>>> > > value they have in the local config files.  Do we need to have a
>>> utility
>>> > > that can reify the actual applied configuration into a local text
>>> file,
>>> > > to make downgrades less painful?
>>> > >
>>> > > With regard to upgrades, what happens if we change the name of a
>>> > > configuration key in the future?  For example, if we decide to rename
>>> > > min.insync.replicas to min.in.sync.replicas, presumably we will
>>> > > deprecate the old key name.  And then perhaps it will be removed in a
>>> > > future release, such as Apache Kafka 2.0.  In this scenario, should
>>> the
>>> > > Kafka upgrade process change the name of the configuration key in ZK
>>> > > from min.insync.replicas to min.in.sync.replicas?  Obviously this
>>> will
>>> > > make downgrades harder, if so.  But if it doesn't, then removing
>>> > > deprecated configuration key synonyms might become very difficult.
>>> > >
>>> > > best,
>>> > > Colin
>>> > >
>>> > >
>>> > > On Wed, Nov 22, 2017, at 12:52, Rajini Sivaram wrote:
>>> > > > Hi Tom,
>>> > > >
>>> > > > No, I am not proposing this as a way to configure replication
>>> quotas.
>>> > > > When
>>> > > > you describe broker configs using AdminClient, you will see all the
>>> > > > configs
>>> > > > persisted in /configs/brokers/<brokerId> in ZooKeeper and this
>>> includes
>>> > > > leader.replication.throttled.rate, follower.replication.throttled
>>> .rate
>>> > > > etc. But
>>> > > > the broker configs that can be altered using AdminClient as a
>>> result of
>>> > > > this KIP are those explicitly stated in the KIP (does not include
>>> any
>>> > of
>>> > > > the quota configs).
>>> > > >
>>> > > > Regards,
>>> > > >
>>> > > > Rajini
>>> > > >
>>> > > > On Wed, Nov 22, 2017 at 7:54 PM, Tom Bentley <
>>> t.j.bent...@gmail.com>
>>> > > > wrote:
>>> > > >
>>> > > > > Hi Rajini,
>>> > > > >
>>> > > > > Just to clarify, are you proposing this as a way to configure
>>> > > interbroker
>>> > > > > throttling/quotas? I don't think you are, just wanted to check
>>> (since
>>> > > > > KIP-179 proposes a different mechanism for setting them which
>>> > supports
>>> > > > > their automatic removal).
>>> > > > >
>>> > > > > Cheers,
>>> > > > >
>>> > > > > Tom
>>> > > > >
>>> > > > > On 22 November 2017 at 18:28, Rajini Sivaram <
>>> > rajinisiva...@gmail.com>
>>> > > > > wrote:
>>> > > > >
>>> > > > > > I have made an update to the KIP to optionally return all the
>>> > config
>>> > > > > > synonyms in *DescribeConfigsResponse*. The synonyms are
>>> returned in
>>> > > the
>>> > > > > > order of precedence. AlterConfigsResponse will not be modified
>>> by
>>> > the
>>> > > > > KIP.
>>> > > > > > Since many configs already have various overrides (e.g. topic
>>> > configs
>>> > > > > with
>>> > > > > > broker overrides, security properties with listener name
>>> overrides)
>>> > > and
>>> > > > > we
>>> > > > > > will be adding more levels with dynamic configs, it will be
>>> useful
>>> > to
>>> > > > > > obtain the full list in order of precedence.
>>> > > > > >
>>> > > > > > On Tue, Nov 21, 2017 at 11:24 AM, Rajini Sivaram <
>>> > > > > rajinisiva...@gmail.com>
>>> > > > > > wrote:
>>> > > > > >
>>> > > > > > > Hi Ted,
>>> > > > > > >
>>> > > > > > > You can quote the config name, but it is not necessary for
>>> > > deleting a
>>> > > > > > > config since the name doesn't contain any special characters
>>> that
>>> > > > > > requires
>>> > > > > > > quoting.
>>> > > > > > >
>>> > > > > > > On Mon, Nov 20, 2017 at 9:20 PM, Ted Yu <yuzhih...@gmail.com
>>> >
>>> > > wrote:
>>> > > > > > >
>>> > > > > > >> Thanks for the quick response.
>>> > > > > > >>
>>> > > > > > >> It seems the config following --delete-config should be
>>> quoted.
>>> > > > > > >>
>>> > > > > > >> Cheers
>>> > > > > > >>
>>> > > > > > >> On Mon, Nov 20, 2017 at 12:02 PM, Rajini Sivaram <
>>> > > > > > rajinisiva...@gmail.com
>>> > > > > > >> >
>>> > > > > > >> wrote:
>>> > > > > > >>
>>> > > > > > >> > Ted,
>>> > > > > > >> >
>>> > > > > > >> > Have added an example for --delete-config.
>>> > > > > > >> >
>>> > > > > > >> > On Mon, Nov 20, 2017 at 7:42 PM, Ted Yu <
>>> yuzhih...@gmail.com>
>>> > > > > wrote:
>>> > > > > > >> >
>>> > > > > > >> > > bq. There is a --delete-config option
>>> > > > > > >> > >
>>> > > > > > >> > > Consider adding a sample with the above option to the
>>> KIP.
>>> > > > > > >> > >
>>> > > > > > >> > > Thanks
>>> > > > > > >> > >
>>> > > > > > >> > > On Mon, Nov 20, 2017 at 11:36 AM, Rajini Sivaram <
>>> > > > > > >> > rajinisiva...@gmail.com>
>>> > > > > > >> > > wrote:
>>> > > > > > >> > >
>>> > > > > > >> > > > Hi Ted,
>>> > > > > > >> > > >
>>> > > > > > >> > > > Thank you for reviewing the KIP.
>>> > > > > > >> > > >
>>> > > > > > >> > > > *Would decreasing network/IO threads be supported ?*
>>> > > > > > >> > > > Yes, As described in the KIP, some connections will be
>>> > > closed if
>>> > > > > > >> > network
>>> > > > > > >> > > > thread count is reduced (and reconnections will be
>>> > > processed on
>>> > > > > > >> > remaining
>>> > > > > > >> > > > threads)
>>> > > > > > >> > > >
>>> > > > > > >> > > > *What if some keys in configs are not in the Set
>>> returned
>>> > > > > > >> > > > by reconfigurableConfigs()? Would exception be thrown
>>> ?*
>>> > > > > > >> > > > No, *reconfigurableConfigs() *will be used to decide
>>> which
>>> > > > > classes
>>> > > > > > >> are
>>> > > > > > >> > > > notified when a configuration update is made*.
>>> > > > > > >> > **reconfigure(Map<String,
>>> > > > > > >> > > ?>
>>> > > > > > >> > > > configs)* will be invoked with all of the configured
>>> > > configs of
>>> > > > > > the
>>> > > > > > >> > > broker,
>>> > > > > > >> > > >  similar to  *configure(Map<String, ?> configs). *For
>>> > > example,
>>> > > > > > when
>>> > > > > > >> > > > *SslChannelBuilder* is made reconfigurable, it could
>>> just
>>> > > > > create a
>>> > > > > > >> new
>>> > > > > > >> > > > SslFactory with the latest configs, using the same
>>> code as
>>> > > > > > >> > *configure()*.
>>> > > > > > >> > > > We avoid reconfiguring *SslChannelBuilder
>>> *unnecessarily*,
>>> > > *for
>>> > > > > > >> example
>>> > > > > > >> > > if
>>> > > > > > >> > > > a topic config has changed, since topic configs are
>>> not
>>> > > listed
>>> > > > > in
>>> > > > > > >> the
>>> > > > > > >> > > > *SslChannelBuilder#**reconfigurableConfigs().*
>>> > > > > > >> > > >
>>> > > > > > >> > > > *The sample commands for bin/kafka-configs include
>>> > > > > '--add-config'.
>>> > > > > > >> > Would
>>> > > > > > >> > > > there be '--remove-config' ?*
>>> > > > > > >> > > > bin/kafka-configs.sh is an existing tool whose
>>> parameters
>>> > > will
>>> > > > > not
>>> > > > > > >> be
>>> > > > > > >> > > > modified by this KIP. There is a --delete-config
>>> option.
>>> > > > > > >> > > >
>>> > > > > > >> > > > *ssl.keystore.password appears a few lines above.
>>> Would
>>> > > there be
>>> > > > > > any
>>> > > > > > >> > > > issue with mixture of connections (with old and new
>>> > > password) ?*
>>> > > > > > >> > > > No, passwords (and the actual keystore) are only used
>>> > during
>>> > > > > > >> > > > authentication. Any channel created using the old
>>> > SslFactory
>>> > > > > will
>>> > > > > > >> not
>>> > > > > > >> > be
>>> > > > > > >> > > > impacted.
>>> > > > > > >> > > >
>>> > > > > > >> > > > Regards,
>>> > > > > > >> > > >
>>> > > > > > >> > > > Rajini
>>> > > > > > >> > > >
>>> > > > > > >> > > >
>>> > > > > > >> > > > On Mon, Nov 20, 2017 at 4:39 PM, Ted Yu <
>>> > > yuzhih...@gmail.com>
>>> > > > > > >> wrote:
>>> > > > > > >> > > >
>>> > > > > > >> > > > > bq. (e.g. increase network/IO threads)
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > Would decreasing network/IO threads be supported ?
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > bq.     void reconfigure(Map<String, ?> configs);
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > What if some keys in configs are not in the Set
>>> returned
>>> > > by
>>> > > > > > >> > > > > reconfigurableConfigs()
>>> > > > > > >> > > > > ? Would exception be thrown ?
>>> > > > > > >> > > > > If so, please specify which exception would be
>>> thrown.
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > The sample commands for bin/kafka-configs include
>>> > > > > > '--add-config'.
>>> > > > > > >> > > > > Would there be '--remove-config' ?
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > bq. Existing connections will not be affected, new
>>> > > connections
>>> > > > > > >> will
>>> > > > > > >> > use
>>> > > > > > >> > > > the
>>> > > > > > >> > > > > new keystore.
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > ssl.keystore.password appears a few lines above.
>>> Would
>>> > > there
>>> > > > > be
>>> > > > > > >> any
>>> > > > > > >> > > issue
>>> > > > > > >> > > > > with mixture of connections (with old and new
>>> password)
>>> > ?
>>> > > > > > >> > > > >
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > Cheers
>>> > > > > > >> > > > >
>>> > > > > > >> > > > >
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > On Mon, Nov 20, 2017 at 5:57 AM, Rajini Sivaram <
>>> > > > > > >> > > rajinisiva...@gmail.com
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > wrote:
>>> > > > > > >> > > > >
>>> > > > > > >> > > > > > Hi all,
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > > > I have submitted KIP-226 to enable dynamic
>>> > > reconfiguration
>>> > > > > of
>>> > > > > > >> > brokers
>>> > > > > > >> > > > > > without restart:
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > > > https://cwiki.apache.org/
>>> > confluence/display/KAFKA/KIP-
>>> > > > > > >> > > > > > 226+-+Dynamic+Broker+Configuration
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > > > The KIP proposes to extend the current dynamic
>>> > > replication
>>> > > > > > quota
>>> > > > > > >> > > > > > configuration for brokers to support dynamic
>>> > > reconfiguration
>>> > > > > > of
>>> > > > > > >> a
>>> > > > > > >> > > > limited
>>> > > > > > >> > > > > > set of configuration options that are typically
>>> > updated
>>> > > > > during
>>> > > > > > >> the
>>> > > > > > >> > > > > lifetime
>>> > > > > > >> > > > > > of a broker.
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > > > Feedback and suggestions are welcome.
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > > > Thank you...
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > > > Regards,
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > > > Rajini
>>> > > > > > >> > > > > >
>>> > > > > > >> > > > >
>>> > > > > > >> > > >
>>> > > > > > >> > >
>>> > > > > > >> >
>>> > > > > > >>
>>> > > > > > >
>>> > > > > > >
>>> > > > > >
>>> > > > >
>>> > >
>>> >
>>>
>>
>>
>

Reply via email to