请求包括头部和请求体。请求体因请求类型不同而不同,请求头部格式固定包括:
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