conduktor.io ↗

Kafka Produce Response Wire Format v13 — Binary Protocol Layout

What is Produce?

Every producer sends this for every message publish, making it the dominant write path. With acks=all, the broker waits for all ISR replicas to acknowledge before responding; acks=1 returns after the leader writes locally; acks=0 is fire-and-forget with no loss detection.

Related Errors

CORRUPT_MESSAGE · DUPLICATE_SEQUENCE_NUMBER · INVALID_PRODUCER_EPOCH · INVALID_RECORD · INVALID_REQUIRED_ACKS · INVALID_TIMESTAMP · INVALID_TXN_STATE · LEADER_NOT_AVAILABLE · MESSAGE_TOO_LARGE · NETWORK_EXCEPTION · NOT_ENOUGH_REPLICAS · NOT_ENOUGH_REPLICAS_AFTER_APPEND · NOT_LEADER_OR_FOLLOWER · OUT_OF_ORDER_SEQUENCE_NUMBER · RECORD_LIST_TOO_LARGE · THROTTLING_QUOTA_EXCEEDED · TOPIC_AUTHORIZATION_FAILED · TRANSACTIONAL_ID_AUTHORIZATION_FAILED · TRANSACTION_COORDINATOR_FENCED · UNKNOWN_PRODUCER_ID · UNKNOWN_TOPIC_ID · UNKNOWN_TOPIC_OR_PARTITION · UNSUPPORTED_FOR_MESSAGE_FORMAT

Wire Diagram

Response Header · flexible
message_size int32 · 4B
correlation_id int32 · 4B
tagged var
ProduceResponse v13
Responses array
ThrottleTimeMs int32 · 4B
NodeEndpoints array
tagged var
TopicId uuid · 16B
PartitionResponses array
tagged var
Index int32 · 4B
ErrorCode int16 · 2B
BaseOffset int64 · 8B
LogAppendTimeMs int64 · 8B
LogStartOffset int64 · 8B
RecordErrors array
ErrorMessage? string (compact)
CurrentLeader struct
tagged var
BatchIndex int32 · 4B
BatchIndexErrorMessage? string (compact)
tagged var
LeaderId int32 · 4B
LeaderEpoch int32 · 4B
tagged var
NodeId int32 · 4B
Host string (compact)
Port int32 · 4B
Rack? string (compact)
tagged var

Schema & Example

Schema
{
  "Responses": [{
      "TopicId": uuid,
      "PartitionResponses": [{
          "Index": int32,
          "ErrorCode": int16,
          "BaseOffset": int64,
          "LogAppendTimeMs": int64,
          "LogStartOffset": int64,
          "RecordErrors": [{
              "BatchIndex": int32,
              "BatchIndexErrorMessage": string?
          }],
          "ErrorMessage": string?,
          "CurrentLeader": {
            "LeaderId": int32,
            "LeaderEpoch": int32
          }
      }]
  }],
  "ThrottleTimeMs": int32,
  "NodeEndpoints": [{
      "NodeId": int32,
      "Host": string,
      "Port": int32,
      "Rack": string?
  }]
}
Example
{
  "Responses": [{
      "TopicId": "550e8400-e29b-41d4-a716-446655440000",
      "PartitionResponses": [{
          "Index": 3,
          "ErrorCode": 0,
          "BaseOffset": 284729,
          "LogAppendTimeMs": 1711648200000,
          "LogStartOffset": 284729,
          "RecordErrors": [{
              "BatchIndex": 0,
              "BatchIndexErrorMessage": null
          }],
          "ErrorMessage": null,
          "CurrentLeader": {
            "LeaderId": 1,
            "LeaderEpoch": 17
          }
      }]
  }],
  "ThrottleTimeMs": 0,
  "NodeEndpoints": [{
      "NodeId": 1,
      "Host": "broker-1.kafka.local",
      "Port": 9092,
      "Rack": "us-east-1a"
  }]
}