Kafka缓冲区大小和时间间隔

Abh*_*mar 5 apache-kafka

Kafka 根据 buffer.memory (在我的例子中为 32 MB)将数据保存在 Buffer 中。一旦达到 32 MB 限制,kafka 是否会将记录写入主题,或者是否还有与之相关的时间?

Dea*_*ool 4

从 Kafka 文档来看,buffer.memory只是指定生产者使用的缓冲区限制的属性。但由于设置此属性,生产者不会让生产者等到缓冲区已满才能将记录发送到服务器。

缓冲存储器

生产者可用于缓冲等待发送到服务器的记录的内存总字节数。如果记录发送速度快于传送到服务器的速度,生产者将阻塞 max.block.ms,之后将抛出异常。

此设置应大致对应于生产者将使用的总内存,但不是硬限制,因为并非生产者使用的所有内存都用于缓冲。一些额外的内存将用于压缩(如果启用压缩)以及维护正在进行的请求。

如果您希望生产者等待直到批量获取缓冲区中的某些记录,您可以使用linger.ms属性让生产者等待。但据我所知,没有严格的方法可以让生产者仅在缓冲区已满时等待并发送记录

Kafka生产者

默认情况下,即使缓冲区中有额外的未使用空间,缓冲区也可立即发送。但是,如果您想减少请求数量,可以将 linger.ms 设置为大于 0 的值。这将指示生产者在发送请求之前等待该毫秒数,以期有更多记录到达以填满同一批。