测试了发送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发出去。提供给子终端。
如果服务器与客户端之间的带宽,机器性能都还充足的话,建议调整buffer.memory相关的参数,具体参见:https://www.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、带宽打满的话,就增加消息压缩,如果没打满就放大同时发送的缓存队列大小。
你的答案