Kafka Producer中batch.size和linger.ms参数的含义?
生产者发送多个消息到同一个分区的时候,为了减少网络带来的系能开销,kafka会对消息进行批量发送。
一、batch.size 参数
通过这个参数来设置批量发送的数据大小,默认是16k,当积压的消息达到这个值的时候就会统一发送(发往同一分区的消息)。
二、linger.ms 参数
这个是设置消息发送延迟,这样可以收集更多的消息后批量发送,默认大小是0ms(就是有消息就立即发送)。
当这两个参数同时设置的时候,只要两个条件中满足一个就会发送。比如说batch.size设置16kb,linger.ms设置50ms,那么当消息积压达到16kb就会发送,如果没有到达16kb,那么在第一个消息到来之后的50ms之后消息将会发送。
三、max.request.size 参数
默认是1M,请求的最大字节数。
一旦设置了linger.ms,当producer负载很低的时候batch被填满的速度就会很慢,此时Kafka producer的确会延时一段时间(linger.ms)才能将其发送出去——这是linger.ms应用的主要场景。反之,如果负载很高,甚至batch被填满的时间远低于linger.ms,那么此时linger.ms就不起任何作用了。
四、示例代码
下面是Kafka Producer 示例代码,其中设置了producer的batch.size=16kb、linger.ms=1 等等参数。
package com.rickie.kafka; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties; public class ProducerParamsDemo { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("acks", "all"); props.put("retries", 0); props.put("batch.size", 16384); props.put("linger.ms", 1); props.put("buffer.memory", 33554432); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props); for(int i = 0; i < 100; i++) { producer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), Integer.toString(i))); } producer.close(); } }
相关推荐
yanghuashuiyue 2020-11-14
huangwei00 2020-10-14
hannuotayouxi 2020-08-20
guicaizhou 2020-08-01
sweetgirl0 2020-07-27
Kafka 2020-09-18
liuxingen 2020-11-13
wangying 2020-11-13
王谦 2020-11-03
shenzhenzsw 2020-10-09
guicaizhou 2020-09-30
jiaomrswang 2020-09-23
jyj0 2020-09-21
guicaizhou 2020-09-15
amwayy 2020-08-03
yangyutong00 2020-08-01
weikaixxxxxx 2020-08-01
PoppyEvan 2020-08-01