Grant Henke created KAFKA-4906:
----------------------------------

             Summary: Support 0.9 brokers with a newer Producer or Consumer 
version
                 Key: KAFKA-4906
                 URL: https://issues.apache.org/jira/browse/KAFKA-4906
             Project: Kafka
          Issue Type: Improvement
          Components: clients
    Affects Versions: 0.10.2.0
            Reporter: Grant Henke
            Assignee: Grant Henke
             Fix For: 0.10.2.1


KAFKA-4507 added the ability for newer Kafka clients to talk to older Kafka 
brokers if a new feature supported by a newer wire protocol was not 
used/required. 

We currently support brokers as old as 0.10.0.0 because thats when the 
ApiVersionsRequest/Response was added to the broker (KAFKA-3307).

However, there are relatively few changes between 0.9.0.0 and 0.10.0.0 on the 
wire, making it possible to support another major broker version set by 
assuming that any disconnect resulting from an ApiVersionsRequest is from a 0.9 
broker and defaulting to legacy protocol versions. 

Supporting 0.9 with newer clients can drastically simplify upgrades, allow for 
libraries and frameworks to easily support a wider set of environments, and let 
developers take advantage of client side improvements without requiring cluster 
upgrades first. 

Below is a list of the wire protocol versions by release for reference: 
{noformat}
0.10.x
        Produce(0): 0 to 2
        Fetch(1): 0 to 2 
        Offsets(2): 0
        Metadata(3): 0 to 1
        OffsetCommit(8): 0 to 2
        OffsetFetch(9): 0 to 1
        GroupCoordinator(10): 0
        JoinGroup(11): 0
        Heartbeat(12): 0
        LeaveGroup(13): 0
        SyncGroup(14): 0
        DescribeGroups(15): 0
        ListGroups(16): 0
        SaslHandshake(17): 0
        ApiVersions(18): 0

0.9.x:
        Produce(0): 0 to 1 (no response timestamp from v2)
        Fetch(1): 0 to 1 (no response timestamp from v2)
        Offsets(2): 0
        Metadata(3): 0 (no cluster id or rack info from v1)
        OffsetCommit(8): 0 to 2
        OffsetFetch(9): 0 to 1
        GroupCoordinator(10): 0
        JoinGroup(11): 0
        Heartbeat(12): 0
        LeaveGroup(13): 0
        SyncGroup(14): 0
        DescribeGroups(15): 0
        ListGroups(16): 0
        SaslHandshake(17): UNSUPPORTED
        ApiVersions(18): UNSUPPORTED

0.8.2.x:
        Produce(0): 0 (no quotas from v1)
        Fetch(1): 0 (no quotas from v1)
        Offsets(2): 0
        Metadata(3): 0
        OffsetCommit(8): 0 to 1 (no global retention time from v2)
        OffsetFetch(9): 0 to 1
        GroupCoordinator(10): 0
        JoinGroup(11): UNSUPPORTED
        Heartbeat(12): UNSUPPORTED
        LeaveGroup(13): UNSUPPORTED
        SyncGroup(14): UNSUPPORTED
        DescribeGroups(15): UNSUPPORTED
        ListGroups(16): UNSUPPORTED
        SaslHandshake(17): UNSUPPORTED
        ApiVersions(18): UNSUPPORTED
{noformat}

Note: Due to KAFKA-3088 it may take up to request.timeout.time to fail an 
ApiVersionsRequest and failover to legacy protocol versions unless we handle 
that scenario specifically in this patch. The workaround would be to reduce 
request.timeout.time if needed.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to