Status

Current state[Accepted]

Discussion thread: here

JIRA: here

Released: 0.8.3

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

The goal is to eventually support different security mechanisms on different ports. 
Currently brokers are defined as host+port pair, and this definition exists throughout the code-base, therefore some refactoring is needed to support multiple ports for a single broker.

Public Interfaces

Proposed Changes

See detailed description here: Multiple Listeners for Kafka Brokers

 

Compatibility, Deprecation, and Migration Plan

    1. (if upgrading  from 0.8.2.0 or earlier, add inter.broker.protocol.version=0.8.2.0 to configuration file, otherwise wire protocol will default to the latest version and we will not be able to do a rolling upgrade.)
    2. do a rolling upgrade on the brokers first
    3. bump version of inter.broker.protocol.version to current version (0.8.3.0 or 0.9.0.0 depending on release)
    4. If desired additional ports / security protocols can be added using the new "listeners" configuration parameter.
    5. Clients can be upgraded whenever is convenient. 

      Only "plaintext" protocol is supported until broker upgrade is complete. Also, only upgraded clients will be able to use new security protocols.

Rejected Alternatives

There was considerable discussion of the possibility of supporting all security protocols on the same port simultaneously. This was rejected for the following reasons:

  1. This approach is vulnerable to "downgrade attack"
  2. This requires a protocol-negotiation protocol, which can be rather complex
  3. Most other applications and frameworks support multiple protocols on different ports. Especially SSL.
  4. This approach allows cleanly disabling un-authenticated access (by removing "plaintext" ports after upgrade). This ability is desirable for auditing purposes.