KIP-35 - Retrieving protocol version introduced a mechanism for dynamically determining the functionality of a Kafka broker and KIP-97: Improved Kafka Client RPC Compatibility Policy introduced a new compatibility policy and guarantees for the Java client. Previously, the general rule was that the Kafka broker a client interacted with was required to be a newer version than the client. Now, newer versions of the Java clients and other clients that support KIP-35 such as librdkafka are able to fall back to older request types or throw appropriate errors if functionality is not available.
This flexibility is a big win for users, who now have much more flexibility in adopting new client versions without requiring broker upgrades first. This is especially beneficial for client-side only bug fixes or improvements that don't require any additional support, both in user applications and in libraries/frameworks like Kafka Connect and Kafka Streams. However, it also complicates compatibility, especially while users may still be running versions of the clients from before this support existed.
The goal of this page is to provide an easy reference to understand what clients will work with a given version of the broker. This document only includes information for brokers since the introduction of KIP-35, which was added in 0.10.0.0. For earlier versions, you can either assume the previous policy applies or refer to the specific client documentation for details of how it supports multiple broker versions (usually via configuration).
To keep the table simple, we only break compatibility down based on Java & KIP-35-enabled clients. Exact compatibility for KIP-35 clients will depend on when support was added. Here is the version when support was added for some popular clients:
- librdkafka (and all wrappers): 0.10.0.0
- kafka-python: 0.10.0.0
Note that while clients have different versioning schemes, all the data here is based on Kafka releases. If versions differ, you'd need to map these to specific releases for the individual clients.
Broker 0.10.0
- Basic client compatibility:
- Java: clients <= 0.10.0 or >= 0.10.2
- KIP-35 enabled clients: any version
- Kafka Streams: version 0.10.0
- Versions >= 0.10.1 not supported because they require CreateTopics support introduced in 0.10.1
- Kafka Connect: versions <= 0.10.0 or >= 0.10.2
- Features that newer clients might notice missing:
- AdminClient requests
Broker 0.10.1
- Basic client compatibility:
- Java: any version
- KIP-35 enabled clients: any version
- Kafka Streams:
- versions < 0.11.0,
- versions 0.11.0.x with EOS turned off
- versions: 2.0.x, 2.1.x, and 2.2.0
- with EOS turned off
- without message headers
- note: message format 0.10+ is required
- versions 2.2.1, 2.3.0, and newer are not supported (because they use headers internally, which require broker 0.11.0 and message format 0.11))
- Kafka Connect: versions <= 0.10.1
- Features that newer clients might notice missing:
- AdminClient
Broker 0.10.2
- Basic client compatibility:
- Java: any version
- KIP-35 enabled clients: any version
- Kafka Streams:
- versions < 0.11.0,
- versions 0.11.0.x with EOS turned off
- versions 2.0.x, 2.1.x, and 2.2.0
- with EOS turned off
- without message headers
- note: message format 0.10+ is required
- versions 2.2.1, 2.3.0, and newer are not supported (because they use headers internally that require broker 0.11.0 and message format 0.11)
- Kafka Connect: any version
- Features that newer clients might notice missing:
- AdminClient
Broker 0.11.0
- Basic client compatibility:
- Java: any version
- KIP-35 enabled clients: any version
- Kafka Streams: any version
- note: since version 0.11.0, if EOS is used, message format 0.11+ is required
- note: since version 2.0, message format 0.10+ is required
- note: since version 2.0, if message headers are used, message format 0.11+ is required
- note, since 2.2.1 and 2.3.0 message format 0.11+ is required
- Kafka Connect: any version
- Features that newer clients might notice missing:
Broker 1.0.0
- Basic client compatibility:
- Java: any version
- KIP-35 enabled clients: any version
- Kafka Streams:
- note: since version 0.11.0, if EOS is used, message format 0.11+ is required
- note: since version 2.0, message format 0.10+ is required
- note: since version 2.0, if message headers are used, message format 0.11+ is required
- note, since 2.2.1 and 2.3.0 message format 0.11+ is required
- Kafka Connect: any version
- Features that newer clients might notice missing: