Hey there, bumping this thread for any further KIP-590 discussion, since it's been quiet for a while.
Boyang On Thu, May 21, 2020 at 10:31 AM Boyang Chen <reluctanthero...@gmail.com> wrote: > Thanks David, I agree the wording here is not clear, and the fellow broker > should just send a new CreateTopicRequest in this case. > > In the meantime, we had some offline discussion about the Envelope API as > well. Although it provides certain privileges like data embedding and > principal embedding, it creates a security hole by letting a malicious user > impersonate any forwarding broker, thus pretending to be any admin user. > Passing the principal around also increases the vulnerability, compared > with other standard ways such as passing a verified token, but it is > unfortunately not fully supported with Kafka security. > > So for the security concerns, we are abandoning the Envelope approach and > fallback to just forward the raw admin requests. The authentication will > happen on the receiving broker side instead of on the controller, so that > we are able to stripped off the principal fields and only include the > principal in header as optional field for audit logging purpose. > Furthermore, we shall propose adding a separate endpoint for > broker-controller communication which should be recommended to enable > secure connections so that a malicious client could not pretend to be a > broker and perform impersonation. > > Let me know your thoughts. > > Best, > Boyang > > On Tue, May 19, 2020 at 12:17 AM David Jacot <dja...@confluent.io> wrote: > >> Hi Boyang, >> >> I've got another question regarding the auto topic creation case. The KIP >> says: "Currently the target broker shall just utilize its own ZK client to >> create >> internal topics, which is disallowed in the bridge release. For above >> scenarios, >> non-controller broker shall just forward a CreateTopicRequest to the >> controller >> instead and let controller take care of the rest, while waiting for the >> response >> in the meantime." There will be no request to forward in this case, right? >> Instead, >> a CreateTopicsRequest is created and sent to the controller node. >> >> When the CreateTopicsRequest is sent as a side effect of the >> MetadataRequest, >> it would be good to know the principal and the clientId in the controller >> (quota, >> audit, etc.). Do you plan to use the Envelope API for this case as well or >> to call >> the regular API directly? Another was to phrase it would be: Shall the >> internal >> CreateTopicsRequest be sent with the original metadata (principal, >> clientId, etc.) >> of the MetadataRequest or as an admin request? >> >> Best, >> David >> >> On Fri, May 8, 2020 at 2:04 AM Guozhang Wang <wangg...@gmail.com> wrote: >> >> > Just to adds a bit more FYI here related to the last question from >> David: >> > in KIP-595 while implementing the new requests we are also adding a >> > "KafkaNetworkChannel" which is used for brokers to send vote / fetch >> > records, so besides the discussion on listeners I think implementation >> wise >> > we can also consider consolidating a lot of those into the same >> call-trace >> > as well -- of course this is not related to public APIs so maybe just >> needs >> > to be coordinated among developments: >> > >> > 1. Broker -> Controller: ISR Change, Topic Creation, Admin Redirect >> > (KIP-497). >> > 2. Controller -> Broker: LeaderAndISR / MetadataUpdate; though these are >> > likely going to be deprecated post KIP-500. >> > 3. Txn Coordinator -> Broker: TxnMarker >> > >> > >> > Guozhang >> > >> > On Wed, May 6, 2020 at 8:58 PM Boyang Chen <reluctanthero...@gmail.com> >> > wrote: >> > >> > > Hey David, >> > > >> > > thanks for the feedbacks! >> > > >> > > On Wed, May 6, 2020 at 2:06 AM David Jacot <dja...@confluent.io> >> wrote: >> > > >> > > > Hi Boyang, >> > > > >> > > > While re-reading the KIP, I've got few small questions/comments: >> > > > >> > > > 1. When auto topic creation is enabled, brokers will send a >> > > > CreateTopicRequest >> > > > to the controller instead of writing to ZK directly. It means that >> > > > creation of these >> > > > topics are subject to be rejected with an error if a >> CreateTopicPolicy >> > is >> > > > used. Today, >> > > > it bypasses the policy entirely. I suppose that clusters allowing >> auto >> > > > topic creation >> > > > don't have a policy in place so it is not a big deal. I suggest to >> call >> > > > out explicitly the >> > > > limitation in the KIP though. >> > > > >> > > > That's a good idea, will add to the KIP. >> > > >> > > >> > > > 2. In the same vein as my first point. How do you plan to handle >> errors >> > > > when internal >> > > > topics are created by a broker? Do you plan to retry retryable >> errors >> > > > indefinitely? >> > > > >> > > > I checked a bit on the admin client handling of the create topic >> RPC. >> > It >> > > seems that >> > > the only retriable exceptions at the moment are NOT_CONTROLLER and >> > > REQUEST_TIMEOUT. >> > > So I guess we just need to retry on these exceptions? >> > > >> > > >> > > > 3. Could you clarify which listener will be used for the internal >> > > requests? >> > > > Do you plan >> > > > to use the control plane listener or perhaps the inter-broker >> listener? >> > > > >> > > > As we discussed in the KIP, currently the internal design for >> > > broker->controller channel has not been >> > > done yet, and I feel it makes sense to consolidate redirect RPC and >> > > internal topic creation RPC to this future channel, >> > > which are details to be filled in the near future, right now some >> > > controller refactoring effort is still WIP. >> > > >> > > >> > > > Thanks, >> > > > David >> > > > >> > > > On Mon, May 4, 2020 at 9:37 AM Sönke Liebau >> > > > <soenke.lie...@opencore.com.invalid> wrote: >> > > > >> > > > > Ah, I see, thanks for the clarification! >> > > > > >> > > > > Shouldn't be an issue I think. My understanding of KIPs was always >> > that >> > > > > they are mostly intended as a place to discuss and agree changes >> up >> > > > front, >> > > > > whereas tracking the actual releases that things go into should be >> > > > handled >> > > > > in Jira. >> > > > > So maybe we just create new jiras for any subsequent work and >> either >> > > link >> > > > > those or make them subtasks (even though this jira is already a >> > subtask >> > > > > itself), that should allow us to properly track all releases that >> > work >> > > > goes >> > > > > into. >> > > > > >> > > > > Thanks for your work on this!! >> > > > > >> > > > > Best, >> > > > > Sönke >> > > > > >> > > > > >> > > > > On Sat, 2 May 2020 at 00:31, Boyang Chen < >> reluctanthero...@gmail.com >> > > >> > > > > wrote: >> > > > > >> > > > > > Sure thing Sonke, what I suggest is that usual KIPs get >> accepted to >> > > go >> > > > > into >> > > > > > next release. It could span for a couple of releases because of >> > > > > engineering >> > > > > > time, but no change has to be shipped in specific future >> releases, >> > > like >> > > > > the >> > > > > > backward incompatible change for KafkaPrincipal. But I guess >> it's >> > not >> > > > > > really a blocker, as long as we stated clearly in the KIP how we >> > are >> > > > > going >> > > > > > to roll things out, and let it partially finish in 2.6. >> > > > > > >> > > > > > Boyang >> > > > > > >> > > > > > On Fri, May 1, 2020 at 2:32 PM Sönke Liebau >> > > > > > <soenke.lie...@opencore.com.invalid> wrote: >> > > > > > >> > > > > > > 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 >> > > > > > > >> > > > > > >> > > > > >> > > > > >> > > > > -- >> > > > > Sönke Liebau >> > > > > Partner >> > > > > Tel. +49 179 7940878 >> > > > > OpenCore GmbH & Co. KG - Thomas-Mann-Straße 8 - 22880 Wedel - >> Germany >> > > > > >> > > > >> > > >> > >> > >> > -- >> > -- Guozhang >> > >> >