Как подключить приложение Kafka (Java) из Windows к Confluent в Linux

#java #apache-kafka #confluent-platform

#java #apache-kafka #confluent-платформа

Вопрос:

Я запускаю Confluent 5.0 на сервере Linux, используя Winscp и Putty. У меня есть приложение Kafka (Java / Eclipse) в Windows.

Когда я запускаю Java-приложение, оно не идентифицирует брокеров Kafka в Confluent, работающих в Linux.

Я протестировал свое Java-приложение, которое отправляет данные в разделы Kafka на MacBook, запустив Confluent 5.0 в терминале MAC. Сейчас я пытаюсь реализовать такое же приложение Kafka в Windows. Поскольку Confluent не поддерживается в Windows, я работаю на сервере Linux.

Я использую Confluent вместо Apache Kafka, потому что я использую Schema-registry в своем приложении.

С помощью netstat -tupln amp; curl -v http:/localhost:port нет. выяснил, что Kafka работает на 8082 и schema registry на 8081, сведения о портах. Ниже приведены мои свойства Kafka в Java-приложении.

 public static Properties producerProperties() {

    // normal producer
    properties.setProperty("bootstrap.servers", "127.0.0.1:8082");
    properties.setProperty("acks", "all");
    properties.setProperty("retries", "10");
    // avro part
    properties.setProperty("key.serializer", StringSerializer .class.getName());
    properties.setProperty("value.serializer", KafkaAvroSerializer .class.getName());
    properties.setProperty("schema.registry.url", "http://127.0.0.1:8081");

    return properties;

}

public static Properties consumerProperties() {

   // Properties properties = new Properties();
    // normal consumer
    properties.setProperty("bootstrap.servers", "127.0.0.1:8082");
    //different for consumer
    properties.setProperty("group.id", "Avro-consumer");
    properties.setProperty("enable.auto.commit", "false");
    properties.setProperty("auto.offset.reset", "earliest");

    // avro part
    properties.setProperty("key.deserializer", StringDeserializer.class.getName());
    properties.setProperty("value.deserializer", KafkaAvroDeserializer.class.getName());
    properties.setProperty("schema.registry.url", "http://127.0.0.1:8081");
    properties.setProperty("specific.avro.reader", "true");

    return properties;
}

public static Properties streamsProperties() {

    // normal consumer
    properties.put(StreamsConfig.APPLICATION_ID_CONFIG, "com.github.ptn006");
    properties.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:8082");
    properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");

    properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());
    properties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());

    return properties;
}
  

Ожидается:
Данные, записанные в разделы Kafka.

Актуально: не удалось установить соединение WARN с узлом-1. Брокер может быть недоступен. (org.apache.kafka.клиенты.NetworkClient: 589)

Ответ №1:

Вам нужно убедиться, что advertised.listeners часть server.properties файла в Kafka разрешима на компьютере с Windows. Также убедитесь, что брандмауэр разрешает доступ ( netstat -tupln | grep LIST ), и посмотрите, например, прослушивается ли ваш порт Kafka 0.0.0.0 .

Комментарии:

1. обновил свой пост подробными сведениями о портах из Linux и реквизитах kafka в коде Java. пожалуйста, дайте мне знать, если я что-то еще упустил.

2. 127.0.0.1 ваша машина с Windows, а не с Linux

3. Спасибо!! Указав адрес сервера Linux и номер порта, это сработало отлично!