发送大量消息Kafka Producer

时间:2018-08-16 13:52:36

标签: apache-kafka

我正在使用Kafka。

我有1万个json列表,

目前,我将按以下方式发送Jsons:

for(int i=0 ;i< jsonList.size(); i++){
     ProducerRecord<K,V> record = new ProducerRecord(topic, jsonList[i]);
     producer.send(record);
}

发送每封邮件。

我想将列表发送到kafka,并使kafka在json之后发送json(没有一条消息包含所有json字符串),类似:

ProducerRecord<K,V> record = new ProducerRecord(topic, jsonList);
producer.send(record);

我该怎么办?

谢谢

1 个答案:

答案 0 :(得分:3)

正式使用KafkaProducerproducerRecord不能做到这一点,但是可以通过在ProducerConfig中配置一些属性来做到这一点

文档生产者的

batch.size 将记录分批处理成发送到同一分区的请求,并立即发送

  

每当将多个记录发送到同一分区时,生产者将尝试将记录一起批处理成更少的请求。这有助于提高客户端和服务器的性能。此配置控制默认的批处理大小(以字节为单位)。   不会尝试批处理大于此大小的记录。

linger.ms 此设置用于延迟生产者的时间,以保留生产者一些时间,以便同时打包和发送所有请求,但 batch.size 是上限,如果生产者获得足够的批处理大小,它将忽略此属性并将批处理消息发送到kafka

  

生产者将在请求传输之间到达的所有记录归为一个批处理的请求。此设置通过添加少量的人为延迟来实现此目的-也就是说,与其立即发送记录,生产者将等待直到给定的延迟,才允许发送其他记录,以便可以将发送分批在一起。此设置给出了批处理延迟的上限:一旦获得分区的记录的批处理大小,无论该设置如何,它都会立即发送。