Hi Boyang, thanks for the update, sounds reasonable to me. Making it a breaking change is definitely the safer route to go.
Just one quick question regarding your mail, I didn't fully understand what you mean by "I think this is the first time we need to introduce a KIP without having it fully accepted in next release." - could you perhaps explain that some more very briefly? Best regards, Sönke On Fri, 1 May 2020 at 23:03, Boyang Chen <reluctanthero...@gmail.com> wrote: > Hey Tom, > > thanks for the suggestion. As long as we could correctly serialize the > principal and embed in the Envelope, I think we could still leverage the > controller to do the client request authentication. Although this pays an > extra round trip if the authorization is doomed to fail on the receiver > side, having a centralized processing unit is more favorable such as > ensuring the audit log is consistent instead of scattering between > forwarder and receiver. > > Boyang > > On Wed, Apr 29, 2020 at 9:50 AM Tom Bentley <tbent...@redhat.com> wrote: > > > Hi Boyang, > > > > Thanks for the update. In the EnvelopeRequest handling section of the KIP > > it might be worth saying explicitly that authorization of the request > will > > happen as normal. Otherwise what you're proposing makes sense to me. > > > > Thanks again, > > > > Tom > > > > > > > > On Wed, Apr 29, 2020 at 5:27 PM Boyang Chen <reluctanthero...@gmail.com> > > wrote: > > > > > Thanks for the proposed idea Sonke. I reviewed it and had some offline > > > discussion with Colin, Rajini and Mathew. > > > > > > We do need to add serializability to the PrincipalBuilder interface, > but > > we > > > should not make any default implementation which could go wrong and > messy > > > up with the security in a production environment if the user neglects > it. > > > Instead we need to make it required and backward incompatible. So I > > > integrated your proposed methods and expand the Envelope RPC with a > > couple > > > of more fields for audit log purpose as well. > > > > > > Since the KafkaPrincipal builder serializability is a binary > incompatible > > > change, I propose (also stated in the KIP) the following implementation > > > plan: > > > > > > 1. For next *2.x* release: > > > 1. Get new admin client forwarding changes > > > 2. Get the Envelope RPC implementation > > > 3. Get the forwarding path working and validate the function with > > > fake principals in testing environment, without actual triggering > > in > > > the > > > production system > > > 2. For next *3.0 *release: > > > 1. Introduce serializability to PrincipalBuilder > > > 2. Turn on forwarding path in production and perform end-to-end > > > testing > > > > > > > > > I think this is the first time we need to introduce a KIP without > having > > it > > > fully accepted in next release. Let me know if this sounds reasonable. > > > > > > On Fri, Apr 24, 2020 at 1:00 AM Sönke Liebau > > > <soenke.lie...@opencore.com.invalid> wrote: > > > > > > > After thinking on this a little bit, maybe this would be an option: > > > > > > > > add default methods serialize and deserialize to the > > > KafkaPrincipalBuilder > > > > interface, these could be very short: > > > > > > > > default String serialize(KafkaPrincipal principal) { > > > > return principal.toString(); > > > > } > > > > > > > > default KafkaPrincipal deserialize(String principalString) { > > > > return SecurityUtils.parseKafkaPrincipal(principalString); > > > > } > > > > > > > > This would mean that all existing implementations of that interface > > > > are unaffected, as this code is pretty much what is currently being > > > > used when their principals need to be serialized. > > > > > > > > But it offers people using custom principals the chance to override > > > > these methods and ensure that all information gets serialized for > > > > delegation tokens or request forwarding. > > > > > > > > > > > > Wherever we need to de/serialize principals (for example in the > > > > DelegationTokenManager [1]) we obtain an instance of the configured > > > > PrincipalBuilder class and use that to do the actual work. > > > > > > > > What do you think? > > > > > > > > > > > > Best regards, > > > > > > > > Sönke > > > > > > > > > > > > [1] > > > > > > > > > > https://github.com/apache/kafka/blob/33d06082117d971cdcddd4f01392006b543f3c01/core/src/main/scala/kafka/server/DelegationTokenManager.scala#L122 > > > > > > > > > > > > On Thu, 23 Apr 2020 at 17:42, Boyang Chen < > reluctanthero...@gmail.com> > > > > wrote: > > > > > > > > > Thanks all, > > > > > > > > > > IIUC, the necessity of doing the audit log on the controller side > is > > > > > because we need to make sure the authorized resource modifications > > > > > eventually arrive on the target broker side, but is that really > > > > necessary? > > > > > > > > > > I'm thinking the possibility of doing the audit log on the > forwarding > > > > > broker side, which could simplify the discussion of principal > > > > serialization > > > > > here. The other option I could think of is to serialize the entire > > > audit > > > > > log message if we were supposed to approve, and pass it as part of > > the > > > > > Envelope. > > > > > > > > > > Let me know if you think either of these approaches would work. > > > > > > > > > > On Thu, Apr 23, 2020 at 7:01 AM Sönke Liebau > > > > > <soenke.lie...@opencore.com.invalid> wrote: > > > > > > > > > > > I agree that this would be useful to have and shouldn't create > > issues > > > > in > > > > > > 99% of all cases. But it would be a breaking change to a public > > API. > > > > > > I had a quick look at the two large projects that come to mind > > which > > > > > might > > > > > > be affected: Ranger and Sentry - both seem to operate directly > with > > > > > > KafkaPrincipal instead of subclassing it. But anybody who > > > > > > extended KafkaPrincipal would probably need to update their > code.. > > > > > > > > > > > > Writing this sparked the thought that this issue should also > > concern > > > > > > delegation tokens, as Principals need to be stored/sent around > for > > > > those > > > > > > too. > > > > > > Had a brief look at the code and for Delegation Tokens we seem to > > use > > > > > > SecurityUtils#parseKafkaPrincipal[1] which would ignore any > > > additional > > > > > > information from custom Principals. > > > > > > > > > > > > We'll probably want to at least add a note on that to the docs - > > > unless > > > > > it > > > > > > is there already, I've only looked for about 30 seconds.. > > > > > > > > > > > > Best regards, > > > > > > Sönke > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > > > > > > > > > > > > > > https://github.com/apache/kafka/blob/e9fcfe4fb7b9ae2f537ce355fe2ab51a58034c64/clients/src/main/java/org/apache/kafka/common/utils/SecurityUtils.java#L52 > > > > > > > > > > > > On Thu, 23 Apr 2020 at 14:35, Colin McCabe <cmcc...@apache.org> > > > wrote: > > > > > > > > > > > > > Hmm... Maybe we need to add some way to serialize and > deserialize > > > > > > > KafkaPrincipal subclasses to/from string. We could add a > method > > to > > > > > > > KafkaPrincipalBuilder#deserialize and a method > > > > > KafkaPrincipal#serialize, > > > > > > I > > > > > > > suppose. > > > > > > > > > > > > > > best, > > > > > > > Colin > > > > > > > > > > > > > > > > > > > > > On Thu, Apr 23, 2020, at 02:14, Tom Bentley wrote: > > > > > > > > Hi folks, > > > > > > > > > > > > > > > > Colin wrote: > > > > > > > > > > > > > > > > > The final broker knows it can trust the principal name in > the > > > > > > envelope > > > > > > > > > (since EnvelopeRequest requires CLUSTERACTION on CLUSTER). > > So > > > it > > > > > can > > > > > > > use > > > > > > > > > that principal name for authorization (given who you are, > > what > > > > can > > > > > > you > > > > > > > > > do?) The forwarded principal name will also be used for > > > logging. > > > > > > > > > > > > > > > > > > > > > > > > > My understanding (and I'm happy to be corrected) is that a > > custom > > > > > > > > authoriser might rely on the KafkaPrincipal instance being a > > > > subclass > > > > > > of > > > > > > > > KafkaPrincipal (e.g. the subclass has extra fields with the > > > > > principal's > > > > > > > > "roles"). So you can't construct a KafkaPrinicpal on the > > > controller > > > > > > which > > > > > > > > would be guaranteed to work for arbitrary authorizers. You > have > > > to > > > > > > > perform > > > > > > > > authorization on the first broker (rejecting some of the > > batched > > > > > > > requests), > > > > > > > > forward the authorized ones to the controller, which then has > > to > > > > > trust > > > > > > > that > > > > > > > > the authorization has been done and make the ZK writes > without > > > > > > > > authorization. Because the controller cannot invoke the > > > authorizer > > > > > that > > > > > > > > means that the authorizer audit logging (on the controller) > > would > > > > not > > > > > > > > include these operations. But they would be in the audit > > logging > > > > from > > > > > > the > > > > > > > > original broker, so the information would not be lost. > > > > > > > > > > > > > > > > There's also a problem with using the constructed principal > for > > > > other > > > > > > > > logging (i.e. non authorizer logging) on the controller: > > There's > > > > > > nothing > > > > > > > > stopping a custom KafkaPrincipal subclass from overriding > > > > toString() > > > > > to > > > > > > > > return something different from "${type}:${name}". If you're > > > > > building a > > > > > > > > "fake" KafkaPrincipal on the controller from the type and > name > > > then > > > > > its > > > > > > > > toString() would be "wrong". A solution to this would be to > > also > > > > > > > serialize > > > > > > > > the toString() into the envelope and have some > > > > ProxiedKafkaPrincipal > > > > > > > class > > > > > > > > which you instantiate on the controller which has overridden > > > > toString > > > > > > to > > > > > > > > return the right value. Obviously you could optimize this > using > > > an > > > > > > > optional > > > > > > > > field so you only serialize the toString() if it differed > from > > > the > > > > > > value > > > > > > > > you'd get from KafkaPrincipal.toString(). Maybe non-audit > > logging > > > > > using > > > > > > > the > > > > > > > > wrong string value of a principal is sufficiently minor that > > this > > > > > isn't > > > > > > > > even worth trying to solve. > > > > > > > > > > > > > > > > Kind regards, > > > > > > > > > > > > > > > > Tom > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 22, 2020 at 10:59 PM Sönke Liebau > > > > > > > > <soenke.lie...@opencore.com.invalid> wrote: > > > > > > > > > > > > > > > > > Hi Colin, > > > > > > > > > > > > > > > > > > thanks for your summary! Just one question - and I may be > > > missing > > > > > an > > > > > > > > > obvious point here.. > > > > > > > > > You write: > > > > > > > > > > > > > > > > > > "The initial broker should do authentication (who are you?) > > and > > > > > come > > > > > > up > > > > > > > > > with a principal name. Then it creates an envelope > request, > > > > which > > > > > > will > > > > > > > > > contain that principal name, and sends it along with the > > > > unmodified > > > > > > > > > original request to the final broker. [... ] The final > > broker > > > > > knows > > > > > > > it > > > > > > > > > can trust the principal name in the envelope (since > > > > EnvelopeRequest > > > > > > > > > requires CLUSTERACTION on CLUSTER). So it can use that > > > principal > > > > > > name > > > > > > > for > > > > > > > > > authorization (given who you are, what can you do?) " > > > > > > > > > > > > > > > > > > My understanding is, that you don't want to serialize the > > > > Principal > > > > > > > (due to > > > > > > > > > the discussed issues with custom principals) but reduce the > > > > > principal > > > > > > > down > > > > > > > > > to a string representation that would be used for logging > and > > > > > > > > > authorization? > > > > > > > > > If that understanding is correct then I don't think we > could > > > use > > > > > the > > > > > > > > > regular Authorizer on the target broker, because that would > > > need > > > > > the > > > > > > > actual > > > > > > > > > principal object to work on. > > > > > > > > > > > > > > > > > > Also, a thought that just occurred to me, we might actually > > > need > > > > to > > > > > > log > > > > > > > > > different principal strings for the case of queries like > > > > > AlterConfigs > > > > > > > > > (mentioned by Rajini) which may contain multiple resources. > > > Take > > > > an > > > > > > > LDAP > > > > > > > > > authorizer that grants access based on group membership - > the > > > > same > > > > > > > > > alterconfig request may contain resources that are > authorized > > > > based > > > > > > on > > > > > > > > > group1 as well as resources authorized based on membership > in > > > > > group 2 > > > > > > > .. > > > > > > > > > And in all cases we'd need to log the specific reason I > > think.. > > > > > > > > > > > > > > > > > > Basically I think that we might have a hard time properly > > > > > authorizing > > > > > > > and > > > > > > > > > logging without being able to forward the entire > principal.. > > > but > > > > > > > again, I > > > > > > > > > might be heading down an entirely wrong path here :) > > > > > > > > > > > > > > > > > > Best regards, > > > > > > > > > Sönke > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, 22 Apr 2020 at 23:13, Guozhang Wang < > > > wangg...@gmail.com> > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > Colin, Boyang: thanks for the updates, I agree that an > > > > > > > EnvelopeRequest > > > > > > > > > > would be a less vulnerable approach than optional fields, > > and > > > > I'm > > > > > > > just > > > > > > > > > > wondering if we would keep the EnvelopeRequest for a long > > > > time. I > > > > > > was > > > > > > > > > > thinking that, potentially if we require clients to be on > > > newer > > > > > > > version > > > > > > > > > > when talking to a 3.0+ (assuming 3.0 is the bridge > release) > > > > > > brokers, > > > > > > > then > > > > > > > > > > we do not need to keep this code for too long, but I > think > > > that > > > > > > > would be > > > > > > > > > a > > > > > > > > > > very hasty compatibility breaking so maybe we indeed need > > to > > > > keep > > > > > > > this > > > > > > > > > > forwarding mechanism many years. > > > > > > > > > > > > > > > > > > > > Regarding future use cases, I think the example that > Boyang > > > > > > > mentioned may > > > > > > > > > > not be very practical honestly, because when there's a > > > > > connectivity > > > > > > > > > issue, > > > > > > > > > > it is either a network partition between "controller, A | > > B", > > > > or > > > > > > > > > > "controller | A, B". In other words, if the controller > can > > > talk > > > > > to > > > > > > A, > > > > > > > > > then > > > > > > > > > > very likely A would not be able to talk to B either... > > > anyways, > > > > > > > since the > > > > > > > > > > forwarding would be there for a sufficiently long time, I > > > think > > > > > > > keeping > > > > > > > > > the > > > > > > > > > > additional envelope makes sense. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Guozhang > > > > > > > > > > > > > > > > > > > > On Wed, Apr 22, 2020 at 1:47 PM Boyang Chen < > > > > > > > reluctanthero...@gmail.com> > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > Thanks Colin for the summary! And Guozhang, regarding > the > > > > > future > > > > > > > use > > > > > > > > > > cases, > > > > > > > > > > > consider a scenario where there are temporary > > connectivity > > > > > issue > > > > > > > > > between > > > > > > > > > > > controller to a fellow broker A, the controller could > > then > > > > > > leverage > > > > > > > > > > another > > > > > > > > > > > healthy broker B to do a forwarding request to A in > order > > > to > > > > > > > maintain a > > > > > > > > > > > communication. > > > > > > > > > > > > > > > > > > > > > > Even for KIP-590 scope, the forwarding mechanism shall > > not > > > be > > > > > > > transit > > > > > > > > > as > > > > > > > > > > we > > > > > > > > > > > do need to support older version of admin clients for a > > > > couple > > > > > of > > > > > > > years > > > > > > > > > > > IIUC. > > > > > > > > > > > > > > > > > > > > > > Boyang > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 22, 2020 at 1:29 PM Colin McCabe < > > > > > cmcc...@apache.org > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > Hi all, > > > > > > > > > > > > > > > > > > > > > > > > I guess the way I see this working is that the > request > > > gets > > > > > > sent > > > > > > > from > > > > > > > > > > the > > > > > > > > > > > > client, to the initial broker, and then forwarded to > > the > > > > > final > > > > > > > > > broker. > > > > > > > > > > > > > > > > > > > > > > > > The initial broker should do authentication (who are > > > you?) > > > > > and > > > > > > > come > > > > > > > > > up > > > > > > > > > > > > with a principal name. Then it creates an envelope > > > > request, > > > > > > > which > > > > > > > > > will > > > > > > > > > > > > contain that principal name, and sends it along with > > the > > > > > > > unmodified > > > > > > > > > > > > original request to the final broker. (I agree with > > Tom > > > > and > > > > > > > Rajini > > > > > > > > > > that > > > > > > > > > > > we > > > > > > > > > > > > can't forward the information needed to do > > authentication > > > > on > > > > > > the > > > > > > > > > final > > > > > > > > > > > > broker, but I also think we don't need to, since we > can > > > do > > > > it > > > > > > on > > > > > > > the > > > > > > > > > > > > initial broker.) > > > > > > > > > > > > > > > > > > > > > > > > The final broker knows it can trust the principal > name > > in > > > > the > > > > > > > > > envelope > > > > > > > > > > > > (since EnvelopeRequest requires CLUSTERACTION on > > > CLUSTER). > > > > > So > > > > > > > it can > > > > > > > > > > use > > > > > > > > > > > > that principal name for authorization (given who you > > are, > > > > > what > > > > > > > can > > > > > > > > > you > > > > > > > > > > > > do?) The forwarded principal name will also be used > > for > > > > > > logging. > > > > > > > > > > > > > > > > > > > > > > > > One question is why we need an EnvelopeRequest. > Well, > > if > > > > we > > > > > > > don't > > > > > > > > > have > > > > > > > > > > > an > > > > > > > > > > > > EnvelopeRequest, we need somewhere else to put the > > > > forwarded > > > > > > > > > principal > > > > > > > > > > > > name. I don't think overriding an existing field > (like > > > > > > > clientId) is > > > > > > > > > a > > > > > > > > > > > good > > > > > > > > > > > > option for this. It's messy, and loses information. > > It > > > > also > > > > > > > raises > > > > > > > > > > the > > > > > > > > > > > > question of how the final broker knows that the > > clientId > > > in > > > > > the > > > > > > > > > > received > > > > > > > > > > > > message is not "really" a clientId, but is a > principal > > > > name. > > > > > > > Without > > > > > > > > > > an > > > > > > > > > > > > envelope, there's no way to clearly mark a request as > > > > > > forwarded, > > > > > > > so > > > > > > > > > > > there's > > > > > > > > > > > > no reason for the final broker to treat this > > differently > > > > > than a > > > > > > > > > regular > > > > > > > > > > > > clientId (or whatever). > > > > > > > > > > > > > > > > > > > > > > > > We talked about using optional fields to contain the > > > > > forwarded > > > > > > > > > > principal > > > > > > > > > > > > name, but this is also messy and potentially > dangerous. > > > > > Older > > > > > > > > > brokers > > > > > > > > > > > will > > > > > > > > > > > > simply ignore the optional fields, which could result > > in > > > > them > > > > > > > > > executing > > > > > > > > > > > > operations as the wrong principal. Of course, this > > would > > > > > > > require a > > > > > > > > > > > > misconfiguration in order to happen, but it still > seems > > > > > better > > > > > > > to set > > > > > > > > > > up > > > > > > > > > > > > the system so that this misconfiguration is detected, > > > > rather > > > > > > than > > > > > > > > > > > silently > > > > > > > > > > > > ignored. > > > > > > > > > > > > > > > > > > > > > > > > It's true that the need for forwarding is "temporary" > > in > > > > some > > > > > > > sense, > > > > > > > > > > > since > > > > > > > > > > > > we only need it for older clients. However, we will > > want > > > > to > > > > > > > support > > > > > > > > > > > these > > > > > > > > > > > > older clients for many years to come. > > > > > > > > > > > > > > > > > > > > > > > > I agree that the usefulness of EnvelopeRequest is > > limited > > > > by > > > > > it > > > > > > > > > being a > > > > > > > > > > > > superuser-only request at the moment. Perhaps there > > are > > > > some > > > > > > > changes > > > > > > > > > > to > > > > > > > > > > > > how custom principals work that would allow us to get > > > > around > > > > > > > this in > > > > > > > > > > the > > > > > > > > > > > > future. We should think about that so that we have > > this > > > > > > > > > functionality > > > > > > > > > > in > > > > > > > > > > > > the future if it's needed. > > > > > > > > > > > > > > > > > > > > > > > > best, > > > > > > > > > > > > Colin > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 22, 2020, at 11:21, Guozhang Wang wrote: > > > > > > > > > > > > > Hello Gwen, > > > > > > > > > > > > > > > > > > > > > > > > > > The purpose here is for maintaining compatibility > old > > > > > > clients, > > > > > > > who > > > > > > > > > do > > > > > > > > > > > not > > > > > > > > > > > > > have functionality to do re-routing admin requests > > > > > > themselves. > > > > > > > New > > > > > > > > > > > > clients > > > > > > > > > > > > > can of course do this themselves by detecting who's > > the > > > > > > > controller. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hello Colin / Boyang, > > > > > > > > > > > > > > > > > > > > > > > > > > Regarding the usage of the envelope, I'm curious > what > > > are > > > > > the > > > > > > > > > > potential > > > > > > > > > > > > > future use cases that would require request > > forwarding > > > > and > > > > > > > hence > > > > > > > > > > > envelope > > > > > > > > > > > > > would be useful? Originally I thought that the > > > forwarding > > > > > > > mechanism > > > > > > > > > > is > > > > > > > > > > > > only > > > > > > > > > > > > > temporary as we need it for the bridge release, and > > > > moving > > > > > > > forward > > > > > > > > > we > > > > > > > > > > > > will > > > > > > > > > > > > > get rid of this to simplify the code base. If we do > > > have > > > > > > valid > > > > > > > use > > > > > > > > > > > cases > > > > > > > > > > > > in > > > > > > > > > > > > > the future which makes us believe that request > > > forwarding > > > > > > would > > > > > > > > > > > actually > > > > > > > > > > > > be > > > > > > > > > > > > > a permanent feature retained on the broker side, > I'm > > on > > > > > board > > > > > > > with > > > > > > > > > > > adding > > > > > > > > > > > > > the envelope request protocol. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wed, Apr 22, 2020 at 8:22 AM Gwen Shapira < > > > > > > > g...@confluent.io> > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > Hey Boyang, > > > > > > > > > > > > > > > > > > > > > > > > > > > > Sorry if this was already discussed, but I didn't > > see > > > > > this > > > > > > as > > > > > > > > > > > rejected > > > > > > > > > > > > > > alternative: > > > > > > > > > > > > > > > > > > > > > > > > > > > > Until now, we always did client side routing - > the > > > > client > > > > > > > itself > > > > > > > > > > > found > > > > > > > > > > > > the > > > > > > > > > > > > > > controller via metadata and directed requests > > > > > accordingly. > > > > > > > > > Brokers > > > > > > > > > > > that > > > > > > > > > > > > > > were not the controller, rejected those requests. > > > > > > > > > > > > > > > > > > > > > > > > > > > > Why did we decide to move to broker side routing? > > Was > > > > the > > > > > > > > > > client-side > > > > > > > > > > > > > > option discussed and rejected somewhere and I > > missed > > > > it? > > > > > > > > > > > > > > > > > > > > > > > > > > > > Gwen > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Apr 3, 2020, 4:45 PM Boyang Chen < > > > > > > > > > > reluctanthero...@gmail.com > > > > > > > > > > > > > > > > > > > > > > > > > > wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hey all, > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > I would like to start off the discussion for > > > > KIP-590, a > > > > > > > > > follow-up > > > > > > > > > > > > > > > initiative after KIP-500: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-590%3A+Redirect+Zookeeper+Mutation+Protocols+to+The+Controller > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > This KIP proposes to migrate existing Zookeeper > > > > > mutation > > > > > > > paths, > > > > > > > > > > > > including > > > > > > > > > > > > > > > configuration, security and quota changes, to > > > > > > > controller-only > > > > > > > > > by > > > > > > > > > > > > always > > > > > > > > > > > > > > > routing these alterations to the controller. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Let me know your thoughts! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best, > > > > > > > > > > > > > > > Boyang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > -- Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > -- Guozhang > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > Sönke Liebau > > > > > > > > > Partner > > > > > > > > > Tel. +49 179 7940878 > > > > > > > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 > Wedel - > > > > > Germany > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Sönke Liebau > > > > > > Partner > > > > > > Tel. +49 179 7940878 > > > > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - > > Germany > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Sönke Liebau > > > > Partner > > > > Tel. +49 179 7940878 > > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - Germany > > > > > > > > > > -- Sönke Liebau Partner Tel. +49 179 7940878 OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - Germany