我正在使用简单的使用者来读取kafka主题,并且有一个关于获取大小与主题中消息大小相关的问题。
可以说,我在主题中的每条消息都是10 kb。
当我从偏移量0开始消耗时,获取大小为16 kb(仅为了这个问题),它是否读取了1个完整消息和另一个6kb的部分消息?
link声明以下内容,但我不知道发生了什么
作为优化,允许服务器返回部分消息 在消息集的末尾。客户应该处理这种情况。
答案 0 :(得分:0)
如果你深入了解message sets and messages的编码方式,你会注意到它们通常以字节大小开头(与大小为项目数的所有其他结构不同),所以客户端首先读取消息集的大小,然后读取实际消息集的N个字节。消息也是如此 - 首先读取大小,然后读取大小为N的实际消息。
如果没有优化,Kafka服务器会检查获取响应是否超过了获取大小并回滚最后一条消息。
这里的优化非常简单:不是跟踪它应该回滚到哪里形成一个漂亮的获取响应而没有剪切消息,它只是累积消息,直到超过提取大小并且只删除超过提取大小的所有内容。
通过说Clients should handle this case
,这意味着任何有线协议实现者应该准备好大小为100的消息集,例如可能没有100多个字节要读取,因此客户端不应该失败并将其视为正常行为
希望这有帮助。