Hey there, If no more question is raised, I will go ahead and start the vote shortly.
On Thu, Jun 4, 2020 at 12:39 PM Boyang Chen <reluctanthero...@gmail.com> wrote: > 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 >>> > >>> >>