buffer.memory

Kafka的客户端发送数据到服务器,不是来一条就发一条,而是经过缓冲的,也就是说,通过KafkaProducer发送出去的消息都是先进入到客户端本地的内存缓冲里,然后把很多消息收集成一个一个的Batch,再发送到Broker上去的,这样性能才可能高。

buffer.memory的本质就是用来约束Kafka Producer能够使用的内存缓冲的大小的,默认值32MB

如果buffer.memory设置的太小,可能导致的问题是:消息快速的写入内存缓冲里,但Sender线程来不及把Request发送到Kafka服务器,会造成内存缓冲很快就被写满。而一旦被写满,就会阻塞用户线程,不让继续往Kafka写消息了。

所以“buffer.memory”参数需要结合实际业务情况压测,需要测算在生产环境中用户线程会以每秒多少消息的频率来写入内存缓冲。经过压测,调试出来一个合理值。

与batch.size的区别

batch.size Kafka producers attempt to collect sent messages into
batches to improve throughput. With the Java client, you can use
batch.size to control the maximum size in bytes of each message batch.

buffer.memory Use buffer.memory to limit the total memory that is
available to the Java client for collecting unsent messages. When this
limit is hit, the producer will block on additional sends for as long
as max.block.ms before raising an exception.

总结

  • 注意buffer.memorybatch.size参数的区别
  • 如果要发送大文件的话,要同时提高buffer.memorybatch.size的大小

参考

Kafka关键参数设置 - wwcom123 - 博客园
https://www.cnblogs.com/wwcom123/p/11181680.html

Apache-Kafka, batch.size vs buffer.memory - Stack Overflow

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐