编程语言
首页 > 编程语言> > java – kafka生产者非常慢

java – kafka生产者非常慢

作者:互联网

我是卡夫卡的新人,我有一个我无法解决的问题.

我已经在我自己的计算机上安装了Kafka和Zookeeper(不是在Linux中),我创建了一个主题包含多个分区(在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());
}

解决方法:

您可以创建一次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提供的生产者和代理配置.有几个选项可供您根据应用程序的需求进行调整.

标签:java,apache-kafka,kafka-producer-api
来源: https://codeday.me/bug/20190716/1474276.html