60000毫秒后元数据中不存在主题

时间:2020-01-13 19:59:10

标签: java apache-kafka kafka-producer-api

我已经在MSK(Kafka)中创建了一个主题。 而且我已经注册了avro模式。 现在,我正在尝试针对该主题生成消息,但是当我运行生产者时,出现错误

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

这是我的产生avro消息的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();
        }

我可以列出主题,也可以看到主题名称,也可以阅读主题消息。但是当我遇到问题时,会出现此错误。

致谢

2 个答案:

答案 0 :(得分:2)

我认为您不是在本地运行Kafka ...

删除此行

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

也许也可以在AWS中部署架构注册表,并更改此行(以及地址)

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

此外,如果要发送Avro,请创建GenericRecord Avro对象,而不是JSON字符串。否则,您的架构就是"string"

答案 1 :(得分:1)

就我而言,在周末,它失去了与所有节点的连接。看来它不会自动恢复连接。

重新启动服务后,它运行正常。