I don't think it necessarily has to be. I was thinking about that while I was typing it out, and I realized that as well. With a special broker port, my biggest concern is making sure that nothing other than a broker uses it (and so cannot bypass security controls like authentication and authorization). Outside of that assurance, I don't see a reason to add overhead like TLS to the broker communication. Someone else might have one, though.
-Todd On Tue, Dec 2, 2014 at 4:12 PM, Jun Rao <j...@confluent.io> wrote: > 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 > > > >> >> > > > > >> >> > > > >> > > > > > >