请求包括头部和请求体。请求体因请求类型不同而不同,请求头部格式固定包括:

api_key:请求类型如producer请求/fetch请求/元数据请求

api_version:给定一请求类型的具体版本

correlation_id:类似request_id,用于定位问题

client_id:发送该请求的客户端ID

响应也分为头部和响应体,响应头部格式固定:

correlationd_id:请求字段中的correlation_id

注:[x]代表是一个数组,数组中每个元素是x

一 producer

1.1 请求

生产者发送给broker,完成生产消息的推送。

api_key=0

最新的版本是api_version=5

请求格式:api_key  api_version correlation_id clinet_id transaction_id acks  timeout [topic data]

transaction_id:事务ID,用于支持事务,字符串类型。如果不支持事务则该字段空。

acks:发送消息后broker必须应答的数码,包括0 -1 1

timeout:请求超时时间,以毫秒为单位,

topicdata:producer请求的主要数据,里面封装了要发送的消息数据包括:

topic

[partition+msg set]

故一个producer请求可以发送多个topic,每个topic又可以包括多个分区的消息。

1.2 响应

[response]

每个response数据对应一个topic的响应,包括:

partition

error_code

base_offset:该消息集合的起始位移

log_append_time:broker写入消息时间

log_start_offset:该response被创建时该分区日志总的起始位移

二 fetch

2.1 请求

follow副本发往Leader副本用于备份

api_key=1

最新的版本是api_version=6

请求格式:api_key  api_version replica_id max_wait_time  min_bytes max_bytes isolation_level [topic data]

replicae_id:表示副本ID

max_wait_time:等待响应返回的最大时间

min_bytes:响应中应包含的最小字节数默认1也就是只需要broker积累了1个字节数据就可以返回响应

max_bytes:响应中应包含的最大字节数

isolation_level:fetch请求隔离级别,当前主要两种:不可提交读和可提交读

topic data主要包括:

topic

[partition data]

partition data 包括partition_Id  fetch_offset(需从分区哪个位移开始读取消息)  log_start_offset(follow副本最早可用的分区的起始位移) max_bytes(该分区最多可以读取多少字节数)

2.1 响应

[response]

每个response对应一个topic数据,包括

topic

[partition res]

每个partition res包括:

partitionID errorcode HW msg set

三 元数据

3.1 请求

用于生产者消费者follow获取topic元数据信息如分区数 LEADER Follow ISR等

api_key api_version correlation_id clinet_id [topic]

topic:想要获取的topic名称

3.2 响应

correlation_id [broker data]  culster_id  contrlloer_id  [topic meta]

[broker data]:集群broker列表,每个包括node_id host  port rack机架

cluser_Id:集群ID

controller_Id:该集群controllerID

[topic meta]每个包括一个topic下元数据信息包括

error_code

leader

follower

ISR