我是卡夫卡的新人,我有一个我无法解决的问题。
我已经在Windows(不是Linux)的计算机上安装了Kafka和Zookeeper,我创建了一个主题包含多个分区的代理(在6到12个分区之间播放)。
当我创建消费者时,他们完美地工作并且阅读速度很快,但是参考制作人,我创建了一个可以在许多网站上看到的简单制作人。生产者在一个循环中并发送许多短消息(大约2000条非常短的消息)。
我可以看到消费者非常谨慎地阅读2000条消息,但是生产者以每秒140或150条消息向代理发送消息。正如我之前所说的那样,我在自己的笔记本电脑上工作(只有1个磁盘),但当我每秒阅读大约数百条信息时,我觉得有些东西我忘记了,因为我光年远离这一点。
如果我使用更多的制作人,结果会更糟。
在同一个节点或类似的东西中是否有更多经纪人的问题?这个问题在我的工作中强加给了我,而且我没有更好的计算机的可能性。
创建生产者的代码是
public class Producer {
public void publica(String topic, String strKey, String strValue) {
Properties configProperties = new Properties();
configProperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
configProperties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, LongSerializer.class.getName());
configProperties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
KafkaProducer<String, String> producer = new KafkaProducer<String, String>(configProperties);
ProducerRecord<String, String> rec = new ProducerRecord<String, String>(topic, strValue);
producer.send(rec);
}
}
和发送消息的代码是(部分):
Producer prod = new Producer();
for (int i = 0; i < 2000; i++)
{
key = String.valueOf(i);
prod.publica("TopicName", key, texto + " - " + key);
// System.out.println(i + " - " + System.currentTimeMillis());
}
答案 0 :(得分:11)
您可以创建一次Kafka制作人,并在每次需要发送消息时使用它:
public class Producer {
private final KafkaProducer<String, String> producer; // initialize in constructor
public void publica(String topic, String strKey, String strValue) {
ProducerRecord<String, String> rec = new ProducerRecord<String, String>(topic, strValue);
producer.send(rec);
}
}
另请查看可用的生产者和代理配置 here 。您可以根据应用程序的需要调整几个选项。