使用的是storm框架,单例的kafka生产者是否会影响写入性能?

林开心 发表于: 2021-06-15   最后更新时间: 2021-06-15 15:51:27   842 游览

Java-Kafka生产者性能

使用的是storm框架,并且是一个单例的kafka生产者;每次遍历一个1000元素的list,这样写是否会影响写入性能。

for (String value : list) {
    kafkaProducer.send(new ProducerRecord<>(topic, value), new Callback() {
        @Override
        public void onCompletion(RecordMetadata metadata, Exception exception) {
            if (exception != null) {
                logger.error(exception);
            }
        }
    });
}
kafkaProducer.flush();
发表于 2021-06-15
添加评论

你这个是非阻塞发送,效率是最高的,没有问题的。

林开心 -> 半兽人 3年前

flush这一步是否有必要执行呢?

半兽人 -> 林开心 3年前

flush的作用是当你执行1000条之后,需要执行一下flush,为了清空你还在缓冲区待发送的消息。否则进程直接结束了,那还在缓冲区的消息就丢失了。

你也可以通过休眠几秒钟,等待这些缓冲区的消息发送出去了,不用执行flush了。

kafka消息发送是个永不结束持续发送的流,直到销毁的那一刻,才需要清空缓存区,断开与kakfa的连接。

林开心 -> 半兽人 3年前

可以通过这个linger.ms这个参数来限制吗?
目前我的生产者配置是这样的:

acks=1
retries=0
linger.ms=5
request.timeout.ms=30000
batch.size=262144
buffer.memory=67108864
max.request.size=5242880
半兽人 -> 林开心 3年前

linger.ms是发送到kafka之前,额外多等5ms,等待更多的消息,然后一次性发送给kafka,具体介绍,参见:
https://www.orchome.com/511

你的答案

查看kafka相关的其他问题或提一个您自己的问题