cal*_*123 5 apache-kafka kafka-producer-api
我试图弄清楚Kafka Producer中的设置batch.size和buffer.memory之间的区别。
据我了解batch.size:这是可以发送的批处理的最大大小。
该文档将buffer.memory描述为:生产者可以用来缓冲等待发送的记录的内存字节。
我不明白这两者之间的区别。有人可以解释吗?
谢谢
Shi*_*arg 17
在我看来,
batch.size:单个请求中可以发送的最大数据量。如果 batch.size 为 (32*1024),则意味着可以在单个请求中发送 32 KB。
buffer.memory:如果 Kafka Producer 无法将消息(批次)发送到 Kafka 代理(假设代理已关闭)。它开始在缓冲存储器(默认为 32 MB)中累积消息批次。一旦缓冲区已满,它将等待“ max.block.ms ”(默认为60,000 毫秒),以便可以清除缓冲区。然后是抛出异常。
Kafka Producer 和 Kafka Consumer 有许多配置有助于性能调整,例如获得低延迟和高吞吐量。buffer.memory和batch.size也是其中之一,这些是特定于Kafka Producer 的。让我们看看这些配置的更多细节。
buffer.memory 这设置了生产者将用于缓冲等待发送到代理的消息的内存量。如果应用程序发送消息的速度快于传递到服务器的速度,则生产者可能会耗尽空间,并且额外的 send() 调用将被阻止或抛出异常(基于 max.block.ms 配置,该配置允许阻塞特定时间)时间,然后抛出异常。另一种情况可能是,如果所有代理服务器由于任何原因而关闭,并且 kafka 生产者将无法向代理发送消息,并且生产者必须将这些消息保留在根据buffer.memory配置分配的内存中,但是如果以下情况,该内存很快就会被填满: Broker没有恢复正常状态那么上面提到的mx.block.ms时间就会被认为释放空间。max.block.ms 的默认值为 60,000 ms buffer.memory 的默认值为 32 MB (33554432)
batch.size 当多条记录发送到同一个分区时,生产者会将它们分批放入。此配置控制每个批次将使用的内存量(以字节为单位)(而不是消息)。当批次满时,该批次中的所有消息都会被发送。然而,这并不意味着生产者将等待批次变满。生产者将发送半满批次,甚至发送仅包含一条消息的批次。因此,将批量大小设置得太大不会导致消息发送延迟。它只会使用内存来进行批次。将批量大小设置得太小会增加额外的开销,因为生产者需要更频繁地发送消息。默认批量大小为 16384。
batch.size 也是基于linger.ms 的,它控制发送当前批次之前等待其他消息的时间量。我们知道,当当前批次已满或达到 linger.ms 时间时,Kafka 生产者会发送一批消息。默认情况下,只要有发送者线程可用于发送消息,prodcuer 就会立即发送消息,即使 bacth 中只有消息。
| 归档时间: |
|
| 查看次数: |
1449 次 |
| 最近记录: |