Hi Magnus,

Thanks for pointing that out. I haven't been keeping up-to-date with all
the changes and I have no idea how we got here. I had requested the change
to use SET/ADD/DELETE way back in February (
http://mail-archives.apache.org/mod_mbox/kafka-dev/201802.mbox/%3cCAOJcB39amNDgf+8EO5fyA0JvpcUEQZBHu=ujhasj4zhjf-b...@mail.gmail.com%3e)
and I thought the KIP was updated. Non-incremental updates are pretty much
useless for broker config updates, and the KIP as-is doesn't work for
broker configs until ADD/DELETE is reintroduced. DescribeConfigs doesn't
return sensitive configs, so apart from atomicity, any sequence of changes
that requires non-incremental updates simply doesn't work for broker
configs.

Hi Viktor, Are you still working on this KIP?

Regards,

Rajini

On Wed, Jul 4, 2018 at 12:14 PM, Magnus Edenhill <mag...@edenhill.se> wrote:

> There are some concerns about the incremental option that needs to be
> discussed further.
>
> I believe everyone agrees on the need for incremental updates, allowing a
> client
> to only alter the configuration it provides in an atomic fashion.
> The proposal adds a request-level incremental bool for this purpose, which
> is good.
>
> But I suspect this might not be enough, and thus suggest that we should
> extend
> the per-config-entry struct with a mode field that tells the broker how to
> alter
> the given configuration entry:
>  - append - append value to entry (if no previous value it acts like set)
>  - set - overwrite value
>  - delete - delete configuration entry / revert to default.
>
> If we don't do this, the incremental mode can only be used in "append"
> mode,
> and a client that wishes to overwrite property A, delete B, and append to
> C,
> will need to issue three requests:
>  - 1. DescribeConfigs to get the current config.
>  - 2. AlterConfigs(incremental=False) to overwrite config property A and
> delete B.
>  - 3. AlterConfigs(incremental=True) to append to config property C.
>
> This makes the configuration update non-atomic, which incremental is set
> out to fix,
> any configuration changes made by another client between 1 and 2 would be
> lost at 2.
>
>
> This also needs to be exposed in the Admin API to make the user intention
> clear,
> ConfigEntry should be extended with a new constructor that takes the mode
> parameter: append, set, or delete.
> The existing constructor should default to set/overwrite (as in the
> existing pre-incremental case).
> If an application issues an AlterConfigs() request with append or delete
> ConfigEntrys and the broker does not support KIP-248,
> the request should fail locally in the client.
>
> For reference, this is how it is exposed in the corresponding C API:
> https://github.com/edenhill/librdkafka/blob/master/src/rdkafka.h#L5200
>
>
>
> 2018-07-04 11:28 GMT+02:00 Rajini Sivaram <rajinisiva...@gmail.com>:
>
> > Hi Viktor,
> >
> > Where are we with this KIP? Is it just waiting for votes? We should try
> and
> > get this in earlier in the release cycle this time.
> >
> > Thank you,
> >
> > Rajini
> >
> > On Mon, May 21, 2018 at 7:44 AM, Viktor Somogyi <viktorsomo...@gmail.com
> >
> > wrote:
> >
> > > Hi All,
> > >
> > > I'd like to ask the community to please vote for this as the KIP
> > > freeze is tomorrow.
> > >
> > > Thank you very much,
> > > Viktor
> > >
> > > On Mon, May 21, 2018 at 9:39 AM, Viktor Somogyi <
> viktorsomo...@gmail.com
> > >
> > > wrote:
> > > > Hi Colin,
> > > >
> > > > Sure, I'll add a note.
> > > > Thanks for your vote.
> > > >
> > > > Viktor
> > > >
> > > > On Sat, May 19, 2018 at 1:01 AM, Colin McCabe <cmcc...@apache.org>
> > > wrote:
> > > >> Hi Viktor,
> > > >>
> > > >> Thanks, this looks good.
> > > >>
> > > >> The boolean should default to false if not set, to ensure that
> > existing
> > > clients continue to work as-is, right?  Might be good to add a note
> > > specifying that.
> > > >>
> > > >> +1 (non-binding)
> > > >>
> > > >> best,
> > > >> Colin
> > > >>
> > > >> On Fri, May 18, 2018, at 08:16, Viktor Somogyi wrote:
> > > >>> Updated KIP-248:
> > > >>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > > 248+-+Create+New+ConfigCommand+That+Uses+The+New+AdminClient
> > > >>>
> > > >>> I'd like to ask project members, committers and contributors to
> vote
> > > >>> as this would be a useful improvement in Kafka.
> > > >>>
> > > >>> Sections changed:
> > > >>> - Public interfaces: added the bin/scram-credentials.sh command
> that
> > > >>> we discussed with Colin.
> > > >>> - Wire format types: removed AlterOperations. As discussed with
> > Colin,
> > > >>> we don't actually need this: we should behave in an incremental way
> > in
> > > >>> AlterQuotas. For AlterConfig we'll implement this behavior with an
> > > >>> extra flag on the protocol (and incrementing the version).
> > > >>> - AlterQuotas protocol: removed AlterOperations. Added some more
> > > >>> description to the behavior of the protocol. Removing quotas will
> > > >>> happen by sending a NaN instead of the AlterOperations. (Since IEEE
> > > >>> 754 covers NaNs and it is not a valid config for any quota, I think
> > it
> > > >>> is a good notation.)
> > > >>> - SCRAM: so it will be done by the scram-credentials command that
> > uses
> > > >>> direct zookeeper connection. I think further modes, like doing it
> > > >>> through the broker is not necessary. The idea here is that
> zookeeper
> > > >>> in this case acts as a credentials store. This should be decoupled
> > > >>> from the broker as we manage broker credentials as well. The new
> > > >>> command acts as a client to the store.
> > > >>> - AlterConfigs will have an incremental_update flag as discussed.
> By
> > > >>> default it is false to provide the backward compatible behavior.
> When
> > > >>> it is true it will merge the configs with what's there in the node.
> > > >>> Deletion in incremental mode is done by sending an empty string as
> > > >>> config value.
> > > >>> - Other compatibility changes: this KIP doesn't scope listing
> > multiple
> > > >>> users and client's quotas. As per a conversation with Rajini, it is
> > > >>> not a common use case and we can add it back later if it is needed.
> > If
> > > >>> this functionality is needed, the old code should be still
> available
> > > >>> through run-kafka-class. (Removed the USE_OLD_KAFKA_CONFIG_COMMAND
> as
> > > >>> it doesn't make sense anymore.)
> > > >>>
> > > >>> On Fri, May 18, 2018 at 12:33 PM, Viktor Somogyi
> > > >>> <viktorsomo...@gmail.com> wrote:
> > > >>> > Ok, ignore my previous mail (except the last sentence), gmail
> > didn't
> > > >>> > update me about your last email :/.
> > > >>> >
> > > >>> >> I think we should probably just create a flag for alterConfigs
> > > which marks it as incremental, like we discussed earlier, and do this
> as
> > a
> > > compatible change that is needed for the shell command.
> > > >>> >
> > > >>> > Alright, I missed that about the sensitive configs too, so in
> this
> > > >>> > case I can agree with this. I'll update the KIP this afternoon
> and
> > > >>> > update this thread.
> > > >>> > Thanks again for your contribution.
> > > >>> >
> > > >>> > Viktor
> > > >>> >
> > > >>> > On Fri, May 18, 2018 at 2:34 AM, Colin McCabe <
> cmcc...@apache.org>
> > > wrote:
> > > >>> >> Actually, I just realized that this won't work.  The
> AlterConfigs
> > > API is kind of broken right now.  DescribeConfigs won't return the
> > > "sensitive" configurations like passwords.  So doing describe + edit +
> > > alter will wipe out all sensitive configs. :(
> > > >>> >>
> > > >>> >> I think we should probably just create a flag for alterConfigs
> > > which marks it as incremental, like we discussed earlier, and do this
> as
> > a
> > > compatible change that is needed for the shell command.
> > > >>> >>
> > > >>> >> best,
> > > >>> >> Colin
> > > >>> >>
> > > >>> >>
> > > >>> >> On Thu, May 17, 2018, at 09:32, Colin McCabe wrote:
> > > >>> >>> Hi Viktor,
> > > >>> >>>
> > > >>> >>> Since the KIP freeze is coming up really soon, maybe we should
> > > just drop
> > > >>> >>> the section about changes to AlterConfigs from KIP-248.  We
> don't
> > > really
> > > >>> >>> need it here, since ConfigCommand can use AlterConfigs as-is.
> > > >>> >>>
> > > >>> >>> We can pick up the discussion about improving AlterConfigs in a
> > > future KIP.
> > > >>> >>>
> > > >>> >>> cheers,
> > > >>> >>> Colin
> > > >>> >>>
> > > >>> >>> On Wed, May 16, 2018, at 22:06, Colin McCabe wrote:
> > > >>> >>> > Hi Viktor,
> > > >>> >>> >
> > > >>> >>> > The shell command isn’t that easy to integrate into
> > applications.
> > > >>> >>> > AdminClient will get integrated  into a lot more stuff, which
> > > >>> >>> > increases the potential for conflicts.  I would argue that we
> > > should
> > > >>> >>> > fix this soon.
> > > >>> >>> > If we do want to reduce the scope in this KIP, we could do
> the
> > > merge in
> > > >>> >>> > the ConfigCommand  tool for now, and leave AC unchanged.
> > > >>> >>> > Best,
> > > >>> >>> > Colin
> > > >>> >>> >
> > > >>> >>> >
> > > >>> >>> > On Wed, May 16, 2018, at 04:57, Viktor Somogyi wrote:
> > > >>> >>> > > Hi Colin,
> > > >>> >>> > >
> > > >>> >>> > > > Doing get-merge-set is buggy, though.  If someone else
> does
> > > get-merge-
> > > >>> >>> > > > set at the same time as you, you might overwrite that
> > > person's
> > > >>> >>> > > > changes, or vice versa.  So I really don't think we
> should
> > > try to do
> > > >>> >>> > > > this.  Also, having both an incremental and a full API is
> > > useful,
> > > >>> >>> > > > and it's just a single boolean at the protocol and API
> > > level.>
> > > >>> >>> > > Overwriting somebody's change is currently possible with
> the
> > > >>> >>> > > ConfigCommand, as it will do this get-merge-set behavior on
> > > the client> side, in the command. From this perspective I think it's
> not
> > > much
> > > >>> >>> > > different to do this with the admin client. Also I think
> > > admins don't> modify the quotas/configs of a client/user/topic/broker
> > often
> > > (and
> > > >>> >>> > > multiple admins would do it even more rarely), so I don't
> > > think it is> a big issue. What I think would be useful here but may be
> > out
> > > of scope> is to version the changes similarly to leader epochs. So when
> > an
> > > admin> updates the configs, it will increment a version number and
> won't
> > > let> other admins to push changes in with lower than that. Instead it
> > > would> return an error.
> > > >>> >>> > >
> > > >>> >>> > > I would be also interested what others think about this?
> > > >>> >>> > >
> > > >>> >>> > > Cheers,
> > > >>> >>> > > Viktor
> > > >>> >>> > >
> > > >>> >>> > >
> > > >>> >>> > > On Sat, May 12, 2018 at 2:29 AM, Colin McCabe
> > > >>> >>> > > <cmcc...@apache.org> wrote:> > On Wed, May 9, 2018, at
> > 05:41,
> > > Viktor Somogyi wrote:
> > > >>> >>> > > >> Hi Colin,
> > > >>> >>> > > >>
> > > >>> >>> > > >> > We are going to need to create a new version of
> > > >>> >>> > > >> > AlterConfigsRequest to add the "incremental" boolean.
> > So
> > > while
> > > >>> >>> > > >> > we're doing that, maybe we can change the type to
> > > >>> >>> > > >> > NULLABLE_STRING.> >>
> > > >>> >>> > > >> I was just talking to a colleague yesterday and we came
> to
> > > the
> > > >>> >>> > > >> conclusion that we should keep the boolean flag only on
> > the
> > > client> >> side (as you may have suggested earlier?) and not make part
> of
> > > the> >> protocol as it might lead to a very complicated API on the long
> > > >>> >>> > > >> term.> >> Also we would keep the server side API
> simpler.
> > > Instead of the
> > > >>> >>> > > >> protocol change we could just simply have the boolean
> flag
> > > in
> > > >>> >>> > > >> AlterConfigOptions and the AdminClient should do the
> > > get-merge-set> >> logic which corresponds to the behavior of the
> current
> > > >>> >>> > > >> ConfigCommand.> >> That way we won't need to change the
> > > protocol for now but
> > > >>> >>> > > >> still have> >> both functionality. What do you think?
> > > >>> >>> > > >
> > > >>> >>> > > >  Hi Viktor,
> > > >>> >>> > > >
> > > >>> >>> > > > Doing get-merge-set is buggy, though.  If someone else
> does
> > > get-merge-
> > > >>> >>> > > > set at the same time as you, you might overwrite that
> > > person's
> > > >>> >>> > > > changes, or vice versa.  So I really don't think we
> should
> > > try to do
> > > >>> >>> > > > this.  Also, having both an incremental and a full API is
> > > useful,
> > > >>> >>> > > > and it's just a single boolean at the protocol and API
> > > level.> >
> > > >>> >>> > > >>
> > > >>> >>> > > >> > Hmm.  Not sure I follow.  KIP-133 doesn't use the
> empty
> > > string or
> > > >>> >>> > > >> > "<default>" to indicate defaults, does it?> >>
> > > >>> >>> > > >> No it doesn't. It was just my early idea to indicate
> > > "delete"
> > > >>> >>> > > >> on the> >> protocol level. (We are using <default> for
> > > denoting the default
> > > >>> >>> > > >> client id or user in zookeeper.) Rajini was referring
> that
> > > we
> > > >>> >>> > > >> shouldn't expose this to the protocol level but instead
> > > denote
> > > >>> >>> > > >> delete> >> with an empty string.
> > > >>> >>> > > >>
> > > >>> >>> > > >> > This comes from DescribeConfigsResponse.
> > > >>> >>> > > >> > Unless I'm missing something, I think your suggestion
> to
> > > not
> > > >>> >>> > > >> > expose "<default>" is already implemented?> >>
> > > >>> >>> > > >> In some way, yes. Although this one is used in describe
> > and
> > > not in> >> alter. For alter I don't think we'd need my early
> "<default>"
> > > idea.> >
> > > >>> >>> > > > OK.  Thanks for the explanation.  Using an empty string
> to
> > > indicate
> > > >>> >>> > > > delete, as Rajini suggested, seems pretty reasonable to
> me.
> > > null
> > > >>> >>> > > > would work as well.> >
> > > >>> >>> > > >>
> > > >>> >>> > > >> >> And we use STRING rather than NULLABLE_STRING in
> > describe
> > > >>> >>> > > >> >> configs etc. So we> >> >> should probably do the same
> > > for quotas."
> > > >>> >>> > > >> >
> > > >>> >>> > > >> > I think nearly all responses treat ERROR_MESSAGE as a
> > > nullable
> > > >>> >>> > > >> > string.  CommonFields#ERROR_MESSAGE, which is used by
> > > most of
> > > >>> >>> > > >> > them, is a nullable string.  It's
> > DescribeConfigsResponse
> > > that is
> > > >>> >>> > > >> > the black sheep here.> >> >
> > > >>> >>> > > >> >  >     public static final Field.NullableStr
> > > ERROR_MESSAGE = new
> > > >>> >>> > > >> >  >     Field.NullableStr("error_message", "Response
> > error
> > > >>> >>> > > >> >  >     message");> >>
> > > >>> >>> > > >> Looking at DescribeConfigsResponse (and
> > > AlterConfigsResponse)
> > > >>> >>> > > >> they use> >> nullable_string in the code. KIP-133 states
> > > otherwise though. So in> >> this case it's not a problem luckily.
> > > >>> >>> > > >
> > > >>> >>> > > > Thanks for finding this inconsistency.  I'll change the
> KIP
> > > to
> > > >>> >>> > > > reflect what was actually implemented (nullable string
> for
> > > error).> >
> > > >>> >>> > > > cheers,
> > > >>> >>> > > > Colin
> > > >>> >>> > > >
> > > >>> >>> > > >>
> > > >>> >>> > > >> > What about writing a small script that just handles
> > > setting up
> > > >>> >>> > > >> > SCRAM credentials?  It would probably be easier to
> > > maintain than
> > > >>> >>> > > >> > the old config command.  Otherwise we have to explain
> > > when each
> > > >>> >>> > > >> > tool should be used, which will be confusing to
> users.>
> > >>
> > > >>> >>> > > >> I'd like that, yes :).
> > > >>> >>> > > >>
> > > >>> >>> > > >> Cheers,
> > > >>> >>> > > >> Viktor
> > > >>> >>> > > >>
> > > >>> >>> > > >> On Mon, May 7, 2018 at 6:52 PM, Colin McCabe <
> > > cmcc...@apache.org>
> > > >>> >>> > > >> wrote:> >> > On Fri, May 4, 2018, at 05:49, Viktor
> Somogyi
> > > wrote:
> > > >>> >>> > > >> >> Hi Colin,
> > > >>> >>> > > >> >>
> > > >>> >>> > > >> >> > Rather than breaking compatibility, we should
> simply
> > > add a new
> > > >>> >>> > > >> >> > "incremental" boolean to AlterConfigsOptions.
> > Callers
> > > can set
> > > >>> >>> > > >> >> > this boolean to true when they want the update to
> be
> > > >>> >>> > > >> >> > incremental.  It should default to false so that
> old
> > > code
> > > >>> >>> > > >> >> > continues to work.> >> >>
> > > >>> >>> > > >> >> Agreed, let's do it this way.
> > > >>> >>> > > >> >>
> > > >>> >>> > > >> >> > Hmm.  I don't think AlterOperation is necessary.
> If
> > > the user
> > > >>> >>> > > >> >> > wants to delete a configuration key named "foo",
> they
> > > can
> > > >>> >>> > > >> >> > create a ConfigEntry with name = "foo", value =
> > null.>
> > > >> >>
> > > >>> >>> > > >> >> AlterConfig's config type currently is string, so the
> > > only
> > > >>> >>> > > >> >> possibility> >> >> is to use an empty string as
> > changing
> > > the type to
> > > >>> >>> > > >> >> nullable_string> >> >> could be breaking if the
> client
> > > code doesn't expect -1 as the
> > > >>> >>> > > >> >> string> >> >> size. In the discussion thread earlier
> we
> > > had a conversation
> > > >>> >>> > > >> >> about> >> >> this with Rajini, let me paste it here
> (so
> > > it gives some
> > > >>> >>> > > >> >> context). At> >> >> that point I had the text
> > > "<default>" for this functionality:
> > > >>> >>> > > >> >
> > > >>> >>> > > >> > Hi Viktor,
> > > >>> >>> > > >> >
> > > >>> >>> > > >> > We are going to need to create a new version of
> > > >>> >>> > > >> > AlterConfigsRequest to add the "incremental" boolean.
> > So
> > > while
> > > >>> >>> > > >> > we're doing that, maybe we can change the type to
> > > >>> >>> > > >> > NULLABLE_STRING.> >> >
> > > >>> >>> > > >> >> "4. We use "<default>" internally to store default
> > > quotas and
> > > >>> >>> > > >> >> other> >> >> defaults. But I don't think we should
> > > externalise that string.
> > > >>> >>> > > >> >> We use empty> >> >> string elsewhere for indicating
> > > default, we can do the same
> > > >>> >>> > > >> >> here.> >> >
> > > >>> >>> > > >> > Hmm.  Not sure I follow.  KIP-133 doesn't use the
> empty
> > > string or
> > > >>> >>> > > >> > "<default>" to indicate defaults, does it?> >> >
> > > >>> >>> > > >> > There is a ConfigEntry class:
> > > >>> >>> > > >> >
> > > >>> >>> > > >> >  > @InterfaceStability.Evolving
> > > >>> >>> > > >> >  > public class ConfigEntry {
> > > >>> >>> > > >> >  >
> > > >>> >>> > > >> >  >     private final String name;
> > > >>> >>> > > >> >  >     private final String value;
> > > >>> >>> > > >> >  >     private final ConfigSource source;
> > > >>> >>> > > >> >  >     private final boolean isSensitive;
> > > >>> >>> > > >> >  >     private final boolean isReadOnly;
> > > >>> >>> > > >> >  >     private final List<ConfigSynonym> synonyms;
> > > >>> >>> > > >> >
> > > >>> >>> > > >> > and the ConfigSource enum indicates where the config
> > came
> > > from:
> > > >>> >>> > > >> >
> > > >>> >>> > > >> >  >     /**
> > > >>> >>> > > >> >  >      * Source of configuration entries.
> > > >>> >>> > > >> >  >      */
> > > >>> >>> > > >> >  >     public enum ConfigSource {
> > > >>> >>> > > >> >  >         DYNAMIC_TOPIC_CONFIG,           // dynamic
> > > topic
> > > >>> >>> > > >> >  >         config that is configured for a specific
> > > topic> >> >  >         DYNAMIC_BROKER_CONFIG,          // dynamic
> broker
> > > >>> >>> > > >> >  >         config that is configured for a specific
> > > broker> >> >  >         DYNAMIC_DEFAULT_BROKER_CONFIG,  // dynamic
> broker
> > > >>> >>> > > >> >  >         config that is configured as default for
> all
> > > brokers
> > > >>> >>> > > >> >  >         in the cluster> >> >  >
> > >  STATIC_BROKER_CONFIG,           // static broker
> > > >>> >>> > > >> >  >         config provided as broker properties at
> start
> > > up (e.g.
> > > >>> >>> > > >> >  >         server.properties file)> >> >  >
> > >  DEFAULT_CONFIG,                 // built-in default
> > > >>> >>> > > >> >  >         configuration for configs that have a
> default
> > > value> >> >  >         UNKNOWN                         // source
> unknown
> > > e.g.
> > > >>> >>> > > >> >  >         in the ConfigEntry used for alter requests
> > > where
> > > >>> >>> > > >> >  >         source is not set> >> >  >     }
> > > >>> >>> > > >> >
> > > >>> >>> > > >> > This comes from DescribeConfigsResponse.
> > > >>> >>> > > >> > Unless I'm missing something, I think your suggestion
> to
> > > not
> > > >>> >>> > > >> > expose "<default>" is already implemented?> >> >
> > > >>> >>> > > >> >> And we use STRING rather than NULLABLE_STRING in
> > describe
> > > >>> >>> > > >> >> configs etc. So we> >> >> should probably do the same
> > > for quotas."
> > > >>> >>> > > >> >
> > > >>> >>> > > >> > I think nearly all responses treat ERROR_MESSAGE as a
> > > nullable
> > > >>> >>> > > >> > string.  CommonFields#ERROR_MESSAGE, which is used by
> > > most of
> > > >>> >>> > > >> > them, is a nullable string.  It's
> > DescribeConfigsResponse
> > > that is
> > > >>> >>> > > >> > the black sheep here.> >> >
> > > >>> >>> > > >> >  >     public static final Field.NullableStr
> > > ERROR_MESSAGE = new
> > > >>> >>> > > >> >  >     Field.NullableStr("error_message", "Response
> > error
> > > >>> >>> > > >> >  >     message");> >> >
> > > >>> >>> > > >> >>
> > > >>> >>> > > >> >> > Yeah, this might be an excessive maintenance
> burden.
> > > Maybe we
> > > >>> >>> > > >> >> > should get rid of the old zookeeper-based code, and
> > > just move
> > > >>> >>> > > >> >> > towards having only a KIP-248-based tool.  It's a
> > > breaking
> > > >>> >>> > > >> >> > change, but it's clear to users that it's
> occurring,
> > > and what
> > > >>> >>> > > >> >> > the fix is (specifying --bootstrap-server instead
> of
> > --
> > > >>> >>> > > >> >> > zookeeper).> >> >>
> > > >>> >>> > > >> >> Earlier Rajini raised a concern that direct zookeeper
> > > >>> >>> > > >> >> interaction is> >> >> required to add the SCRAM
> > > credentials which will be used for
> > > >>> >>> > > >> >> validation if inter-broker communication uses this
> auth
> > > method.
> > > >>> >>> > > >> >> This> >> >> is currently done by the ConfigCommand.
> > > Therefore we can't
> > > >>> >>> > > >> >> completely> >> >> get rid of it yet either.
> > > >>> >>> > > >> >>
> > > >>> >>> > > >> >> In my opinion though on a longer term (and this is
> now
> > a
> > > bit
> > > >>> >>> > > >> >> off-topic) Kafka shouldn't use Zookeeper as a
> > > credentials store,
> > > >>> >>> > > >> >> just> >> >> provide an interface, so 3rd party
> > > authentication stores could
> > > >>> >>> > > >> >> be> >> >> implemented. Then similarly to the
> authorizer
> > > we could have
> > > >>> >>> > > >> >> Zookeeper> >> >> as a default though and a client
> that
> > > manages SCRAM credentials
> > > >>> >>> > > >> >> in ZK.> >> >> From this perspective I'd leave the the
> > > command there but put a> >> >> warning that the tool is deprecated and
> > > should only be used for> >> >> setting up SCRAM credentials.
> > > >>> >>> > > >> >> What do you think?
> > > >>> >>> > > >> >
> > > >>> >>> > > >> > What about writing a small script that just handles
> > > setting up
> > > >>> >>> > > >> > SCRAM credentials?  It would probably be easier to
> > > maintain than
> > > >>> >>> > > >> > the old config command.  Otherwise we have to explain
> > > when each
> > > >>> >>> > > >> > tool should be used, which will be confusing to
> users.>
> > > >> >
> > > >>> >>> > > >> > best,
> > > >>> >>> > > >> > Colin
> > > >>> >>> > > >> >
> > > >>> >>> > > >> >>
> > > >>> >>> > > >> >> Cheers,
> > > >>> >>> > > >> >> Viktor
> > > >>> >>> > > >> >>
> > > >>> >>> > > >> >>
> > > >>> >>> > > >> >> On Thu, May 3, 2018 at 7:47 PM, Colin McCabe
> > > >>> >>> > > >> >> <cmcc...@apache.org> wrote:> >> >> > On Thu, May 3,
> > > 2018, at 05:11, Viktor Somogyi wrote:
> > > >>> >>> > > >> >> >> @Magnus, yes that is correct. Thanks for your
> > > feedback.
> > > >>> >>> > > >> >> >> Updated it with> >> >> >> this (which might be
> > > subject to change based on the
> > > >>> >>> > > >> >> >> conversation with> >> >> >> Colin): "The changes
> > done
> > > will be incremental in version 1,
> > > >>> >>> > > >> >> >> opposed to the> >> >> >> atomic behavior in
> version
> > > 0. For instance in version 0
> > > >>> >>> > > >> >> >> sending an update> >> >> >> for producer_byte_rate
> > > for userA would result in removing all
> > > >>> >>> > > >> >> >> previous data> >> >> >> and setting userA's config
> > > with producer_byte_rate. Now in
> > > >>> >>> > > >> >> >> version 1> >> >> >> opposed to version 0 it will
> add
> > > an extra config and keeps
> > > >>> >>> > > >> >> >> other existing> >> >> >> configs."
> > > >>> >>> > > >> >> >
> > > >>> >>> > > >> >> > Hi Viktor,
> > > >>> >>> > > >> >> >
> > > >>> >>> > > >> >> > AdminClient#alterConfigs is a public API which
> users
> > > have
> > > >>> >>> > > >> >> > already written code against.  If we silently
> change
> > > what it
> > > >>> >>> > > >> >> > does to be incremental addition rather than
> complete
> > > >>> >>> > > >> >> > replacement of the existing configuration, we will
> > > break all
> > > >>> >>> > > >> >> > of that existing code.  If we do that, there is not
> > > even any
> > > >>> >>> > > >> >> > way that users can write code to support both
> broker
> > > versions.
> > > >>> >>> > > >> >> > AdminClient does not expose any API that users can
> > use
> > > to
> > > >>> >>> > > >> >> > check broker version.  I think that would be really
> > > bad for
> > > >>> >>> > > >> >> > users.> >> >> >
> > > >>> >>> > > >> >> > Rather than breaking compatibility, we should
> simply
> > > add a new
> > > >>> >>> > > >> >> > "incremental" boolean to AlterConfigsOptions.
> > Callers
> > > can set
> > > >>> >>> > > >> >> > this boolean to true when they want the update to
> be
> > > >>> >>> > > >> >> > incremental.  It should default to false so that
> old
> > > code
> > > >>> >>> > > >> >> > continues to work.> >> >> >
> > > >>> >>> > > >> >> >>
> > > >>> >>> > > >> >> >> @Colin,
> > > >>> >>> > > >> >> >> yes, I have/had a hard time finding a place for
> this
> > > >>> >>> > > >> >> >> operation. I think ADD> >> >> >> and DELETE should
> > be
> > > on config level to allow complex use
> > > >>> >>> > > >> >> >> cases (if someone> >> >> >> builds their own tool
> > > based on the AdminClient), so users can
> > > >>> >>> > > >> >> >> add and> >> >> >> delete multiple configs in one
> > > request.
> > > >>> >>> > > >> >> >
> > > >>> >>> > > >> >> > Hmm.  I don't think AlterOperation is necessary.
> If
> > > the user
> > > >>> >>> > > >> >> > wants to delete a configuration key named "foo",
> they
> > > can
> > > >>> >>> > > >> >> > create a ConfigEntry with name = "foo", value =
> > null.>
> > > >> >> >
> > > >>> >>> > > >> >> >> But also at the same time, SET is as you're
> > > suggesting really
> > > >>> >>> > > >> >> >> seems like a> >> >> >> flag that tells the
> > > AdminClient/AdminManager how they should
> > > >>> >>> > > >> >> >> behave.> >> >> >> However since the AdminClient
> > > matches protocol version with
> > > >>> >>> > > >> >> >> the broker via> >> >> >> the API_VERSIONS
> request, I
> > > think it would be enough to
> > > >>> >>> > > >> >> >> modify the> >> >> >> AdminManager that it should
> > > behave differently in case of an
> > > >>> >>> > > >> >> >> increased> >> >> >> protocol versions, if there is
> > > this extra flag set through
> > > >>> >>> > > >> >> >> AlterConfigOptions (AdminClient sets the flag on
> the
> > > >>> >>> > > >> >> >> protocol, which will> >> >> >> be reflected after
> > > parsing in AdminManager). Also if we
> > > >>> >>> > > >> >> >> target this change> >> >> >> to 2.0 (June?), then
> we
> > > might not need the extra flag but
> > > >>> >>> > > >> >> >> make the behavior> >> >> >> break. What do you
> > think?
> > > >>> >>> > > >> >> >
> > > >>> >>> > > >> >> > Right.  I think a flag in AlterConfigsRequest makes
> > > sense.
> > > >>> >>> > > >> >> > AdminClient can set it based on a boolean field in
> > > >>> >>> > > >> >> > AlterConfigsOptions.> >> >> >
> > > >>> >>> > > >> >> >>
> > > >>> >>> > > >> >> >> Keeping the --zookeeper option working is not
> > > infeasible of
> > > >>> >>> > > >> >> >> course - and as> >> >> >> per the community's
> > > feedback it may be the better option.
> > > >>> >>> > > >> >> >> Although one of> >> >> >> the goals is to put this
> > > new ConfigCommand to the tools
> > > >>> >>> > > >> >> >> module, which> >> >> >> doesn't have the
> dependency
> > > on the server code, it would be a
> > > >>> >>> > > >> >> >> bit harder.> >> >> >> Most likely I'd need to call
> > > into the Scala code with
> > > >>> >>> > > >> >> >> reflection, which> >> >> >> could be quite
> > > complicated.
> > > >>> >>> > > >> >> >
> > > >>> >>> > > >> >> > Yeah, this might be an excessive maintenance
> burden.
> > > Maybe we
> > > >>> >>> > > >> >> > should get rid of the old zookeeper-based code, and
> > > just move
> > > >>> >>> > > >> >> > towards having only a KIP-248-based tool.  It's a
> > > breaking
> > > >>> >>> > > >> >> > change, but it's clear to users that it's
> occurring,
> > > and what
> > > >>> >>> > > >> >> > the fix is (specifying --bootstrap-server instead
> of
> > --
> > > >>> >>> > > >> >> > zookeeper).> >> >> >
> > > >>> >>> > > >> >> > best,
> > > >>> >>> > > >> >> > Colin
> > > >>> >>> > > >> >> >
> > > >>> >>> > > >> >> >>
> > > >>> >>> > > >> >> >> Also rewrote the request semantics, hopefully it's
> > > more clear
> > > >>> >>> > > >> >> >> now.> >> >> >>
> > > >>> >>> > > >> >> >> Let me know what do you think about this and thank
> > > you for
> > > >>> >>> > > >> >> >> your feedback.> >> >> >>
> > > >>> >>> > > >> >> >> Cheers,
> > > >>> >>> > > >> >> >> Viktor
> > > >>> >>> > > >> >> >>
> > > >>> >>> > > >> >> >> On Thu, Apr 26, 2018 at 7:06 PM, Colin McCabe
> > > >>> >>> > > >> >> >> <cmcc...@apache.org> wrote:> >> >> >>
> > > >>> >>> > > >> >> >> > Hi Viktor,
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> > If I'm reading the KIP right, it looks like the
> > new
> > > >>> >>> > > >> >> >> > proposed verison of> >> >> >> > AlterConfigs
> sets
> > > an OperationType on a per-config basis:
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> >  > AlterConfigs Request (Version: 1) =>
> > [resources]
> > > >>> >>> > > >> >> >> >  > validate_only> >> >> >> >  >   validate_only
> =>
> > > BOOLEAN
> > > >>> >>> > > >> >> >> >  >   resources => resource_type resource_name
> > > [configs]
> > > >>> >>> > > >> >> >> >  >     resource_type => INT8
> > > >>> >>> > > >> >> >> >  >     resource_name => STRING
> > > >>> >>> > > >> >> >> >  >     configs => config_name config_value
> > > config_operation> >> >> >> >  >       config_name => STRING
> > > >>> >>> > > >> >> >> >  >       config_value => STRING
> > > >>> >>> > > >> >> >> >  >       config_operation => INT8 [NEW ADDITION]
> > > >>> >>> > > >> >> >> >  >
> > > >>> >>> > > >> >> >> >  > Request Semantics:
> > > >>> >>> > > >> >> >> >  >
> > > >>> >>> > > >> >> >> >  >      By default in the broker we parse an
> > > >>> >>> > > >> >> >> >  >      AlterConfigRequest version 0> >> >> >> >
> > >
> > > with Unknown operation and handle it with the currently
> > > >>> >>> > > >> >> >> >  > existing> >> >> >> > behavior.
> > > >>> >>> > > >> >> >> >  > Version 1 requests however must have the
> > > operation set
> > > >>> >>> > > >> >> >> >  > to other than> >> >> >> >  > Unknown,
> otherwise
> > > an InvalidRequestException will be
> > > >>> >>> > > >> >> >> >  > thrown.> >> >> >> >  >          Set operation
> > > also does Add if needed to be
> > > >>> >>> > > >> >> >> >  >          backward> >> >> >> > compatible
> > > >>> >>> > > >> >> >> >  > with the existing ConfigCommand semantics.
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> > However, this seems like a configuration that
> > > should be
> > > >>> >>> > > >> >> >> > global to the> >> >> >> > whole AlterConfigs
> > > request, right?  It doesn't make sense
> > > >>> >>> > > >> >> >> > to have one> >> >> >> > configuration key use
> > > AlterOperation.Set and the other use> >> >> >> > AlterOperation.Add --
> > the
> > > Set one specifies that we should
> > > >>> >>> > > >> >> >> > overwrite the> >> >> >> > whole node in ZK.
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> > Another consideration here is that we should do
> > > this in a
> > > >>> >>> > > >> >> >> > compatible> >> >> >> > fashion in AdminClient.
> > > Existing code that relies on the
> > > >>> >>> > > >> >> >> > "set everything"> >> >> >> > behavior should not
> > > break.  The best way to do this is to
> > > >>> >>> > > >> >> >> > add a boolean to> >> >> >> >
> > > ./clients/src/main/java/org/apache/kafka/clients/admin/Alt-
> > > >>> >>> > > >> >> >> > erConfigsOptions.java> >> >> >> > , specifying
> > > whether we want to clear everything that
> > > >>> >>> > > >> >> >> > hasn't been> >> >> >> > specified, or not.  This
> > > should default to true so that
> > > >>> >>> > > >> >> >> > existing code can> >> >> >> > continue to
> work....
> > > Unless we believe that the existing
> > > >>> >>> > > >> >> >> > AlterConfigs> >> >> >> > behavior is so broken
> > that
> > > it should be changed, even in a> >> >> >> > compatibility-breaking way.
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> > Similarly, for other tools, we managed to
> support
> > > both the
> > > >>> >>> > > >> >> >> > zookeeper-based> >> >> >> > way and the new way
> in
> > > the same tool for a while.  This
> > > >>> >>> > > >> >> >> > seems like> >> >> >> > something users would
> > really
> > > want-- is it truly infeasible
> > > >>> >>> > > >> >> >> > to do here?  The> >> >> >> > Java code could
> call
> > > into the Scala code as necessary when
> > > >>> >>> > > >> >> >> > the zk flag was> >> >> >> > specified, right?
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> > best,
> > > >>> >>> > > >> >> >> > Colin
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> >
> > > >>> >>> > > >> >> >> > On Thu, Apr 26, 2018, at 01:47, Magnus Edenhill
> > > wrote:
> > > >>> >>> > > >> >> >> > > Hi Viktor,
> > > >>> >>> > > >> >> >> > >
> > > >>> >>> > > >> >> >> > > after speaking to Rajini it seems like this
> KIP
> > > will
> > > >>> >>> > > >> >> >> > > allow clients to> >> >> >> > > perform
> > > incremental configuration updates with
> > > >>> >>> > > >> >> >> > > AlterConfigs, only> >> >> >> > providing
> > > >>> >>> > > >> >> >> > > the settings
> > > >>> >>> > > >> >> >> > > that it wants to change, as opposed to the
> > > current atomic
> > > >>> >>> > > >> >> >> > > behaviour where> >> >> >> > > all settings
> > > >>> >>> > > >> >> >> > > need to be provided to avoid having them
> revert
> > > to their
> > > >>> >>> > > >> >> >> > > default values.> >> >> >> > >
> > > >>> >>> > > >> >> >> > > If this is indeed the case, could you update
> the
> > > KIP to
> > > >>> >>> > > >> >> >> > > make this more> >> >> >> > > clear?
> > > >>> >>> > > >> >> >> > > I.e., that using Version 1 of AlterConfigs has
> > the
> > > >>> >>> > > >> >> >> > >     incremental behaviour,> >> >> >> > > while
> > > >>> >>> > > >> >> >> > > version 0 is atomic.
> > > >>> >>> > > >> >> >> > >
> > > >>> >>> > > >> >> >> > > Thanks,
> > > >>> >>> > > >> >> >> > > Magnus
> > > >>> >>> > > >> >> >> > >
> > > >>> >>> > > >> >> >> > >
> > > >>> >>> > > >> >> >> > >
> > > >>> >>> > > >> >> >> > >
> > > >>> >>> > > >> >> >> > > 2018-04-16 13:27 GMT+02:00 Viktor Somogyi
> > > >>> >>> > > >> >> >> > > <viktorsomo...@gmail.com>:> >> >> >> > >
> > > >>> >>> > > >> >> >> > > > Hi Rajini,
> > > >>> >>> > > >> >> >> > > >
> > > >>> >>> > > >> >> >> > > > The current ConfigCommand would still be
> > > possible to
> > > >>> >>> > > >> >> >> > > > use, therefore> >> >> >> > those
> > > >>> >>> > > >> >> >> > > > who wish to set up SCRAM or initial quotas
> > > would be
> > > >>> >>> > > >> >> >> > > > able to continue> >> >> >> > doing
> > > >>> >>> > > >> >> >> > > > it through kafka-run-class.sh.
> > > >>> >>> > > >> >> >> > > > In an ideal world I'd keep it in the current
> > > >>> >>> > > >> >> >> > > > ConfigCommand command so> >> >> >> > we
> > > >>> >>> > > >> >> >> > > > wouldn't mix the zookeeper and admin client
> > > configs.
> > > >>> >>> > > >> >> >> > > > Perhaps I could> >> >> >> > create
> > > >>> >>> > > >> >> >> > > > a kafka-configs-zookeeper.sh shell script
> for
> > > >>> >>> > > >> >> >> > > > shortening the> >> >> >> > > >
> kafka-run-class
> > > command.
> > > >>> >>> > > >> >> >> > > > What do you and others think?
> > > >>> >>> > > >> >> >> > > >
> > > >>> >>> > > >> >> >> > > > Thanks,
> > > >>> >>> > > >> >> >> > > > Viktor
> > > >>> >>> > > >> >> >> > > >
> > > >>> >>> > > >> >> >> > > >
> > > >>> >>> > > >> >> >> > > >
> > > >>> >>> > > >> >> >> > > > On Mon, Apr 16, 2018 at 10:15 AM, Rajini
> > > Sivaram <
> > > >>> >>> > > >> >> >> > rajinisiva...@gmail.com>
> > > >>> >>> > > >> >> >> > > > wrote:
> > > >>> >>> > > >> >> >> > > >
> > > >>> >>> > > >> >> >> > > > > Hi Viktor,
> > > >>> >>> > > >> >> >> > > > >
> > > >>> >>> > > >> >> >> > > > > The KIP proposes to remove the ability to
> > > configure
> > > >>> >>> > > >> >> >> > > > > using ZooKeeper.> >> >> >> > This
> > > >>> >>> > > >> >> >> > > > > means we will no longer have the ability
> to
> > > start up
> > > >>> >>> > > >> >> >> > > > > a cluster with> >> >> >> > SCRAM
> > > >>> >>> > > >> >> >> > > > > credentials since we first need to create
> > > SCRAM
> > > >>> >>> > > >> >> >> > > > > credentials before> >> >> >> > > > brokers
> > > >>> >>> > > >> >> >> > > > > can start if the broker uses SCRAM for
> > > inter-broker
> > > >>> >>> > > >> >> >> > > > > communication> >> >> >> > and we
> > > >>> >>> > > >> >> >> > > > > need SCRAM credentials for the AdminClient
> > > before we
> > > >>> >>> > > >> >> >> > > > > can create new> >> >> >> > ones.
> > > >>> >>> > > >> >> >> > > > > For quotas as well, we will no longer be
> > able
> > > to
> > > >>> >>> > > >> >> >> > > > > configure quotas> >> >> >> > until
> > > >>> >>> > > >> >> >> > > > at
> > > >>> >>> > > >> >> >> > > > > least one broker has been started.
> Perhaps,
> > > we ought
> > > >>> >>> > > >> >> >> > > > > to retain the> >> >> >> > > > ability
> > > >>> >>> > > >> >> >> > > > > to configure using ZooKeeper for these
> > > initialization
> > > >>> >>> > > >> >> >> > > > > scenarios and> >> >> >> > > > support
> > > >>> >>> > > >> >> >> > > > > only AdminClient for dynamic updates?
> > > >>> >>> > > >> >> >> > > > >
> > > >>> >>> > > >> >> >> > > > > What do others think?
> > > >>> >>> > > >> >> >> > > > >
> > > >>> >>> > > >> >> >> > > > > Regards,
> > > >>> >>> > > >> >> >> > > > >
> > > >>> >>> > > >> >> >> > > > > Rajini
> > > >>> >>> > > >> >> >> > > > >
> > > >>> >>> > > >> >> >> > > > > On Sun, Apr 15, 2018 at 10:28 AM, Ted Yu
> > > >>> >>> > > >> >> >> > > > > <yuzhih...@gmail.com>> >> >> >> > wrote:
> > > >>> >>> > > >> >> >> > > > >
> > > >>> >>> > > >> >> >> > > > > > +1
> > > >>> >>> > > >> >> >> > > > > > -------- Original message --------From:
> > > zhenya Sun
> > > >>> >>> > > >> >> >> > > > > > <> >> >> >> > toke...@126.com>
> > > >>> >>> > > >> >> >> > > > > > Date: 4/15/18  12:42 AM  (GMT-08:00) To:
> > dev
> > > >>> >>> > > >> >> >> > > > > > <dev@kafka.apache.org> >> >> >> > >
> > > >>> >>> > > >> >> >> > > > Cc:
> > > >>> >>> > > >> >> >> > > > > > dev <dev@kafka.apache.org> Subject: Re:
> > > [VOTE] #2
> > > >>> >>> > > >> >> >> > > > > > KIP-248: Create> >> >> >> > New
> > > >>> >>> > > >> >> >> > > > > > ConfigCommand That Uses The New
> > AdminClient
> > > >>> >>> > > >> >> >> > > > > > non-binding +1
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > > from my iphone!
> > > >>> >>> > > >> >> >> > > > > > On 04/15/2018 15:41, Attila Sasvári
> wrote:
> > > >>> >>> > > >> >> >> > > > > > Thanks for updating the KIP.
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > > +1 (non-binding)
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > > Viktor Somogyi <viktorsomo...@gmail.com
> >
> > > ezt írta
> > > >>> >>> > > >> >> >> > > > > > (időpont: 2018.> >> >> >> > ápr.
> > > >>> >>> > > >> >> >> > > > > 9.,
> > > >>> >>> > > >> >> >> > > > > > H 16:49):
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > > > > Hi Magnus,
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > Thanks for the heads up, added the
> > > endianness to
> > > >>> >>> > > >> >> >> > > > > > > the KIP. Here> >> >> >> > is the
> > > >>> >>> > > >> >> >> > > > > > > current text:
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > "Double
> > > >>> >>> > > >> >> >> > > > > > > A new type needs to be added to
> transfer
> > > quota
> > > >>> >>> > > >> >> >> > > > > > > values. Since the> >> >> >> > > > >
> > > protocol
> > > >>> >>> > > >> >> >> > > > > > > classes in Kafka already uses
> > ByteBuffers
> > > it is
> > > >>> >>> > > >> >> >> > > > > > > logical to use> >> >> >> > their
> > > >>> >>> > > >> >> >> > > > > > > functionality for serializing doubles.
> > The
> > > >>> >>> > > >> >> >> > > > > > > serialization is> >> >> >> > > >
> > > basically a
> > > >>> >>> > > >> >> >> > > > > > > representation of the specified
> > > floating-point
> > > >>> >>> > > >> >> >> > > > > > > value according> >> >> >> > to the
> > > >>> >>> > > >> >> >> > > > > > IEEE
> > > >>> >>> > > >> >> >> > > > > > > 754 floating-point "double format" bit
> > > layout.
> > > >>> >>> > > >> >> >> > > > > > > The ByteBuffer> >> >> >> > > > >
> > > serializer
> > > >>> >>> > > >> >> >> > > > > > > writes eight bytes containing the
> given
> > > double
> > > >>> >>> > > >> >> >> > > > > > > value, in Big> >> >> >> > Endian
> > > >>> >>> > > >> >> >> > > > > byte
> > > >>> >>> > > >> >> >> > > > > > > order, into this buffer at the current
> > > position,
> > > >>> >>> > > >> >> >> > > > > > > and then> >> >> >> > increments
> > > >>> >>> > > >> >> >> > > > > the
> > > >>> >>> > > >> >> >> > > > > > > position by eight.
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > The implementation will be defined in
> > > >>> >>> > > >> >> >> > > > > > > org.apache.kafka.common.
> protocol.types
> > > with the
> > > >>> >>> > > >> >> >> > > > > > > other protocol> >> >> >> > types
> > > >>> >>> > > >> >> >> > > > > > and it
> > > >>> >>> > > >> >> >> > > > > > > will have no default value much like
> the
> > > other
> > > >>> >>> > > >> >> >> > > > > > > types available> >> >> >> > in the
> > > >>> >>> > > >> >> >> > > > > > > protocol."
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > Also, I haven't changed the protocol
> > docs
> > > yet but
> > > >>> >>> > > >> >> >> > > > > > > will do so in> >> >> >> > my PR
> > > >>> >>> > > >> >> >> > > > > for
> > > >>> >>> > > >> >> >> > > > > > > this feature.
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > Let me know if you'd still add
> > something.
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > Regards,
> > > >>> >>> > > >> >> >> > > > > > > Viktor
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > On Mon, Apr 9, 2018 at 3:32 PM, Magnus
> > > Edenhill <> >> >> >> > mag...@edenhill.se>
> > > >>> >>> > > >> >> >> > > > > > > wrote:
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > Hi Viktor,
> > > >>> >>> > > >> >> >> > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > since serialization of floats isn't
> as
> > > straight
> > > >>> >>> > > >> >> >> > > > > > > > forward as> >> >> >> > > > integers,
> > > >>> >>> > > >> >> >> > > > > > > please
> > > >>> >>> > > >> >> >> > > > > > > > specify the exact serialization
> format
> > > of
> > > >>> >>> > > >> >> >> > > > > > > > DOUBLE in the> >> >> >> > protocol
> > > >>> >>> > > >> >> >> > > > docs
> > > >>> >>> > > >> >> >> > > > > > > > (e.g., IEEE 754),
> > > >>> >>> > > >> >> >> > > > > > > > including endianness (big-endian
> > > please).
> > > >>> >>> > > >> >> >> > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > This will help the non-java client
> > > ecosystem.
> > > >>> >>> > > >> >> >> > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > Thanks,
> > > >>> >>> > > >> >> >> > > > > > > > Magnus
> > > >>> >>> > > >> >> >> > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > 2018-04-09 15:16 GMT+02:00 Viktor
> > > Somogyi <
> > > >>> >>> > > >> >> >> > viktorsomo...@gmail.com
> > > >>> >>> > > >> >> >> > > > >:
> > > >>> >>> > > >> >> >> > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > Hi Attila,
> > > >>> >>> > > >> >> >> > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > 1. It uses ByteBuffers, which in
> > turn
> > > will
> > > >>> >>> > > >> >> >> > > > > > > > >    use> >> >> >> > > > > >
> > > Double.doubleToLongBits
> > > >>> >>> > > >> >> >> > > > > > > to
> > > >>> >>> > > >> >> >> > > > > > > > > convert the double value to a long
> > > and that
> > > >>> >>> > > >> >> >> > > > > > > > > long will be> >> >> >> > written
> > > >>> >>> > > >> >> >> > > > in
> > > >>> >>> > > >> >> >> > > > > > the
> > > >>> >>> > > >> >> >> > > > > > > > > buffer. I'v updated the KIP with
> > this.
> > > >>> >>> > > >> >> >> > > > > > > > > 2. Good idea, modified it.
> > > >>> >>> > > >> >> >> > > > > > > > > 3. During the discussion I
> remember
> > > we didn't
> > > >>> >>> > > >> >> >> > > > > > > > >    really decide> >> >> >> > which
> > > >>> >>> > > >> >> >> > > > > one
> > > >>> >>> > > >> >> >> > > > > > > > would
> > > >>> >>> > > >> >> >> > > > > > > > > be the better one but I agree
> that a
> > > wrapper
> > > >>> >>> > > >> >> >> > > > > > > > > class that makes> >> >> >> > > >
> > sure
> > > >>> >>> > > >> >> >> > > > > > the
> > > >>> >>> > > >> >> >> > > > > > > > list
> > > >>> >>> > > >> >> >> > > > > > > > > that is used as a key is immutable
> > is
> > > a good
> > > >>> >>> > > >> >> >> > > > > > > > > idea and would> >> >> >> > ease
> > > >>> >>> > > >> >> >> > > > > the
> > > >>> >>> > > >> >> >> > > > > > > life
> > > >>> >>> > > >> >> >> > > > > > > > > of people using the interface.
> Also
> > > more
> > > >>> >>> > > >> >> >> > > > > > > > > importantly would> >> >> >> > make
> > > >>> >>> > > >> >> >> > > > > sure
> > > >>> >>> > > >> >> >> > > > > > > that
> > > >>> >>> > > >> >> >> > > > > > > > > we always use the same hashCode. I
> > > have
> > > >>> >>> > > >> >> >> > > > > > > > > created wrapper> >> >> >> >
> classes
> > > >>> >>> > > >> >> >> > > > for
> > > >>> >>> > > >> >> >> > > > > > the
> > > >>> >>> > > >> >> >> > > > > > > > map
> > > >>> >>> > > >> >> >> > > > > > > > > value as well but that was
> reverted
> > > to keep
> > > >>> >>> > > >> >> >> > > > > > > > > things> >> >> >> > consistent.
> > > >>> >>> > > >> >> >> > > > > > Although
> > > >>> >>> > > >> >> >> > > > > > > > for
> > > >>> >>> > > >> >> >> > > > > > > > > the key I think we wouldn't break
> > > >>> >>> > > >> >> >> > > > > > > > > consistency. I updated the> >> >>
> >>
> > > > KIP.
> > > >>> >>> > > >> >> >> > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > Thanks,
> > > >>> >>> > > >> >> >> > > > > > > > > Viktor
> > > >>> >>> > > >> >> >> > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > On Tue, Apr 3, 2018 at 1:27 PM,
> > Attila
> > > >>> >>> > > >> >> >> > > > > > > > > Sasvári <> >> >> >> > > > >
> > > asasv...@apache.org>
> > > >>> >>> > > >> >> >> > > > > > > > > wrote:
> > > >>> >>> > > >> >> >> > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > Thanks for working on it Viktor.
> > > >>> >>> > > >> >> >> > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > It looks good to me, but I have
> > some
> > > >>> >>> > > >> >> >> > > > > > > > > > questions:> >> >> >> > > > > >
> > >
> > > > > - I see a new type DOUBLE is used for
> > > >>> >>> > > >> >> >> > > > > > > > > >   quota_value , and it> >> >>
> >> >
> > > is
> > > >>> >>> > > >> >> >> > > > not
> > > >>> >>> > > >> >> >> > > > > > > > listed
> > > >>> >>> > > >> >> >> > > > > > > > > > among the primitive types on the
> > > Kafka
> > > >>> >>> > > >> >> >> > > > > > > > > > protocol guide. Can> >> >> >> >
> > you
> > > >>> >>> > > >> >> >> > > > > add
> > > >>> >>> > > >> >> >> > > > > > > some
> > > >>> >>> > > >> >> >> > > > > > > > > > more details?
> > > >>> >>> > > >> >> >> > > > > > > > > > - I am not sure that using an
> > > environment
> > > >>> >>> > > >> >> >> > > > > > > > > >   (i.e.> >> >> >> > > > > > > >
> > > USE_OLD_COMMAND)variable
> > > >>> >>> > > >> >> >> > > > > > > > > is
> > > >>> >>> > > >> >> >> > > > > > > > > > the best way to control
> behaviour
> > > of kafka-
> > > >>> >>> > > >> >> >> > > > > > > > > > config.sh . In> >> >> >> > other
> > > >>> >>> > > >> >> >> > > > > > > scripts
> > > >>> >>> > > >> >> >> > > > > > > > > > (e.g. console-consumer) an
> > argument
> > > is
> > > >>> >>> > > >> >> >> > > > > > > > > > passed (e.g.> >> >> >> > > > > >
> > > --new-consumer).
> > > >>> >>> > > >> >> >> > > > > > > If
> > > >>> >>> > > >> >> >> > > > > > > > > we
> > > >>> >>> > > >> >> >> > > > > > > > > > still want to use it, then I
> would
> > > suggest
> > > >>> >>> > > >> >> >> > > > > > > > > > something like> >> >> >> > > >
> > >
> > > > > > > USE_OLD_KAFKA_CONFIG_COMMAND. What do you
> > > >>> >>> > > >> >> >> > > > > > > > > > think?> >> >> >> > > > > > > >
> > >
> > > - I have seen maps like
> > > >>> >>> > > >> >> >> > > > > > > > > >   Map<List<ConfigResource>,> >>
> >>
> > > >> > > > > > > > Collection<QuotaType>>.
> > > >>> >>> > > >> >> >> > > > > > > > > > If List<ConfigResource> is the
> key
> > > type,
> > > >>> >>> > > >> >> >> > > > > > > > > > you should make> >> >> >> > sure
> > > >>> >>> > > >> >> >> > > > > that
> > > >>> >>> > > >> >> >> > > > > > > this
> > > >>> >>> > > >> >> >> > > > > > > > > > List is immutable. Have you
> > > considered to
> > > >>> >>> > > >> >> >> > > > > > > > > > introduce a new> >> >> >> > > >
> > > wrapper
> > > >>> >>> > > >> >> >> > > > > > > > class?
> > > >>> >>> > > >> >> >> > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > Regards,
> > > >>> >>> > > >> >> >> > > > > > > > > > - Attila
> > > >>> >>> > > >> >> >> > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > On Thu, Mar 29, 2018 at 1:46 PM,
> > > zhenya Sun
> > > >>> >>> > > >> >> >> > > > > > > > > > <> >> >> >> > toke...@126.com>
> > > >>> >>> > > >> >> >> > > > > > wrote:
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > +1 (non-binding)
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > | |
> > > >>> >>> > > >> >> >> > > > > > > > > > > zhenya Sun
> > > >>> >>> > > >> >> >> > > > > > > > > > > 邮箱:toke...@126.com
> > > >>> >>> > > >> >> >> > > > > > > > > > > |
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > 签名由 网易邮箱大师 定制
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > On 03/29/2018 19:40, Sandor
> > > Murakozi
> > > >>> >>> > > >> >> >> > > > > > > > > > > wrote:> >> >> >> > > > > > >
> > >
> > > > > +1 (non-binding)
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > Thanks for the KIP, Viktor
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > On Wed, Mar 21, 2018 at 5:41
> PM,
> > > Viktor
> > > >>> >>> > > >> >> >> > > > > > > > > > > Somogyi <> >> >> >> > > > > >
> >
> > >
> > > > viktorsomo...@gmail.com
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > wrote:
> > > >>> >>> > > >> >> >> > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > > Hi Everyone,
> > > >>> >>> > > >> >> >> > > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > > I've started a vote on
> KIP-248
> > > >>> >>> > > >> >> >> > > > > > > > > > > > <
> > https://cwiki.apache.org/conf
> > > >>> >>> > > >> >> >> > luence/display/KAFKA/KIP-
> > > >>> >>> > > >> >> >> > > > > > > > > > 248+-+Create+New+
> > > >>> >>> > > >> >> >> > > > > > > > > > > > ConfigCommand+That+Uses+The+
> > > New+AdminC-
> > > >>> >>> > > >> >> >> > > > > > > > > > > > lient#KIP-248-> >> >> >> >
> > >
> > > > > > > > > > > CreateNewConfigCommandThatUsesTheNewAd-
> > > >>> >>> > > >> >> >> > > > > > > > > > > > minClient-> >> >> >> > > >
> > >
> > > DescribeQuotas>
> > > >>> >>> > > >> >> >> > > > > > > > > > > > a few weeks ago but at the
> > time
> > > I got a
> > > >>> >>> > > >> >> >> > > > > > > > > > > > couple more> >> >> >> > > >
> > > comments
> > > >>> >>> > > >> >> >> > > > > > and
> > > >>> >>> > > >> >> >> > > > > > > it
> > > >>> >>> > > >> >> >> > > > > > > > > was
> > > >>> >>> > > >> >> >> > > > > > > > > > > > very close to 1.1 feature
> > > freeze,
> > > >>> >>> > > >> >> >> > > > > > > > > > > > people were occupied> >> >>
> >>
> > > > with
> > > >>> >>> > > >> >> >> > > > > > that,
> > > >>> >>> > > >> >> >> > > > > > > > so
> > > >>> >>> > > >> >> >> > > > > > > > > I
> > > >>> >>> > > >> >> >> > > > > > > > > > > > wanted to restart the vote
> on
> > > this.
> > > >>> >>> > > >> >> >> > > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > > *Summary of the KIP*
> > > >>> >>> > > >> >> >> > > > > > > > > > > > For those who don't have
> > > context I
> > > >>> >>> > > >> >> >> > > > > > > > > > > > thought I'd> >> >> >> >
> > > summarize it
> > > >>> >>> > > >> >> >> > > > > in
> > > >>> >>> > > >> >> >> > > > > > a
> > > >>> >>> > > >> >> >> > > > > > > > few
> > > >>> >>> > > >> >> >> > > > > > > > > > > > sentence.
> > > >>> >>> > > >> >> >> > > > > > > > > > > > *Problem & Motivation: *The
> > > basic
> > > >>> >>> > > >> >> >> > > > > > > > > > > > problem that the KIP> >> >>
> >>
> > > > > > tries
> > > >>> >>> > > >> >> >> > > > > to
> > > >>> >>> > > >> >> >> > > > > > > > solve
> > > >>> >>> > > >> >> >> > > > > > > > > > is
> > > >>> >>> > > >> >> >> > > > > > > > > > > > that kafka-configs.sh (which
> > in
> > > turn
> > > >>> >>> > > >> >> >> > > > > > > > > > > > uses the> >> >> >> >
> > > ConfigCommand
> > > >>> >>> > > >> >> >> > > > > > > class)
> > > >>> >>> > > >> >> >> > > > > > > > > uses
> > > >>> >>> > > >> >> >> > > > > > > > > > a
> > > >>> >>> > > >> >> >> > > > > > > > > > > > direct zookeeper connection.
> > > This is
> > > >>> >>> > > >> >> >> > > > > > > > > > > > not desirable as> >> >> >>
> > >
> > > > getting
> > > >>> >>> > > >> >> >> > > > > > > > around
> > > >>> >>> > > >> >> >> > > > > > > > > > the
> > > >>> >>> > > >> >> >> > > > > > > > > > > > broker opens up security
> > issues
> > > and
> > > >>> >>> > > >> >> >> > > > > > > > > > > > prevents the tool> >> >> >>
> >
> > > from
> > > >>> >>> > > >> >> >> > > > > > being
> > > >>> >>> > > >> >> >> > > > > > > > used
> > > >>> >>> > > >> >> >> > > > > > > > > > in
> > > >>> >>> > > >> >> >> > > > > > > > > > > > deployments where only the
> > > brokers are
> > > >>> >>> > > >> >> >> > > > > > > > > > > > exposed to> >> >> >> >
> > clients.
> > > >>> >>> > > >> >> >> > > > > > Also a
> > > >>> >>> > > >> >> >> > > > > > > > > > somewhat
> > > >>> >>> > > >> >> >> > > > > > > > > > > > smaller motivation is to
> > > rewrite the
> > > >>> >>> > > >> >> >> > > > > > > > > > > > tool in java as> >> >> >> >
> > part
> > > >>> >>> > > >> >> >> > > > of
> > > >>> >>> > > >> >> >> > > > > > the
> > > >>> >>> > > >> >> >> > > > > > > > > tools
> > > >>> >>> > > >> >> >> > > > > > > > > > > > component so we can get rid
> of
> > > >>> >>> > > >> >> >> > > > > > > > > > > > requiring the core> >> >>
> >> >
> > > module on
> > > >>> >>> > > >> >> >> > > > > the
> > > >>> >>> > > >> >> >> > > > > > > > > > classpath
> > > >>> >>> > > >> >> >> > > > > > > > > > > > for the kafka-configs tool.
> > > >>> >>> > > >> >> >> > > > > > > > > > > > *Solution:*
> > > >>> >>> > > >> >> >> > > > > > > > > > > > - I've designed new 2
> > protocols:
> > > >>> >>> > > >> >> >> > > > > > > > > > > >   DescribeQuotas and> >> >>
> >>
> > > > > > > > AlterQuotas.
> > > >>> >>> > > >> >> >> > > > > > > > > > > > - Also redesigned the output
> > > format of
> > > >>> >>> > > >> >> >> > > > > > > > > > > >   the command line> >> >>
> >> >
> > > > > tool
> > > >>> >>> > > >> >> >> > > > > so
> > > >>> >>> > > >> >> >> > > > > > > it
> > > >>> >>> > > >> >> >> > > > > > > > > > provides
> > > >>> >>> > > >> >> >> > > > > > > > > > > > a nicer result.
> > > >>> >>> > > >> >> >> > > > > > > > > > > > - kafka-configs.[sh/bat]
> will
> > > use a new
> > > >>> >>> > > >> >> >> > > > > > > > > > > >   java based> >> >> >> > >
> > >
> > > > ConfigCommand
> > > >>> >>> > > >> >> >> > > > > > > > that
> > > >>> >>> > > >> >> >> > > > > > > > > > is
> > > >>> >>> > > >> >> >> > > > > > > > > > > > placed in tools.
> > > >>> >>> > > >> >> >> > > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > > I'd be happy to receive any
> > > votes or
> > > >>> >>> > > >> >> >> > > > > > > > > > > > feedback on this.> >> >> >>
> >
> > >
> > > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > > > > Regards,
> > > >>> >>> > > >> >> >> > > > > > > > > > > > Viktor
> > > >>> >>> > > >> >> >> > > > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > > >
> > > >>> >>> > > >> >> >> > > > > > >
> > > >>> >>> > > >> >> >> > > > > >
> > > >>> >>> > > >> >> >> > > > >
> > > >>> >>> > > >> >> >> > > >
> > > >>> >>> > > >> >> >> >
> > > >>> >>> >
> > > >>>
> > >
> > >
> >
>

Reply via email to