Kafka - невозможно отправить сообщение на удаленный сервер с помощью Java
Я пытаюсь создать кластер Kafka
для отправки сообщений на пульт дистанционного управления. Я сконфигурировал все, как описано здесь.
Я запускаю это на машине Linux red hat
, и он отлично работает с помощью оболочки. После написания java-кода, как описано в учебнике quick start
на моем компьютере с Windows, я получил следующую ошибку:
...
DEBUG kafka.client.ClientUtils$ - Successfully fetched metadata for 1 topic(s) Set(example)
...
ERROR kafka.producer.SyncProducer - Producer connection to cldExampleKafka.domain:80 unsuccessful
java.nio.channels.UnresolvedAddressException
...
at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:44)
...
WARN kafka.producer.async.DefaultEventHandler - Failed to send producer request with correlation id 2 to broker 0 with data for patitions [ati,0]
java.nio.channels.UnresolvedAddressException
...
kafka.common.FailedToSendMessageException: Failed to send message after 3 tries.
Я также попытался запустить банку на другой машине Linux и по-прежнему получил ту же ошибку.
Измените адрес на localhost
и запустите java-код как банку на машине, где установлен kafka.
Я верю в это что-то с конфигурацией, но я не смог ее найти.
Ответы
Ответ 1
В вашей кафке server.properties
есть прокомментированная конфигурация
#advertised.host.name=<Some IP>
Раскомментируйте это и добавьте IP-адрес Linux-машины, в которой работает kafka.
advertised.host.name=<Kafka Running Machine IP>
И подключитесь от клиентов к <Kafka Running Machine IP>
Это должно исправить вашу проблему.
ИЗМЕНИТЬ
При желании вы можете раскомментировать
#advertised.port=9092
Также, если вы слушаете другой порт, чем стандартный.
Ответ 2
Работает с
from server.properties
Uncomment
listeners=PLAINTEXT://:9092
И
advertised.listeners=PLAINTEXT://<HOST IP>:9092
Замените <HOST IP>
на фактический IP.
Ответ 3
Попытка подключения к удаленному кластеру kafka с моей локальной машины.
ВМ имел один внутренний (9.0.0.1) и один внешний IP (192.1.1.1). Я мог ssh только для внутреннего & не внешний. Я внес эти изменения в свой conifg/server.properties:
//установить IP-адрес устройства (найти с помощью ifconfig
или hostname -I
)
listeners=PLAINTEXT://192.1.1.1:9092
//установить IP-адрес, к которому подключатся потребитель и производитель
advertised.listeners=PLAINTEXT://9.0.0.1:9092
Ответ 4
в
config/server.properties
Я положил это
listeners=PLAINTEXT://[server_ip]:9092
и все работало нормально.
Для быстрого тестирования не забудьте использовать [server_ip] в командной строке kafka-consumer.
Пример:
/usr/local/kafka_2.11-2.0.0/kafka-console-consumer.sh --property print.timestamp=true --bootstrap-server [server_ip]:9092 --topic [you_topic]
Я надеюсь, что это может помочь вам.
С уважением
Али