我想知道kafka主题中的每条记录是否占用相同大小,而不管消息的实际大小如何?
我知道以下属性-> max.message.bytes=1000012
,这将使记录的大小最大为1000012
个字节。
我的问题是,传入记录是否少于这些字节,为此预留的实际空间大小是多少?
答案 0 :(得分:1)
max.message.bytes
:Kafka允许的最大记录批次大小。如果增加 且消费者的年龄大于0.10.2 还必须增加,以便他们可以获取记录批次 大。
据我了解,您正在询问每封邮件是否将保留等于max.message.bytes
的空间。
答案是否定的。 max.message.bytes
定义了一条消息的最大允许大小,而不是每条消息的大小。
答案 1 :(得分:1)
在Kafka中,代理几乎完全将生产者发送的内容附加到磁盘上。
但是,正如您所提示的,生产者将消息包装成记录和一批。
这些数据结构的完整描述可以在documentation中找到。
除了很小的消息外,消息占用的磁盘空间主要取决于其大小,因为每条消息的Kafka开销相对较小。
例如,对于10个字节的无键或标头的单个消息,磁盘上的大小将为78个字节。这似乎是一个很大的开销,但是由于无论消息大小如何,它几乎都是恒定的,如果有效负载为1024字节,则磁盘总占用量仅为1094字节。
如果考虑批处理,那么开销将进一步减少,因为批处理标头(〜50字节)将用于多条记录。