我有一个代码,将数据发送到Kafka主题。
public void sendMessage(String message, String key){
if (isAsync) { // Send asynchronously
producer.send(new ProducerRecord<String, String>(topic,key,message), new ProducerCallback(key, message));
} else { // Send synchronously
try {
producer.send(new ProducerRecord(topic,key, message)).get();
} catch (Exception e) {
e.printStackTrace();
// handle the exception
}
}
}
我使用以下代码将数据传递给方法:
String Message ="Text message,Text message,Text message,Text message,Text message,Text message,Text message,Text message,Text message,Text message";
String Key = "0123456789";
for(int i =0; i < 10000; i++)
{
publish.sendMessage(Message, Key);
}
由于Message和Key是静态的,因此代码以低延迟(10K记录不到1秒)向Kafka发送数据,但如果我有动态密钥,则性能会降低(10K记录几乎为55秒)。代码将是
for(int i =0; i < 10000; i++)
{
publish.sendMessage(Message, Key+i);
}
对于每次迭代,Key+i
都涉及实例化,初始化一个新的StringBuilder对象并调用它的append
和toString
方法,这确实会减慢整个过程。