<a id="cloud-id-deprecated-clients"></a>

# Client Deprecation in Confluent Cloud

The Apache Kafka® 3.7 distribution released in Q1, 2024 included KIP-896. KIP-896 is the
proposal to remove support for older client protocol API versions in Kafka
4.0. The 3.7 release marked these older, client protocol API versions deprecated
with a notice that they will be completely dropped by 4.0. This page discusses
the changes in Confluent client behavior resulting from KIP-896.

Confluent provides one year of extended compatibility for customers’ Confluent Cloud
clusters. Starting February 2026, deprecated client requests will no longer be
accepted and will result in errors.

<!-- WARNING: THIS IS A SHARED FILE AND THE SOURCE IS LOCATED IN DOCS-COMMON. DO NOT ADD TO ANY OTHER REPO. -->

## Minimal compatible baseline

With the release of Kafka 4.0 in 2025, Confluent sets the new baseline for
client protocol API versions to Kafka 2.1.0, which was released in November 2018.
As a result, clients connecting to new clusters must use compatible API versions.

<!-- WARNING: THIS IS A SHARED FILE AND THE SOURCE IS LOCATED IN DOCS-COMMON. DO NOT ADD TO ANY OTHER REPO. -->

The following chart describes the minimal compatible versions of some popular
client libraries:

| Client                                                                                    | Version   | Released      |
|-------------------------------------------------------------------------------------------|-----------|---------------|
| Java client for Kafka                                                                     | 2.1.0     | November 2018 |
| Python ([confluent-kafka-python](https://github.com/confluentinc/confluent-kafka-python)) | 1.8.2     | October 2021  |
| .NET ([confluent-kafka-dotnet](https://github.com/confluentinc/confluent-kafka-dotnet))   | 1.8.2     | October 2021  |
| Go ([confluent-kafka-go](https://github.com/confluentinc/confluent-kafka-go))             | 1.8.2     | October 2021  |
| C/C++ ([librdkafka](https://github.com/confluentinc/librdkafka))                          | 1.8.2     | October 2021  |
| KafkaJS                                                                                   | 1.15.0    | November 2020 |
| Sarama                                                                                    | 1.29.1    | June 2021     |
| kafka-python                                                                              | 2.0.2     | Sep 2020      |

Any librdkafka-based protocols not listed in the preceding table have a version
minimum of 1.8.2 as specified in the October 2021 release of Apache Kafka®.

<!-- WARNING: THIS IS A SHARED FILE AND THE SOURCE IS LOCATED IN DOCS-COMMON. DO NOT ADD TO ANY OTHER REPO. -->

## List of deprecated Kafka APIs

| API                      | Deprecated version   |
|--------------------------|----------------------|
| Produce                  | V0-V2                |
| Fetch                    | V0-V3                |
| ListOffset               | V0                   |
| Metadata                 | None                 |
| OffsetCommit             | V0-V1                |
| OffsetFetch              | V0                   |
| FindCoordinator          | None                 |
| Heartbeat                | None                 |
| LeaveGroup               | None                 |
| SyncGroup                | None                 |
| DescribeGroups           | None                 |
| ListGroups               | None                 |
| SaslHandshake            | None                 |
| ApiVersions              | None                 |
| CreateTopics             | V0-V1                |
| DeleteTopics             | V0                   |
| DeleteRecords            | None                 |
| InitProducerId           | None                 |
| OffsetForLeaderEpoch     | V0-V1                |
| AddPartitionsToTxn       | None                 |
| AddOffsetsToTxn          | None                 |
| EndTxn                   | None                 |
| WriteTxnMarkers          | None                 |
| TxnOffsetCommit          | None                 |
| DescribeAcls             | V0                   |
| CreateAcls               | V0                   |
| DeleteAcls               | V0                   |
| DescribeConfigs          | V0                   |
| AlterConfigs             | None                 |
| AlterReplicaLogDirs      | V0                   |
| DescribeLogDirs          | V0                   |
| SaslAuthenticate         | None                 |
| CreatePartitions         | None                 |
| CreateDelegationToken    | V0                   |
| RenewDelegationToken     | V0                   |
| ExpireDelegationToken    | V0                   |
| DescribeDelegationToken: | V0                   |
| DeleteGroups             | None                 |

## How to identify deprecated client requests

You can monitor deprecated client requests from the Confluent Cloud Console on the
**Clients** overview page. You can filter clients by producers or consumers. You
can also use this page to identify clients with deprecated requests. The
**Client Version** column marks deprecated clients and their associated client
version with a warning icon. Display a tooltip by hovering the mouse over the
marker:

![image](client-apps/images/deprecated-cloud-1.png)

Click on the tool tip to get more information:

![image](client-apps/images/deprecated-cloud-2.png)

Users with the `MetricsViewer` role can query the
`io.confluent.kafka.server/deprecated_request_count` metric in the Confluent Cloud
Metrics API to identify clients sending deprecated requests. The query returns
the client’s ID, the principal using that client, and the request type the
client is using.

#### NOTE
Because Confluent Cloud identifies clients by principal and client ID, if your
installation has multiple clients using the same principal and client
ID, the Confluent Cloud Console may incorrectly report that all of them have
deprecated requests. In this scenario, you must manually inspect each client
to identify the one requiring an update.

The following example illustrates how to use the Metrics API to
query for a deprecated client:

1. Create a JSON file named `deprecated_requests_query.json` using the following
   template:
   ```json
   {
        "group_by": [
            "metric.client_id",
            "metric.principal_id",
            "metric.type",
            "resource.kafka.id"
        ],
        "aggregations": [
            {
            "metric": "io.confluent.kafka.server/deprecated_request_count",
            "agg": "SUM"
            }
        ],
        "filter": {
            "op": "AND",
            "filters": [
            {
                "field": "resource.kafka.id",
                "op": "EQ",
                "value": "CLUSTER_ID"
            }
            ]
        },
        "granularity": "ALL",
        "intervals": ["TIMESTAMP"]
    }
   ```
2. Change `lkc-CLUSTER_ID` and the `MY_TIMESTAMP` values to match your
   environment, for example, `lck-abcd0` for the `CLUSTER_ID` and
   `2025-04-11T00:00:00.000Z/PT10M` for the `TIMESTAMP`.
3. Save the JSON file.
4. Submit the JSON query as a POST.

   In the example below, change `<API_KEY>` and `<SECRET>` to match your
   environments:
   ```html
   http 'https://api.telemetry.confluent.cloud/v2/metrics/cloud/query' --auth '<API_KEY>:<SECRET>' < deprecated_requests_query.json
   ```

   Successful output will resemble the following:
   ```html
   {
       "data": [
           {
           "timestamp": "2025-04-11T00:00:00Z",
           "value": 1026.0,
           "resource.kafka.id": "lkc-xxxxx",
           "metric.principal_id": "u-xxxxx",
           "metric.type": "Produce",
           "metric.client_id": "cloud_client_id_1"
           },
           {
           "timestamp": "2025-04-11T00:00:00Z",
           "value": 6.0,
           "resource.kafka.id": "lkc-xxxxx",
           "metric.principal_id": "u-xxxxx",
           "metric.type": "ListOffsets",
           "metric.client_id": "cloud_client_id_1"
           }
       ]
   }
   ```

For more information on how to query the Metrics API, see [Confluent Cloud Metrics](../monitoring/metrics-api.md#metrics-api).

## Recommended upgrades based on client ID

Many Kafka clients many not report their official software library or version in their requests. If this is the case, you must inspect a client’s  `clientId` to identify the client type. Some client software embed recognizable identifiers, others do not. Further, some client identifiers have custom formats making it hard to determine their version or library.

The following list provides some examples of client IDs, the likely client type given the ID, and the actions you can take to upgrade the corresponding client:

| Client ID resembles                                                                        | What type of client?                                                                                                                                                | Suggested action to try                                                                                                                                                                                                                                                                                                                   |
|--------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `producer-X` or `consumer-X`                                                               | Possibly a Java producer/consumer using the default `clientId`. The client could can be anything if the customer manually created the `clientId`.                   | If a Java client, upgrade to the latest Java client version.                                                                                                                                                                                                                                                                              |
| `beats` or `filebeats`                                                                     | Possibly an Elastic’s filebeats product using the Sarama Kafka client under-the-hood.                                                                               | Base your approach on the `beats` version. If the version is 7.X or higher, try to resolve the problem with a change in the version configuration to a value of 2.1.0 or higher. If you are using a version older than 7.X, upgrade to the latest version of `beats`.                                                                     |
| (`some-string`)- ( [github.com/segmentio/kafka-go](http://github.com/segmentio/kafka-go) ) | A `kafka-go` [library](https://github.com/segmentio/kafka-go)<br/>client maintained by [Segment](https://segment.com/).                                             | The latest version of `segmentio/kafka-go` is *currently* not compliant for consumer applications. Confluent has raised an issue with the project to help remediate this flaw. Customers should use the latest version of the  `confluent-kafka-go` [library](https://github.com/confluentinc/confluent-kafka-go)<br/>which is compliant. |
| `sarama`                                                                                   | Sarama, a go client maintained by IBM. Sarama serves as the underlying client for other tools like beats                                                            | Upgrade to at least 1.29.1 and make sure that the Kafka is set to at least the 2.1.1 version.                                                                                                                                                                                                                                             |
| `rdkafka` or `rdkafka-producer`                                                            | This client either be a Confluent maintained or a third-party client that uses `librdkafka` under the hood, for example, `rdkafka` is used as a default `clientId`. | Upgrade to at least the librdkafka library’s 1.8.2 version. Ideally use the latest version.                                                                                                                                                                                                                                               |
| `kafka-python-producer-X` or  `kafka-python-consumer-X` or `kafka-python-X.Y.Z`            | A popular Python library for Kafka (`kafka-python`).                                                                                                                | Upgrade to the latest version.                                                                                                                                                                                                                                                                                                            |
| `Kafka-node-client`                                                                        | A popular JS library for Kafka (`kafka-node`).                                                                                                                      | No longer maintained. Try a different library such as `confluent-kafka-javascript` or KafkaJS. Though,  KafkaJS is also not maintained.                                                                                                                                                                                                   |
| `kaffe_producer_client`                                                                    | Likely to be the [“Kaffe”](https://github.com/spreedly/kaffe/tree/master) Kafka elixir client                                                                       | As this library appears to be inconsistently maintained, consider moving to something with more maintenance such as the [kafka_ex:master](https://github.com/kafkaex/kafka_ex/tree/master) branch.                                                                                                                                        |
| `aiokafka` or `aiokafka-producer-X`                                                        | The [aiokafka](https://github.com/aio-libs/aiokafka) Python client library                                                                                          | Upgrade to the latest version.                                                                                                                                                                                                                                                                                                            |
| `faust` and `faust-X.Y.Z`                                                                  | The [faust](https://github.com/faust-streaming/faust) library which serves as a Python alternative for Kafka Streams.                                               | Upgrade to the latest version.                                                                                                                                                                                                                                                                                                            |
| `ruby-kafka`                                                                               | Possibly the Zendesk [“ruby-kafka”](https://github.com/zendesk/ruby-kafka) client.                                                                                  | This client is officially deprecated by Zendesk. Consider another Ruby<br/>Kafka client such as the [karafka/rdkafka-ruby](https://github.com/karafka/rdkafka-ruby)  client which a third-party maintains.                                                                                                                                |

## Related content

- [Manage RBAC role bindings on Confluent Cloud](../security/access-control/rbac/manage-role-bindings.md#manage-rbac-role-bindings)
- [Monitor Confluent Cloud Clients](monitoring.md#ccloud-monitoring)
- [Confluent Cloud Metrics](../monitoring/metrics-api.md#metrics-api)
