kafka buffer.memory参数入门
buffer.memoryKafka的客户端发送数据到服务器,不是来一条就发一条,而是经过缓冲的,也就是说,通过KafkaProducer发送出去的消息都是先进入到客户端本地的内存缓冲里,然后把很多消息收集成一个一个的Batch,再发送到Broker上去的,这样性能才可能高。buffer.memory的本质就是用来约束Kafka Producer能够使用的内存缓冲的大小的,默认值32MB。如果bu
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.memory
与batch.size
参数的区别 - 如果要发送大文件的话,要同时提高
buffer.memory
和batch.size
的大小
参考
Kafka关键参数设置 - wwcom123 - 博客园
https://www.cnblogs.com/wwcom123/p/11181680.html
更多推荐
所有评论(0)