Todd, Does that imply the intra-broker protocol is always plaintext?
Thanks, Jun On Tue, Dec 2, 2014 at 3:31 PM, Todd Palino <tpal...@gmail.com> wrote: > Thanks. Just to add more detail as to why I think it's a good idea to be > able to segregate traffic like that... > > One reason would just be to separate out the intra-cluster communication to > a separate port. This can allow you to run it over a different interface > (for example, you could have dedicated links for the brokers to do > replication), though you could do that with a wildcard bind and multiple > interfaces with a little care on the broker config. It also allows for > firewalling off clients from a cluster while leaving the broker > communication intact. We've run into this situation a couple times where it > was advantageous to do this during recovery to prevent things like runaway > file descriptor allocation. It also gives the ability to use QOS tools to > work with networking guarantees for broker traffic. > > Maybe it's enough to be able to specify a special protocol name to do this. > Meaning you could configure a port with protocol "broker" (or something > like that) which could be used by the brokers if it exists. Otherwise they > would default back to something else. > > -Todd > > -TOdd > > On Tue, Dec 2, 2014 at 3:23 PM, Gwen Shapira <gshap...@cloudera.com> > wrote: > > > The good news is that I'm not using a map to represent protocol list. > > > > The bad news is that as mentioned in the wiki: producers, consumers > > and broker configuration specify "security protocol", so we'll know > > which host/port pair to use for communication. This implicitly assumes > > there will be only one host/port per protocol. > > > > I'll think a bit on how this assumption can be relaxed. > > > > Gwen > > > > On Tue, Dec 2, 2014 at 3:14 PM, Todd Palino <tpal...@gmail.com> wrote: > > > Gwen - just my reading of what we could expect from what you had > > described > > > so far. Without having gone into implementation details, there didn't > > seem > > > to be anything that would block the ability to run two ports with the > > same > > > protocol configuration, at least from the way you proposed to represent > > it > > > in Zookeeper. I'd just like to not go down the path of using something > > like > > > a map for representing the protocol list that would eliminate this > > > possibility, unless there's a pretty good reason to do so. > > > > > > -Todd > > > > > > On Tue, Dec 2, 2014 at 3:00 PM, Gwen Shapira <gshap...@cloudera.com> > > wrote: > > > > > >> Hey Todd, > > >> > > >> You say "lose the ability" - you mean this ability actually exist now? > > >> Or is this something you hope the new patch will support? > > >> > > >> Gwen > > >> > > >> On Tue, Dec 2, 2014 at 2:08 PM, Todd Palino <tpal...@gmail.com> > wrote: > > >> > Leaving aside the rest of this, on #1, while I consider being able > to > > >> > advertise the ports a good idea, I don't want to lose the ability > for > > >> > maintaining multiple ports with the same protocol. For example, > being > > >> able > > >> > to have 2 plaintext ports, one that only brokers communicate over, > and > > >> one > > >> > that general clients use. The ability to segregate this traffic is > > useful > > >> > in a number of situations, over and above other controls like > quotas, > > and > > >> > is relatively easy to do once we support multiple ports. > > >> > > > >> > -Todd > > >> > > > >> > > > >> > On Tue, Dec 2, 2014 at 1:58 PM, Jun Rao <jun...@gmail.com> wrote: > > >> > > > >> >> Hi, Gwen, > > >> >> > > >> >> Thanks for writing up the wiki. Some comments below. > > >> >> > > >> >> 1. To make it more general, should we support a binding and an > > >> advertised > > >> >> host for each protocol (e.g. plaintext, ssl, etc)? We will also > need > > to > > >> >> figure out how to specify the wildcard binding host. > > >> >> > > >> >> 2. Broker format change in ZK > > >> >> The broker registration in ZK needs to store the host/port for all > > >> >> protocols. We will need to bump up the version of the broker > > >> registration > > >> >> data. Since this is an intra-cluster protocol change, we need an > > extra > > >> >> config for rolling upgrades. So, in the first step, each broker is > > >> upgraded > > >> >> and is ready to parse brokers registered in the new format, but not > > >> >> registering using the new format yet. In the second step, when that > > new > > >> >> config is enabled, the broker will register using the new format. > > >> >> > > >> >> 3. Wire protocol changes. Currently, the broker info is used in the > > >> >> following requests/responses: TopicMetadataResponse , > > >> >> ConsumerMetadataResponse, LeaderAndIsrRequest and > > >> UpdateMetadataRequest. > > >> >> 3.1 TopicMetadataResponse and ConsumerMetadataResponse: > > >> >> These two are used between the clients and the broker. I am not > sure > > >> that > > >> >> we need to make a wire protocol change for them. Currently, the > > protocol > > >> >> includes a single host/port pair in those responses. Based on the > > type > > >> of > > >> >> the port on which the request is sent, it seems that we can just > pick > > >> the > > >> >> corresponding host and port to include in the response. > > >> >> 3.2 UpdateMetadataRequest: > > >> >> This is used between the controller and the broker. Since each > broker > > >> needs > > >> >> to cache the host/port of all protocols, we need to make a wire > > protocol > > >> >> change. We also need to change the broker format in MetadataCache > > >> >> accordingly. This is also an intra-cluster protocol change. So the > > >> upgrade > > >> >> path will need to follow that in item 2. > > >> >> 3.3 LeaderAndIsrRequest: > > >> >> This is also used between the controller and the broker. The > > receiving > > >> >> broker uses the host/port of the leader replica to send the fetch > > >> request. > > >> >> I am not sure if we need a wire protocol change in this case. I was > > >> >> imagining that we will just add a new broker config, sth like > > >> >> replication.socket.protocol. Base on this config, the controller > will > > >> pick > > >> >> the right host/port to include in the request. > > >> >> > > >> >> 4. Should we plan to support security just on the new java clients? > > >> >> Supporting security in both the old and the new clients adds more > > work > > >> and > > >> >> gives people less incentive to migrate off the old clients. > > >> >> > > >> >> Thanks, > > >> >> > > >> >> Jun > > >> >> > > >> >> > > >> >> On Tue, Nov 25, 2014 at 11:13 AM, Gwen Shapira < > > gshap...@cloudera.com> > > >> >> wrote: > > >> >> > > >> >> > Hi Everyone, > > >> >> > > > >> >> > One of the pre-requisites we have for supporting multiple > security > > >> >> > protocols (SSL, Kerberos) is to support them on separate ports. > > >> >> > > > >> >> > This is done in KAFKA-1684 (The SSL Patch), but that patch > > addresses > > >> >> > several different issues - Multiple ports, enriching the > channels, > > SSL > > >> >> > implementation - which makes it more challenging to review and to > > >> test. > > >> >> > > > >> >> > I'd like to split this into 3 separate patches: multi-port > brokers, > > >> >> > enriching SocketChannel, and the actual security > implementations. > > >> >> > > > >> >> > Since even just adding support for multiple listeners per broker > is > > >> >> > somewhat involved and touches multiple components, I wrote a > short > > >> design > > >> >> > document that covers the necessary changes and the upgrade > process: > > >> >> > > > >> >> > > > >> >> > > > >> >> > > >> > > > https://cwiki.apache.org/confluence/display/KAFKA/Multiple+Listeners+for+Kafka+Brokers > > >> >> > > > >> >> > Comments are more than welcome :) > > >> >> > > > >> >> > If this is acceptable, hope to have a patch ready in few days. > > >> >> > > > >> >> > Gwen Shapira > > >> >> > > > >> >> > > >> > > >