#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, а не с Linux3. Спасибо!! Указав адрес сервера Linux и номер порта, это сработало отлично!