首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache-Kafka,batch.size vs buffer.memory

Apache-Kafka,batch.size vs buffer.memory
EN

Stack Overflow用户
提问于 2018-04-04 10:56:48
回答 3查看 13.2K关注 0票数 16

我试图找出卡夫卡制片人的设置batch.size和buffer.memory之间的区别。

据我所知,batch.size:它是可以发送的批处理的最大大小。

文档将buffer.memory描述为:生产者可以用来缓冲等待发送的记录的内存字节。

我不明白这两者有什么区别。有人能解释一下吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2019-01-04 16:23:17

照我的想法,

batch.size:可以在单个请求中发送的最大数据量。如果batch.size是( 32 *1024),这意味着可以在一个请求中发送32 KB。

buffer.memory:如果卡夫卡生产商无法向卡夫卡经纪人发送消息(批次)(比如说经纪人破产)。它开始在缓冲区内存中积累消息批处理(默认为32 MB)。一旦缓冲区满了,它将等待"max.block.ms“(默认为60000 is ),以便可以清除缓冲区。那就是抛出异常。

票数 21
EN

Stack Overflow用户

发布于 2021-05-26 10:46:58

Kafka生产者和Kafka消费者有许多有助于性能优化的配置,比如获得低延迟和高吞吐量。buffer.memorybatch.size也是其中之一,这些都是卡夫卡制片人特有的。让我们看看有关这些配置的更多细节。

  1. buffer.memory,这将设置生产者将用于缓冲等待发送到代理的消息的内存量。如果消息由应用程序发送的速度比发送到服务器的速度快,那么生产者可能会耗尽空间,而附加的send()调用将是基于max.block.ms配置的阻塞或抛出异常,该配置允许阻塞一定时间,然后抛出异常。另一种情况可能是,由于任何原因,所有代理服务器都关闭了,而且kafka生产者将无法向代理发送消息,而生产者必须将这些消息保存在基于buffer.memory配置分配的内存中,但如果代理没有恢复正常状态,则很快就会填满这些消息,然后,如上所述,将考虑mx.block.ms时间来释放空间。max.block.ms的默认值为60,000 ms,buffer.memory的默认值为32 MB (33554432)
  2. batch.size当多个记录被发送到同一个分区时,生产者将将它们批量放入。此配置控制将用于每个批处理的以字节(而不是消息)为单位的内存量。当批处理已满时,批处理中的所有消息都将被发送。然而,这并不意味着生产者将等待批处理变得满。生产者将发送一半完整的批次,甚至批次中只包含一条消息。因此,将批处理大小设置得太大不会导致发送消息的延迟。它只会在批处理中使用内存。将批处理大小设置得太小会增加额外的开销,因为生产者需要更频繁地发送消息。默认批次大小为16384。

batch.size也是基于linger.ms工作的,后者控制在发送当前批处理之前等待其他消息的时间。正如我们所知,卡夫卡生产者发送了一批消息,无论是在rge当前批处理已满时,还是在到达linger.ms时间时。默认情况下,一旦有发送线程可以发送消息,prodcuer就会立即发送消息,即使bacth中只有消息。

票数 2
EN

Stack Overflow用户

发布于 2020-09-05 19:54:21

这两种生产者配置在合流文档页上都有如下描述:

  • batch.size

卡夫卡生产商试图将发送的信息分批收集,以提高吞吐量。使用Java,您可以使用batch.size来控制每个消息批处理的最大字节大小。

  • buffer.memory

使用buffer.memory限制用于收集未发送消息的Java可用的总内存。当达到此限制时,在引发异常之前,生产者将阻止附加发送直到max.block.ms

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49649241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档