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

Reply via email to