Topi c отсутствует в метаданных после 60000 мс - PullRequest
0 голосов
/ 13 января 2020

Я создал топи c в мск (Кафка). А также я зарегистрировал авро схему. Теперь я пытаюсь создать сообщение для topi c, но когда я запускаю моего продюсера, я получаю сообщение об ошибке ниже

java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.TimeoutException: Topic AVRO-AUDIT_EVENT not present in metadata after 60000 ms.

Вот мой код java для создания авро сообщения

String topicName = "AVRO-AUDIT_EVENT";

        Properties props = new Properties();
        props.put("bootstrap.servers",
                "b-3.*****:9092,b-4.****:9092,b-5.****:9092");
        props.put("bootstrap.servers", "localhost:9092,localhost:9093");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer");
        props.put("schema.registry.url", "http://localhost:8081/subjects/AVRO-AUDIT-EVENT/versions/");

        JSONObject job = new JSONObject(json);
        String bodyofJson = job.getString("body");
        JSONObject bodyJsonObj = new JSONObject(bodyofJson);
        System.out.println(bodyJsonObj.get("ID"));

        Producer<String, String> producer = new KafkaProducer<>(props);
        try {

            producer.send(new ProducerRecord<String, String>(topicName, bodyJsonObj.get("ID").toString(), bodyofJson))
                    .get();

            System.out.println("Complete");
        } catch (Exception ex) {
            ex.printStackTrace(System.out);
        } finally {
            producer.close();
        }

Я могу перечислить topi c и увидеть имя topi c, а также я могу прочитать сообщение topi c. Но когда я запускаю это, я получаю эту ошибку.

Привет

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Я предполагаю, что вы не запускаете Kafka локально ...

Удалите эту строку

props.put("bootstrap.servers", "localhost:9092,localhost:9093");

Возможно, разверните реестр схемы в AWS и измените эту строку (а также в качестве адреса)

props.put("schema.registry.url", "http://localhost:8081/");

Также, если вы хотите отправить Avro, создайте объект GenericRecord Avro, а не строку JSON. В противном случае ваша схема просто "string"

0 голосов
/ 10 февраля 2020

В моем случае за выходные он потерял связь со всеми узлами. Похоже, он не восстанавливает соединение автоматически.

После перезапуска службы он работал просто отлично.

...