kafka二进制协议分析与PHP客户端开发

本文详细探讨了kafka的二进制协议,包括数据类型、错误码、Api Keys和报文结构,并重点分析了请求和响应格式。此外,还介绍了如何基于此协议实现PHP客户端,利用pack/unpack函数处理二进制数据,以及提供了一个简化二进制数据流操作的PHP io库。
摘要由CSDN通过智能技术生成

最近分享了《应用层私有协议的设计和实战》,对应用层私有协议设计做了一些介绍,同时也对协议设计中常用的数据类型做了比较形象的讲解,今天我们来研究一下kafka的二进制协议。

数据类型

kafka二进制协议定义了许多的数据类型,包含常用的数字、字符串,也包含了数组等类型。

本文主要讨论不可变长数据类型,可变长度(如Google Protocol Buffers)不在讨论范围内。

数据类型
字节长度 说明
BOOLEAN
1
布尔值
INT8
1
单字节整型,-2^7 ~ 2^7-1
INT16
2
双字节整型,大端序,范围 -2^15 ~ 2^15 - 1
INT32
4
四字节整型、大端序,范围 -2^31 ~ 2^31 - 1
INT64
8
八字节整型、大端序,范围 -2^63 ~ 2^63 -1
UINT32
4
十字街
UUID
16
16字节,Java UUID类型
STRING
2 N
头部由2字节标识字符串长度N,后续N字节为字符串内容
NULLABLE_STRING 2 N
头部由2字节标识字符串长度N,后续N字节为字符串内容,N为-1时无后续内容
BYTES
4 N
头部4字节标识字节数组长度,后续N字节为字节数组内容
NULLABLE_BYTES
4 N
头部4字节标识字节数组长度,后续N字节为字节数组内容,N为-1时无后续内容
ARRAY
4 N*M
头部4字节标识数组长度N,M为单个数组元素的长度,N为-1时为空数组

错误码

  • -1 未知错误
  • 0 未出错
  • 大于0, 具体错误

kafka内置的操作类型有点多,有兴趣的可以参阅kafka错误码

Api Keys

可以理解为操作码,服务端根据该字段区分当前请求操作。

这里不做展开,有兴趣的可以参阅kafka Api Keys

报文结构

接下来我们重点分析一下kafka的报文结构。

本文基于kafka V1版本协议写作,其他版本的研究原理时一致的。

整体结构

kafka的协议结构比较简单,请求和响应使用同样的整体结构。

RequestOrResponse => Size (RequestMessage | ResponseMessage)
  Size => int32

我们转化为表格来看看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值