kafka的分片怎么设置(Producer中batch.size和linger.ms参数的含义)

生产者发送多个消息到同一个分区的时候,为了减少网络带来的系能开销,kafka会对消息进行批量发送。

一、batch.size 参数

通过这个参数来设置批量发送的数据大小,默认是16k,当积压的消息达到这个值的时候就会统一发送(发往同一分区的消息)。

二、linger.ms 参数

这个是设置消息发送延迟,这样可以收集更多的消息后批量发送,默认大小是0ms(就是有消息就立即发送)。

当这两个参数同时设置的时候,只要两个条件中满足一个就会发送。比如说batch.size设置16kb,linger.ms设置50ms,那么当消息积压达到16kb就会发送,如果没有到达16kb,那么在第一个消息到来之后的50ms之后消息将会发送。

kafka的分片怎么设置(Producer中batch.size和linger.ms参数的含义)(1)

三、max.request.size 参数

默认是1M,请求的最大字节数。

kafka的分片怎么设置(Producer中batch.size和linger.ms参数的含义)(2)

一旦设置了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(); } }

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页