KAFKA: не удалось обновить метаданные после 60000 мс - PullRequest
0 голосов
/ 14 октября 2018

Я новичок в KAFKA и знаю, что этот вопрос неоднократно задавался по поводу переполнения стека, но ни одно из решений не помогло мне, поэтому здесь я пытаюсь испытать удачу, задавая тот же вопрос еще раз.Я скачал и установил KFKA на Centos7 VM.ВМ на моем ноутбуке.Когда я запускаю производителя и потребителя KAFKA из командной строки, он работает нормально.Следующим шагом я хотел создать Java Producer, но он всегда истекает со следующим исключением:

    Exception in thread "main" java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
    at org.apache.kafka.clients.producer.KafkaProducer$FutureFailure.<init>(KafkaProducer.java:1186)
    at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:880)
    at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:803)
    at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:690)
    at com.soft.teradata.KafkaProducerExample.runProducer(KafkaProducerExample.java:40)
    at com.soft.teradata.KafkaProducerExample.main(KafkaProducerExample.java:55)
Caused by: org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.

Код Java для производителя:

package com.soft;
import java.util.Properties;
import java.util.concurrent.Future;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
public class SimpleProducer {
    public static void main(String[] args) throws Exception {
        try {
            String topicName = "Hello-Kafka";
            Properties props = new Properties();
            props.put("bootstrap.servers", "192.168.xxx.xxx:9092");
            props.put("acks", "all");
            props.put("retries", 1);
            props.put("batch.size", 16384);
            props.put("linger.ms", 1);
            props.put("buffer.memory", 33554432);
            props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
            props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
            Producer<String, String> producer = new KafkaProducer<String, String>(props);
            Future<RecordMetadata> f=producer.send(new ProducerRecord<String, String>(topicName, "Eclipse"));
            System.out.println("Message sent successfully");
            producer.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } 
            System.out.println("Successful");

    }
} 

Для bootstrap.server,я даже пробовал следующее:

props.put ("bootstrap.servers", "PLAINTEXT: //192.168.xxx.xxx: 9092");

Обратите внимание, что я выполняю код Java из Eclipse на моем ноутбуке, а KAFKA установлена ​​на виртуальной машине CENTOS7 на моем ноутбуке.192.168.xxx.xxx - это IP-адрес виртуальной машины CENTOS7.Я заметил, что 192.168.xxx.xxx:9092 (telnet 192.168.xxx.xxx 9092) недоступен с моего ноутбука.Я добавил порт в брандмауэр, но все еще безуспешно.

firewall-cmd --zone=public --add-port=9092/tcp --permanent
        firewall-cmd --reload
        firewall-cmd --list-ports

Версия KAFKA - 2.12-2.0.0, и я добавил следующие jar-файлы в Eclipse Classpath:

  • kafka-clients-2.0.0.jar
  • lz4-java-1.4.1.jar
  • slf4j-api-1.7.25.jar
  • snappy-java-1.1.7.1.jar

Большое спасибо за помощь заранее:)

Regadrs, DIRSHAH.

Ответы [ 3 ]

0 голосов
/ 05 июня 2019

Эта ошибка может указывать на то, что тема не существует, поэтому вы можете дважды проверить ваше topicName = "Hello-Kafka".

Хотя это не совсем глубокий ответ, похоже, это общая проблема, см. Также https://github.com/dpkp/kafka-python/issues/607

0 голосов
/ 26 августа 2019

Я столкнулся с той же проблемой.Вам необходимо сообщить имя хоста / ip брокера Kafka, чтобы он был доступен с компьютера Kafka Producer.

 kafka-server-start.sh config/server.properties --override  advertised.listeners=PLAINTEXT://<accessible-hostname>:9092
0 голосов
/ 01 января 2019

Та же проблема, вы обнаружите, что некоторые порты могут работать, а некоторые нет.

Просто измените его на 19092, будет работать, ведь coz rabbitMQ, использующий 15672, работает хорошо, я думаю, причина в том, что какой-то порт был занят OSX

...