簡體   English   中英

Kafka API:java.io.IOException:無法解析地址:xxx.xxxx:9091

[英]Kafka API: java.io.IOException: Can't resolve address: xxx.x.x.xx:9091

我正在嘗試向安裝在 Ubuntu VM 中的 Kafka 發送消息。

有 3 個 Kafka brokers 已經在 VM 中啟動,並且在 VM 中還有一個 Consumer 監聽 Topic。 所有這些工作正常。

在 Windows 7 上的 Intellij 中,我為 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");

    }

}

當我嘗試運行代碼時,雖然它沒有連接到消息代理 - 而是似乎進入了一個無限循環,只有當我點擊停止時才會停止。 下面是 Intellij 終端窗口的輸出。 我得到

拒絕連接

下面例外。 任何人都知道我如何解決這個問題?

無論如何我可以檢查從 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 的一些輸出

在此處輸入圖片說明


更新 ppatierno 的回答(我無法在評論中添加圖像,因此在此處添加更新)

感謝您的評論。 下面是圖片來自,
1/ 我的 Windows 終端使用 Telnet 嘗試連接到我的 VM 會話
2/ 來自我的 Ubuntu VM 會話的屏幕截圖,顯示了本地主機 127.0.0.1 上打開的端口。
3/ ipconfig 顯示我的主機的 IP 地址
4/ ifconfig 顯示來自我的 Ubuntu VM (Guest) 的 IP 地址。

我錯過了什么嗎?

在此處輸入圖片說明

在此處輸入圖片說明

更新

我已經設法識別了 IP 和端口,下面的鏈接幫助我配置了我的 VM,

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

但是現在我在嘗試運行 Java Producer 應用程序時遇到了另一個問題。 日志似乎表明它能夠識別 3-Broker,但由於某種原因,該程序無法與 Broker 連接。

[kafka-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 初始化與節點-1 的連接以發送元數據請求 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 在 192.168.56.101:9091 啟動到節點 -1 的連接。 [kafka-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - 添加了名稱為 node--1.bytes-sent 的傳感器 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - 添加了名稱為 node--1.bytes-received 的傳感器 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.metrics.Metrics - 添加了名稱為 node--1.latency 的傳感器 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.network.Selector - 使用 SO_RCVBUF = 32768、SO_SNDBUF = 131072、SO_TIMEOUT = 0 創建套接字到節點 -1 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 已完成與節點 -1 的連接。 獲取 API 版本。 [kafka-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 啟動從節點 -1 獲取的 API 版本。 [kafka-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 節點 -1 的記錄 API 版本:(Produce(0): 0 to 2 [usable: 2], Fetch(1): 0 to 3 [usable: 3] ], Offsets(2): 0 to 1 [usable: 1], Metadata(3): 0 to 2 [usable: 2], LeaderAndIsr(4): 0 [usable: 0], StopReplica(5): 0 [usable : 0], UpdateMetadata(6): 0 to 3 [usable: 3], ControlledShutdown(7): 1 [usable: 1], OffsetCommit(8): 0 to 2 [usable: 2], OffsetFetch(9): 0 to 2 [usable: 2], GroupCoordinator(10): 0 [usable: 0], JoinGroup(11): 0 to 1 [usable: 1], Heartbeat(12): 0 [usable: 0], LeaveGroup(13) : 0 [usable: 0], SyncGroup(14): 0 [usable: 0], DescribeGroups(15): 0 [usable: 0], ListGroups(16): 0 [usable: 0], SaslHandshake(17): 0 [usable: 0], ApiVersions(18): 0 [usable: 0], CreateTopics(19): 0 to 1 [usable: 1], DeleteTopics(20): 0 [usable: 0]) [kafka-producer-network -線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 將元數據請求(type=MetadataRequest,topics=my-topic)發送到節點-1 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.Metadata - 將集群元數據版本 2 更新為 Cluster(id = QZEI79XCTmC8qJ48K1JwLw, nodes = [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)], partitions = [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-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 在 C0287.VM.xxxxxxxx.com:9090 處啟動到節點 0 的連接。 程序關閉 [main] INFO org.apache.kafka.clients.producer.KafkaProducer - 使用 timeoutMillis = 9223372036854775807 ms 關閉 Kafka 生產者。 [kafka-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 在 C0287.VM.xxxxxxxx.com:9090 連接到節點 0 時出錯:java.io.IOException:無法解析地址:C0287.VM.XXX.com :9090 at org.apache.kafka.common.network.Selector.connect(Selector.java:182) at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:629) at 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) at java.lang.Thread.run(Thread.java:748) 由:java.nio.channels.UnresolvedAddressException at sun.nio.ch.Net.checkAddress(Net.java:101) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) at org.apache.kafka.common.network.Selector.connect(Selector.java:179) ... 5 更多 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.producer.internals.Sender - 開始關閉 Kafka 生產者 I/O 線程,發送剩余記錄。 [kafka-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 在 C0287.VM.xxxxxxxx.com:9091 處啟動到節點 1 的連接。 [kafka-生產者-網絡-線程| producer-1] DEBUG org.apache.kafka.clients.NetworkClient - 在 C0287.VM.xxxxxxxx.com:9091 連接到節點 1 時出錯:java.io.IOException:無法解析地址:C0287.VM.xxxxxxxx.com :9091

確保所有三個kafka代理都在IP地址和端口上配置了廣告監聽器,該IP地址和端口可以從運行在VM外部的應用程序訪問。

請參閱此處文檔中的advertised.listeners broker參數

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

嘗試在主機上的主機文件中提供dns映射(Windows主機名文件)。 您可以在System32 / etc文件夾下找到它。

這可能有所幫助。

根據您的說法,在我看來,生產者正在主機上運行而不是在VM內部(作為消費者)。 您正嘗試使用以下命令從主機進行連接:

本地主機:9091,本地主機:9092

您應該使用VM IP地址或允許VM共享主機網絡。

我遇到了與Ubuntu 16.04和Docker相同的問題。 對我來說,Sudhesh Rajan的解決方案。 在/ etc / hosts中我更改了DNS映射。 只要確保您沒有嘗試映射端口。

更改您的conf/server.properties文件如下:

listeners=PLAINTEXT://192.168.1.120:9092

要么

listeners=PLAINTEXT://hostname:9092

在 conf/server.properties 中設置監聽器,如下所示。

聽眾=PLAINTEXT://localhost:9092

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM