我正在使用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);
我该怎么办?
谢谢
答案 0 :(得分:3)
正式使用KafkaProducer
和producerRecord
不能做到这一点,但是可以通过在ProducerConfig
中配置一些属性来做到这一点
batch.size 将记录分批处理成发送到同一分区的请求,并立即发送
每当将多个记录发送到同一分区时,生产者将尝试将记录一起批处理成更少的请求。这有助于提高客户端和服务器的性能。此配置控制默认的批处理大小(以字节为单位)。 不会尝试批处理大于此大小的记录。
linger.ms 此设置用于延迟生产者的时间,以保留生产者一些时间,以便同时打包和发送所有请求,但 batch.size 是上限,如果生产者获得足够的批处理大小,它将忽略此属性并将批处理消息发送到kafka
生产者将在请求传输之间到达的所有记录归为一个批处理的请求。此设置通过添加少量的人为延迟来实现此目的-也就是说,与其立即发送记录,生产者将等待直到给定的延迟,才允许发送其他记录,以便可以将发送分批在一起。此设置给出了批处理延迟的上限:一旦获得分区的记录的批处理大小,无论该设置如何,它都会立即发送。