如何在kafka分区中为每个记录设置记录大小的大小?

时间:2019-05-28 12:31:01

标签: apache-kafka apache-kafka-streams

我想知道kafka主题中的每条记录是否占用相同大小,而不管消息的实际大小如何?

我知道以下属性-> max.message.bytes=1000012,这将使记录的大小最大为1000012个字节。

我的问题是,传入记录是否少于这些字节,为此预留的实际空间大小是多少?

2 个答案:

答案 0 :(得分:1)

根据Kafka Docs

  

max.message.bytes:Kafka允许的最大记录批次大小。如果增加   且消费者的年龄大于0.10.2   还必须增加,以便他们可以获取记录批次   大。

据我了解,您正在询问每封邮件是否将保留等于max.message.bytes的空间。

答案是否定的。 max.message.bytes定义了一条消息的最大允许大小,而不是每条消息的大小。

答案 1 :(得分:1)

在Kafka中,代理几乎完全将生产者发送的内容附加到磁盘上。

但是,正如您所提示的,生产者将消息包装成记录和一批。

这些数据结构的完整描述可以在documentation中找到。

除了很小的消息外,消息占用的磁盘空间主要取决于其大小,因为每条消息的Kafka开销相对较小。

例如,对于10个字节的无键或标头的单个消息,磁盘上的大小将为78个字节。这似乎是一个很大的开销,但是由于无论消息大小如何,它几乎都是恒定的,如果有效负载为1024字节,则磁盘总占用量仅为1094字节。

如果考虑批处理,那么开销将进一步减少,因为批处理标头(〜50字节)将用于多条记录。