Apache kafka Apache Kafka,batch.size vs buffer.memory

Apache kafka Apache Kafka,batch.size vs buffer.memory,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我正试图找出卡夫卡制作程序中batch.size和buffer.memory设置之间的区别 据我所知,batch.size是可以发送的批的最大大小 文档将buffer.memory描述为:生产者可以用来缓冲等待发送的记录的内存字节 我不明白这两者之间的区别。有人能解释一下吗 谢谢在我看来 batch.size:单个请求中可发送的最大数据量。如果batch.size为(32*1024),则表示可以在单个请求中发送32 KB buffer.memory:如果卡夫卡制作人无法向卡夫卡代理发送消息(批处

我正试图找出卡夫卡制作程序中batch.size和buffer.memory设置之间的区别

据我所知,batch.size是可以发送的批的最大大小

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

我不明白这两者之间的区别。有人能解释一下吗

谢谢

在我看来

batch.size:单个请求中可发送的最大数据量。如果batch.size为(32*1024),则表示可以在单个请求中发送32 KB


buffer.memory:如果卡夫卡制作人无法向卡夫卡代理发送消息(批处理)(假设代理已关闭)。它开始在缓冲内存中累积消息批(默认为32 MB)。一旦缓冲区已满,它将等待“max.block.ms”(默认60000ms),以便清除缓冲区。然后是抛出异常。

上对这两种生产者配置的描述如下:

  • 批量大小
卡夫卡制作者试图将发送的消息收集成批,以提高吞吐量。使用Java客户端,您可以使用批处理.size来控制每个消息批处理的最大字节大小

  • 缓冲区。内存
使用buffer.memory限制Java客户端用于收集未发送消息的总内存。当达到此限制时,生产者将在引发异常之前阻止额外的发送,只要max.block.ms


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

  • 缓冲区。内存 这将设置生产者用于缓冲等待发送到代理的消息的内存量。如果应用程序发送消息的速度快于发送到服务器的速度,则生产者可能会耗尽空间,并且额外的send()调用将基于max.block.ms配置阻塞或抛出异常,该配置允许阻塞一段时间,然后抛出异常。另一种情况可能是,如果所有代理服务器由于任何原因关闭,kafka producer将无法向代理发送消息,并且producer必须将这些消息保留在根据缓冲区配置分配的内存中。内存配置,但如果代理未恢复正常状态,则会很快填满,如上所述mx.block.ms时间将被视为释放空间。 max.block.ms的默认值为60000 ms buffer.memory的默认值为32 MB(33554432)

  • 批量大小 当多条记录被发送到同一个分区时,生产者将把它们分批放入。此配置以字节(而非消息)为单位控制要使用的内存量 用于每批。当批处理已满时,将发送批处理中的所有消息。然而,这并不意味着生产商将等待批次变满。生产商将发送半个完整批次,甚至只包含一条消息的批次。因此,将批大小设置得太大不会导致发送消息的延迟。它将只为批处理使用内存。将批大小设置得太小会增加额外的开销,因为生产者需要更频繁地发送消息。 默认批量大小为16384


  • batch.size也基于linger.ms工作,它控制在发送当前批之前等待其他消息的时间量。正如我们所知,Kafka producer在rge当前批次已满或达到linger.ms时间时发送一批消息。默认情况下,prodcuer将在有发送者线程可用于发送消息时立即发送消息,即使bacth中只有消息。

    buffer.memory对启用压缩的生产者起什么作用?buffer.memory的大小是否需要大于未压缩的消息或压缩的消息?buffer.memory对启用压缩的生产者起什么作用?buffer.memory的大小是否需要大于未压缩的消息或压缩的消息?