# org.apache.kafka.common.errors.UnsupportedForMessageFormatException: 消息格式版本不支持请求的功能

- **ID:** `kafka/unsupported-for-message-format`
- **领域:** kafka
- **类别:** protocol_error
- **验证级别:** ai_generated
- **修复率:** 90%

## 根因

代理或主题使用较旧的消息格式（如v0或v1），缺少对头部、时间戳或幂等写入等功能的支持。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Kafka 2.8.0 | active | — | — |
| Kafka 3.0.0 | active | — | — |
| Kafka 3.2.0 | active | — | — |

## 解决方案

1. ```
   Upgrade the topic's message format version to v2 using kafka-topics.
Command:
kafka-topics --bootstrap-server localhost:9092 --alter --topic my-topic --config message.format.version=2.8
Verify:
kafka-topics --bootstrap-server localhost:9092 --describe --topic my-topic
If using older Kafka version (< 2.8), upgrade the entire cluster first.
   ```
2. ```
   Set inter.broker.protocol.version to match the cluster version and ensure all brokers are on the same version.
In server.properties:
inter.broker.protocol.version=3.2
log.message.format.version=3.2
Then rolling restart brokers.
   ```

## 无效尝试

- **Set enable.idempotence=false in producer** — Disabling idempotence may work but loses exactly-once semantics; feature still unsupported at broker level. (40% 失败率)
- **Change message.format.version to a higher value in producer config** — Producer-side config does not override broker/topic message format; broker must be upgraded. (95% 失败率)
- **Delete and recreate the topic with default settings** — Default settings may still use old format if cluster is not upgraded; also causes data loss. (70% 失败率)
