kafka通信协议(一)

本文介绍了Kafka基于TCP的二进制通信协议,包括基本数据类型、请求和响应格式,以及部分如SASL握手、元数据、生产和消费请求的详细格式。通过对协议的解析,帮助理解Kafka如何进行高效的数据交换。
摘要由CSDN通过智能技术生成

简介

Kafka使用基于TCP的二进制协议,该协议定义了所有API的请求及响应消息。所有的消息都是通过长度来分隔,并且由后面描述的基本类型组成。

基本数据类型

  • 定长基本类型
    int8/int16/int32/int64这些都是不同精度的带符号整数,以大端(big endian)方式存储。
  • 变长基本类型
    这些类型由一个表示长度的带符号整数N以及后续N字节的内容组成,长度如果为-1则表示空。
    string使用int16表示长度,bytes使用int32表示长度。
  • 数组
    这个类型用来处理重复的结构体数据,它们总是由一个代表元素个数int32的整数N,以及后续N个重复结构体组成。
    这些结构体自身是由其他的基本数据类型组成。

通用的请求和响应格式

  • 所有请求和响应都遵循以下语法基础:
RequestOrResponse --> Size( RequestMessage | ResponseMessage )
    Size --> int32

Size给出了后续请求或响应消息的字节长度。
解析时应先读取4字节的长度N,然后读取并解析后续的N字节请求/响应内容。

  • 所有请求都具有以下格式:
RequestMessage --> request_header request
    request_header --> api_key api_version correlation_id client_id
        api_key --> int16
        api_version --> int16
        correlation_id -->int32
        client_id --> string
    request --> MetadataRequest | ProduceRequest | FetchRequest | ...

api_key: 这是一个表示所调用的API的数字ID(即不同类型的请求有不同的ID)
api_version: 这是该API的一个数字版本号,Kafka为每个API定义一个版本号,该版本号允许服务器根据版本号正确地解释请求内容。
correlation_id: 这是一个用户提供的整数。它将被服务器原封不动的传回给客户端。用于匹配客户端和服务器之间的请求和响应。
client_idÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值