API Kafka: java.io.IOException: не удается разрешить адрес: xxx.xxxx: 9091

2

Я пытаюсь отправить сообщения в Kafka, который установлен в VM Ubuntu.

Есть 3 брокера Kafka, которые были запущены на виртуальной машине и пользователи, которые прослушивают тему также в виртуальной машине. Все это прекрасно работает.

В Intellij в Windows 7 я написал небольшое демонстрационное приложение для KafkaProducer,

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

public class KafkaProducerApp {

    public static void main(String [] args){

        // Create a properties dictionary for the required/optional Producer config settings:
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9091,localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        //--> props.put("config.setting", "value");
        //:: http://kafka.apache.org/documentation.html#producerconfigs

        System.out.println("program start");

        KafkaProducer<String, String> myProducer = new KafkaProducer<String, String>(props);

        try{
            for (int i = 0; i < 150; i++){
                myProducer.send(new ProducerRecord<String, String>("my-topic", Integer.toString(i), "MyMessage: " + Integer.toString(i)));
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            System.out.println("program close");
            myProducer.close();
        }

        System.out.println("program end");

    }

}

Когда я пытаюсь запустить код, хотя он не подключается к Message Brokers, вместо этого кажется, что он переходит в бесконечный цикл и останавливается только при нажатии кнопки "Стоп". Ниже приведен вывод окна Intellij Terminal. Я получаю

В соединении отказано

исключение ниже. У кого-нибудь есть идеи, как я могу это решить?

В любом случае, я могу проверить подключение из Windows к указанному номеру порта Ubuntu VM? Мне интересно, существует ли проблема с брандмауэром, препятствующая подключению.

"C:\Program Files\Java\jdk1.8.0_131\bin\java" -Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.1.3\lib\idea_rt.jar=62649:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_131\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar;C:\Dev\kafka-poc\target\classes;C:\Users\rstannard\.m2\repository\org\apache\kafka\kafka-clients\0.10.2.1\kafka-clients-0.10.2.1.jar;C:\Users\rstannard\.m2\repository\net\jpountz\lz4\lz4\1.3.0\lz4-1.3.0.jar;C:\Users\rstannard\.m2\repository\org\xerial\snappy\snappy-java\1.1.2.6\snappy-java-1.1.2.6.jar;C:\Users\rstannard\.m2\repository\org\slf4j\slf4j-api\1.7.21\slf4j-api-1.7.21.jar;C:\Users\rstannard\.m2\repository\org\slf4j\slf4j-simple\1.7.21\slf4j-simple-1.7.21.jar" com.riskcare.kafkapoc.KafkaProducerApp
program start
[main] INFO org.apache.kafka.clients.producer.ProducerConfig - ProducerConfig values: 
    acks = 1
    batch.size = 16384
    block.on.buffer.full = false
    bootstrap.servers = [localhost:9091, localhost:9092]
    buffer.memory = 33554432
    client.id = 
    compression.type = none
    connections.max.idle.ms = 540000
    interceptor.classes = null
    key.serializer = class org.apache.kafka.common.serialization.StringSerializer
    linger.ms = 0
    max.block.ms = 60000
    max.in.flight.requests.per.connection = 5
    max.request.size = 1048576
    metadata.fetch.timeout.ms = 60000
    metadata.max.age.ms = 300000
    metric.reporters = []
    metrics.num.samples = 2
    metrics.sample.window.ms = 30000
    partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner
    receive.buffer.bytes = 32768
    reconnect.backoff.ms = 50
    request.timeout.ms = 30000
    retries = 0
    retry.backoff.ms = 100
    sasl.jaas.config = null
    sasl.kerberos.kinit.cmd = /usr/bin/kinit
    sasl.kerberos.min.time.before.relogin = 60000
    sasl.kerberos.service.name = null
    sasl.kerberos.ticket.renew.jitter = 0.05
    sasl.kerberos.ticket.renew.window.factor = 0.8
    sasl.mechanism = GSSAPI
    security.protocol = PLAINTEXT
    send.buffer.bytes = 131072
    ssl.cipher.suites = null
    ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1]
    ssl.endpoint.identification.algorithm = null
    ssl.key.password = null
    ssl.keymanager.algorithm = SunX509
    ssl.keystore.location = null
    ssl.keystore.password = null
    ssl.keystore.type = JKS
    ssl.protocol = TLS
    ssl.provider = null
    ssl.secure.random.implementation = null
    ssl.trustmanager.algorithm = PKIX
    ssl.truststore.location = null
    ssl.truststore.password = null
    ssl.truststore.type = JKS
    timeout.ms = 30000
    value.serializer = class org.apache.kafka.common.serialization.StringSerializer

[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name bufferpool-wait-time
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name buffer-exhausted-records
[main] DEBUG org.apache.kafka.clients.Metadata - Updated cluster metadata version 1 to Cluster(id = null, nodes = [localhost:9092 (id: -2 rack: null), localhost:9091 (id: -1 rack: null)], partitions = [])
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name connections-closed:
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name connections-created:
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name bytes-sent-received:
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name bytes-sent:
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name bytes-received:
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name select-time:
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name io-time:
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name batch-size
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name compression-rate
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name queue-time
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name request-time
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name produce-throttle-time
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name records-per-request
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name record-retries
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name errors
[main] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name record-size-max
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.producer.internals.Sender - Starting Kafka producer I/O thread.
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka version : 0.10.2.1
[main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka commitId : e89bffd6b2eff799
[main] DEBUG org.apache.kafka.clients.producer.KafkaProducer - Kafka producer started
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Initialize connection to node -1 for sending metadata request
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Initiating connection to node -1 at localhost:9091.
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name node--1.bytes-sent
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name node--1.bytes-received
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name node--1.latency
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.network.Selector - Connection with localhost/127.0.0.1 disconnected
java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:51)
    at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:81)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:335)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:303)
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:349)
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:225)
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:126)
    at java.lang.Thread.run(Thread.java:748)
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Node -1 disconnected.
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Initialize connection to node -2 for sending metadata request
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Initiating connection to node -2 at localhost:9092.
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name node--2.bytes-sent
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name node--2.bytes-received
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - Added sensor with name node--2.latency
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.network.Selector - Connection with localhost/127.0.0.1 disconnected
java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
    at org.apache.kafka.common.network.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:51)
    at org.apache.kafka.common.network.KafkaChannel.finishConnect(KafkaChannel.java:81)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:335)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:303)
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:349)
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:225)
    at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:126)
    at java.lang.Thread.run(Thread.java:748)
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Node -2 disconnected.
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Initialize connection to node -1 for sending metadata request
[kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - Initiating connection to node -1 at localhost:9091.

Process finished with exit code 1

Ниже приведен некоторый вывод от Ubuntu

Изображение 174551


Обновление для ответа от ppatierno (я не могу добавлять изображения к комментариям, поэтому вместо этого добавляю здесь обновление)

Спасибо за ваш комментарий. Ниже приведен образ из,
1/мой терминал Windows с помощью Telnet, чтобы попытаться подключиться к сеансу VM
2/скриншот моего сеанса VM Ubuntu, показывающий порты, открытые на Localhost 127.0.0.1.
3/ipconfig, показывающий мой ip-адрес от моего хоста
4/ifconfig, показывающий ip-адрес от моего Ubuntu VM (Гость).

Я что-то пропустил?

Изображение 174551

Изображение 174551

ОБНОВИТЬ

Мне удалось распознать IP и Port, приведенная ниже ссылка помогла мне настроить мою виртуальную машину,

https://www.howtogeek.com/122641/how-to-forward-ports-to-a-virtual-machine-and-use-it-as-a-server/

но теперь я столкнулся с другой проблемой, когда пытаюсь запустить приложение Java Producer. Журналы, похоже, предполагают, что он способен распознавать 3-брокеры, но по какой-то причине программа не может связаться с брокером.

[kafka-продюсер-сеть-поток | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - Инициализировать подключение к узлу -1 для отправки запроса метаданных [kafka-manufacturer-network-thread | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - инициирование соединения с узлом -1 в 192.168.56.101:9091. [kafka-продюсер-сеть-поток | производитель -1] DEBUG org.apache.kafka.common.metrics.Metrics - добавлен датчик с именем node- -1.bytes-sent [kafka-manufacturer-network-thread | производитель -1] DEBUG org.apache.kafka.common.metrics.Metrics - добавлен датчик с именем node- -1.bytes-received [kafka-manufacturer-network-thread | производитель -1] DEBUG org.apache.kafka.common.metrics.Metrics - добавлен датчик с именем node- -1.latency [kafka-manufacturer-network-thread | производитель -1] DEBUG org.apache.kafka.common.network.Selector - созданный сокет с SO_RCVBUF = 32768, SO_SNDBUF = 131072, SO_TIMEOUT = 0 к узлу -1 [kafka-manufacturer-network-thread | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - Завершено подключение к узлу -1. Извлечение версий API. [kafka-продюсер-сеть-поток | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - запуск версий API-версий из узла -1. [kafka-продюсер-сеть-поток | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - Записанные версии API для узла -1: (Произведение (0): от 0 до 2 [используется: 2], выборка (1): от 0 до 3 [используется: 3], смещения (2): от 0 до 1 [применимо: 1], метаданные (3): от 0 до 2 [используется: 2], LeaderAndIsr (4): 0 [используется: 0], StopReplica (5): 0 [useable: 0], UpdateMetadata (6): от 0 до 3 [useable: 3], ControlledShutdown (7): 1 [useable: 1], OffsetCommit (8): от 0 до 2 [useable: 2], OffsetFetch (9): 0: 2 [useable: 2], GroupCoordinator (10): 0 [useable: 0], JoinGroup (11): 0 to 1 [useable: 1], Heartbeat (12): 0 [useable: 0], LeaveGroup ( 13): 0 [useable: 0], SyncGroup (14): 0 [useable: 0], DescribeGroups (15): 0 [useable: 0], ListGroups (16): 0 [useable: 0], SaslHandshake (17): 0 [useable: 0], ApiVersions (18): 0 [useable: 0], CreateTopics (19): 0 to 1 [useable: 1], DeleteTopics (20): 0 [useable: 0]) [kafka-производитель -network-thread | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - отправка запроса метаданных (type = MetadataRequest, themes = my-topic) на узел -1 [kafka-manufacturer-network-thread | производитель -1] DEBUG org.apache.kafka.clients.Metadata - обновлены метаданные кластера версии 2 в кластере (id = QZEI79XCTmC8qJ48K1JwLw, узлы = [C0287.VM.xxxxxxxx.com:9092 (id: 2 rack: null), C0287.VM.xxxxxxxx.com: 9090 (id: 0 rack: null), C0287.VM.xxxxxxxx.com:9091 (id: 1 rack: null)], разделы = [Partition (topic = my-topic, partition = 0, leader = 1, replicas = [0,1,2], isr = [1,2,0]), Partition (topic = my-topic, partition = 1, leader = 2, replicas = [0,1,2 ], isr = [2,0,1]), Partition (topic = my-topic, partition = 2, leader = 0, replicas = [0,1,2], isr = [0,1,2])] ) [kafka-производитель-network-thread | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - инициирование соединения с узлом 0 на C0287.VM.xxxxxxxx.com:9090. program close [main] INFO org.apache.kafka.clients.producer.KafkaProducer - Закрытие продюсера Kafka с тайм-аутомMillis = 9223372036854775807 ms. [kafka-продюсер-сеть-поток | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - ошибка подключения к узлу 0 на C0287.VM.xxxxxxxx.com:9090: java.io.IOException: не удается разрешить адрес: C0287.VM.XXX. com: 9090 на org.apache.kafka.common.network.Selector.connect(Selector.java:182) на org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:629) на org.apache.kafka. clients.NetworkClient.ready(NetworkClient.java:186) на org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:184) на org.apache.kafka.clients.producer.internals.Sender. run (Sender.java:126) в java.lang.Thread.run(Thread.java:748) Вызвано: java.nio.channels.UnresolvedAddressException at sun.nio.ch.Net.checkAddress(Net.java:101) на sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) на org.apache.kafka.common.network.Selector.connect(Selector.java:179)... еще 5 [kafka-manufacturer-network- резьба | производитель -1] DEBUG org.apache.kafka.clients.producer.internals.Sender - начало закрытия потока ввода-вывода производителя Kafka, отправка оставшихся записей. [kafka-продюсер-сеть-поток | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - инициирование соединения с узлом 1 на C0287.VM.xxxxxxxx.com:9091. [kafka-продюсер-сеть-поток | производитель -1] DEBUG org.apache.kafka.clients.NetworkClient - ошибка подключения к узлу 1 на C0287.VM.xxxxxxxx.com:9091: java.io.IOException: не удается разрешить адрес: C0287.VM.xxxxxxxx. ком: 9091

Теги:
apache-kafka

5 ответов

2
Лучший ответ

Попробуйте предоставить сопоставление dns в файле хоста на главной машине (файл имени хоста Windows). Вы можете найти его в папке System32/etc.

Это может помочь.

  • 0
    да, это сработало для меня - спасибо! В файле Windows => C: \ Windows \ System32 \ drivers \ etc \ hosts я добавил строку сопоставления «192.168.56.101 C0287.xx.xxxx.com», а затем в коде Java изменил строку следующим образом: props.put ("bootstrap.servers", "192.168.56.101:9090, 192.168.56.101:9091, 192.168.56.101:9092"); Теперь, когда я запускаю код источника, я вижу сообщения, поступающие на мой приемник в виртуальной машине.
2

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

См. Параметр рекламодателя.listeners broker в документации здесь.

https://kafka.apache.org/documentation/#brokerconfigs

  • 0
    Спасибо, Ганс. Я думаю ты прав. Проблема, с которой я сталкиваюсь, на самом деле не в том, как Kakfa, а в том, что моя Java-программа (Windows-Host) способна достичь IP / порта в моей виртуальной машине (Гость). Я не уверен, как это настроить, поэтому могу задать отдельный вопрос по этому поводу. Я думаю, что я мог бы установить Intellij внутри моей виртуальной машины, и тогда все работало бы (или установить Kafka в Windows), но я думаю, что я предпочитаю оставить вещи в виртуальной машине такими, какие они есть в настоящее время.
  • 0
    Мне удалось узнать IP-адрес и порт, приведенная ниже ссылка помогла мне настроить виртуальную машину: howtogeek.com/122641/…
1

Из того, что вы говорите, мне кажется, что производитель работает на хосте, а не внутри VM (как потребитель). Вы пытаетесь подключиться к хосту, используя:

локальный: 9091, локальный: 9092

вы должны использовать IP-адрес виртуальной машины или разрешить виртуальной машине совместно использовать хост-сеть.

  • 0
    robbie70 обратите внимание. Вы пытаетесь отредактировать мой ответ вместо добавления комментария, а я отклоняю это. Пожалуйста, добавьте комментарий.
  • 0
    хорошо, не беспокойтесь, я обновил вопрос. Я хотел отредактировать ваш ответ, потому что не мог прикрепить изображения к комментарию
Показать ещё 5 комментариев
0

У меня была та же проблема с Ubuntu 16.04 и Docker. Для меня работало решение от Sudhesh Rajan. В /etc/hosts я изменил DNS-сопоставление. Просто убедитесь, что вы не пытаетесь отображать порты.

0

измените файл conf/server.properties следующим образом:

listeners=PLAINTEXT://192.168.1.120:9092

или же

listeners=PLAINTEXT://hostname:9092

Ещё вопросы

Сообщество Overcoder
Наверх
Меню