kafka消息发送时间随内容增加而剧增?

测试了发送100000 条信息。

Properties properties = new Properties();
InputStream in = KafkaProducerOps.class.getClassLoader().getResourceAsStream("producer.properties");
properties.load(in);

Producer<String, String> producer = new KafkaProducer<String, String>(properties);
for (int i = start; i <= start + 100000; i++) {
    String topic ="test";
    ProducerRecord<String, String> producerRecord =
    new ProducerRecord<String, String>(topic, key, i+"");
    producer.send(producerRecord);
}

大概是2-4秒。

但是,当发送的消息有四五十个字符串长度的时候,要13--15秒;
测试了一下3kb的字符串,3分钟才发送到30000。

我这样测试有没有违背消息机制的初衷?不应该发送很大的数据量,而是用来作为一个简单的消息中间件,再配合其他接口?

目前准备使用的场景是 canal 监听mysql的binlog日志,以消息的形式通过kafka发出去。提供给子终端。







发表于: 24天前   最后更新时间: 24天前   游览量:109
上一条: 到头了!
下一条: 已经是最后了!

评论…


  • 如果服务器与客户端之间的带宽,机器性能都还充足的话,建议调整buffer.memory相关的参数,具体参见:http://orchome.com/511
    • batch.size=16384

      # the total bytes of memory the producer can use to buffer records waiting to be sent to the server
      buffer.memory=67108864

      send.buffer.bytes=131072

      循环10000次:
      每次发送2kb数据,大概8秒;
      每次发送4kb数据,大概16秒;

      注释掉上面的参数,耗时也一样。

      另外,跟发送的内容也有很大的关系,包含中文越多,发送越慢。例如2.48kb的大写A,10000条大概7--8秒;然后增加调整一些为中文信息,时间就相继的上去了

        • 你得先把瓶颈点找出来,到底是cpu不行,还是内存不行,还是带宽不行。
          1、增加生产者,增加分区(长连接,提高CPU利用率)
          2、带宽打满的话,就增加消息压缩,如果没打满就放大同时发送的缓存队列大小。
          • 评论…
            • in this conversation