Hi all,

I am working on upgrading the Kafka cluster from the version 2.0.1 to
3.5.2. The main concern in that update is passing version 2.1 which has the
following note in the upgrade document:
```
Note that 2.1.x contains a change to the internal schema used to store
consumer offsets. Once the upgrade is complete, it will not be possible to
downgrade to previous versions.
```
In the rolling upgrade section the documentation says the following:
```
Restart the brokers one by one for the new protocol version to take effect.
Once the brokers begin using the latest protocol version, it will no longer
be possible to downgrade the cluster to an older version.
```
So, as soon as inter.broker.protocol.version is set to 2.1+ you should not
be able to rollback to the old version.
I did reproduce the issue with the rollback with the following steps:
1. Start cluster with Kafka 2.0.1 binaries and
inter.broker.protocol.version=2.0. Produce some messages in the test topic
2. Restart cluster with Kafka 3.5.2 binaries
and inter.broker.protocol.version=3.5. Consume messages.
3. Restart cluster once again with Kafka 2.0.1 binaries and
inter.broker.protocol.version=2.0. During start you will get error like
this:
```
ERROR [GroupMetadataManager brokerId=0] Error loading offsets from
__consumer_offsets-43 (kafka.coordinator.group.GroupMetadataManager)
org.apache.kafka.common.KafkaException: Unknown group metadata version 3
```

The interesting thing is that this doesn't happen if I rollback
inter.broker.protocol.version to 2.0 using Kafka 3.5.2 binaries. Cluster is
able to start and read all the data from the __consumer_offsets partitions
with metadata version 3.
The question is that expected behavior? Below are the steps that I have
used:
1. Start cluster with Kafka 2.0.1 binaries and
inter.broker.protocol.version=2.0. Produce some messages in the test topic
2. Restart cluster with Kafka 3.5.2 binaries
and inter.broker.protocol.version=3.5. Consume messages.
3. Restart cluster once again with Kafka 3.5.2 binaries and
inter.broker.protocol.version=2.0. Cluster starts properly and is able to
read partitions from the __consumer_offsets topic.

I did double check Kafka startup logs and make sure that it uses configured
inter.broker.protocol.version versions.
if this is okay, then I guess that can be used as a rollback in case of
problems after switching to the inter.broker.protocol.version 3.X

Thanks in advance,
Dmytro

Reply via email to