2017-10-06 75 views
1

我是卡夫卡新手,我有一个问题,我无法解决。卡夫卡生产商很慢

我在我自己的计算机中安装了Kafka和Zookeeper(不在Linux中),并且我创建了一个包含多个分区(在6和12分区之间播放)的主题的代理。

当我创建消费者时,他们完美地工作并且以良好的速度阅读,但是提到生产者,我创建了许多网站中可以看到的简单生产者。生产者在一个循环内并发送很多短消息(大约2000个非常短的消息)。

我可以看到消费者非常quicly地读取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

你可以发布你的代码用于生产吗? 我会假设你正在同步生产 - 你应该异步生产。磁盘应该不是问题(刷新到磁盘是在后台完成) – Treziac

+0

是的,我编辑了我的帖子。非常感谢 –

回答

6

您可以一次创建卡夫卡制片人,并用它每次你需要时间发送消息:

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); 
    } 
} 

另外看看生产者和经纪人配置availab le here。有几种选择可以根据您的应用程序需求进行调整。

+0

我现年54岁,从22岁开始就是开发者,有时我觉得自己是初学者。我没有意识到卡夫卡制片人是每次都创作的,而不是一次。我做出改变并且... –

+0

之前:在15秒内2000 msg。之后:约170毫秒的2000条消息。很多很多谢谢 –

+0

@ EnriqueLópezMoreno - 请接受并投票回答。 – alirabiee

相关问题