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

Apache kafka 如何为kafka分区中的每条记录设置记录大小的大小?,apache-kafka,Apache Kafka,我想知道卡夫卡主题中的每条记录是否占用相同的大小,而不考虑消息的实际大小 我知道以下属性->max.message.bytes=1000012,这将使记录的大小达到1000012字节 我的问题是,如果传入的记录小于这些字节,那么为它留出的空间的实际大小是多少 max.message.bytes:卡夫卡允许的最大记录批量大小。如果这是增加 还有一些消费者年龄大于0.10.2,即消费者的取数大小 还必须增加,以便他们能够获取此批记录 大的 据我所知,您正在询问是否每条消息都将保留一个等于max.me

我想知道卡夫卡主题中的每条记录是否占用相同的大小,而不考虑消息的实际大小

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

我的问题是,如果传入的记录小于这些字节,那么为它留出的空间的实际大小是多少

max.message.bytes
:卡夫卡允许的最大记录批量大小。如果这是增加 还有一些消费者年龄大于0.10.2,即消费者的取数大小 还必须增加,以便他们能够获取此批记录 大的

据我所知,您正在询问是否每条消息都将保留一个等于
max.message.bytes
的空间

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

根据

max.message.bytes
:卡夫卡允许的最大记录批量大小。如果这是增加 还有一些消费者年龄大于0.10.2,即消费者的取数大小 还必须增加,以便他们能够获取此批记录 大的

据我所知,您正在询问是否每条消息都将保留一个等于
max.message.bytes
的空间


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

在卡夫卡中,代理将制作人发送的内容添加到磁盘上

但是,正如您所暗示的,制作人将消息包装到一个记录和一个批中

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

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

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


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

在Kafka中,代理将几乎完全按照制作者发送的内容追加到磁盘

但是,正如您所暗示的,制作人将消息包装到一个记录和一个批中

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

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

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


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

谢谢您的回答。我目前的理解是,卡夫卡收到的任何东西都存储在卡夫卡主题的偏移量中。所以,如果我收到消息-1,它将被存储在一个偏移量,类似地,对于消息-2,它将被存储在下一个偏移量。但我不知道“批处理”。怎么会有一批呢?你能帮助理解或提供一些链接吗?偏移量与大小没有链接。在偏移量0处可以有10MB的消息,在偏移量1处可以有1k的消息。卡夫卡记录始终是批次的一部分,但制作人也可以在批次中包含多条记录,以减少总体大小并提高吞吐量,请参阅制作人设置
linger.ms
batch.size
,谢谢您的回答。我目前的理解是,卡夫卡收到的任何东西都存储在卡夫卡主题的偏移量中。所以,如果我收到消息-1,它将被存储在一个偏移量,类似地,对于消息-2,它将被存储在下一个偏移量。但我不知道“批处理”。怎么会有一批呢?你能帮助理解或提供一些链接吗?偏移量与大小没有链接。在偏移量0处可以有10MB的消息,在偏移量1处可以有1k的消息。卡夫卡记录始终是批次的一部分,但生产商也可以在批次中包含多条记录,以减少总体大小并提高吞吐量,请参阅生产商设置
linger.ms
batch.size