kafka protocol_error ai_generated true

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

org.apache.kafka.common.errors.UnsupportedForMessageFormatException: The message format version does not support the requested feature

ID: kafka/unsupported-for-message-format

其他格式: JSON · Markdown 中文 · English
90%修复率
87%置信度
1证据数
2024-03-05首次发现

版本兼容性

版本状态引入弃用备注
Kafka 2.8.0 active — — —
Kafka 3.0.0 active — — —
Kafka 3.2.0 active — — —

根因分析

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

English

Broker or topic uses an older message format (e.g., v0 or v1) that lacks support for features like headers, timestamps, or idempotent writes.

generic

官方文档

https://kafka.apache.org/documentation/#message_format

解决方案

  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.

无效尝试

常见但无效的做法:

  1. Set enable.idempotence=false in producer 40% 失败

    Disabling idempotence may work but loses exactly-once semantics; feature still unsupported at broker level.

  2. Change message.format.version to a higher value in producer config 95% 失败

    Producer-side config does not override broker/topic message format; broker must be upgraded.

  3. Delete and recreate the topic with default settings 70% 失败

    Default settings may still use old format if cluster is not upgraded; also causes data loss.