Hi Kafka Devs, While reviewing the patch for KAFKA-1809, we came across two questions that we are interested in hearing the community out on.
1. This patch changes the Broker class and adds a new class BrokerEndPoint that behaves like the previous broker. While technically kafka.cluster.Broker is not part of the public API, it is returned by javaapi, used with the SimpleConsumer. Getting replicas from PartitionMetadata will now return BrokerEndPoint instead of Broker. All method calls remain the same, but since we return a new type, we break the API. Note that this breakage does not prevent upgrades - existing SimpleConsumers will continue working (because we are wire-compatible). The only thing that won't work is building SimpleConsumers with dependency on Kafka versions higher than 0.8.2. Arguably, we don't want anyone to do it anyway :) So: Do we state that the highest release on which SimpleConsumers can depend is 0.8.2? Or shall we keep Broker as is and create an UberBroker which will contain multiple brokers as its endpoints? 2. The KIP suggests "use.new.wire.protocol" configuration to decide which protocols the brokers will use to talk to each other. The problem is that after the next upgrade, the wire protocol is no longer new, so we'll have to reset it to false for the following upgrade, then change to true again... and upgrading more than a single version will be impossible. Bad idea :) As an alternative, we can have a property for each version and set one of them to true. Or (simple, I think) have "wire.protocol.version" property and accept version numbers (0.8.2, 0.8.3, 0.9) as values. Please share your thoughts :) Gwen