What is Fetch?
Consumers and follower replicas both issue this continuously for log replication and consumption. When a consumer's fetch stalls with empty responses despite records existing, check isolation.level: read_committed consumers are blocked by open transactions until EndTxn.
Wire Diagram
Response Header
message_size
int32 · 4B
correlation_id
int32 · 4B
FetchResponse v9
ThrottleTimeMs
int32 · 4B
ErrorCode
int16 · 2B
SessionId
int32 · 4B
Topic
string
PartitionIndex
int32 · 4B
ErrorCode
int16 · 2B
HighWatermark
int64 · 8B
LastStableOffset
int64 · 8B
LogStartOffset
int64 · 8B
Records?
records
ProducerId
int64 · 8B
FirstOffset
int64 · 8B
Schema & Example
Schema { "ThrottleTimeMs": int32, "ErrorCode": int16, "SessionId": int32, "Responses": [{ "Topic": string, "Partitions": [{ "PartitionIndex": int32, "ErrorCode": int16, "HighWatermark": int64, "LastStableOffset": int64, "LogStartOffset": int64, "AbortedTransactions": [{ "ProducerId": int64, "FirstOffset": int64 }]?, "Records": records? }] }] }
Example { "ThrottleTimeMs": 0, "ErrorCode": 0, "SessionId": 1847, "Responses": [{ "Topic": "orders", "Partitions": [{ "PartitionIndex": 3, "ErrorCode": 0, "HighWatermark": 284729, "LastStableOffset": 284729, "LogStartOffset": 284729, "AbortedTransactions": [{ "ProducerId": 0, "FirstOffset": 150382 }]?, "Records": "<binary>" }] }] }