Я пытаюсь отправить сообщения в 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
Обновление для ответа от ppatierno (я не могу добавлять изображения к комментариям, поэтому вместо этого добавляю здесь обновление)
Спасибо за ваш комментарий. Ниже приведен образ из,
1/мой терминал Windows с помощью Telnet, чтобы попытаться подключиться к сеансу VM
2/скриншот моего сеанса VM Ubuntu, показывающий порты, открытые на Localhost 127.0.0.1.
3/ipconfig, показывающий мой ip-адрес от моего хоста
4/ifconfig, показывающий ip-адрес от моего Ubuntu VM (Гость).
Я что-то пропустил?
Мне удалось распознать 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
Попробуйте предоставить сопоставление dns в файле хоста на главной машине (файл имени хоста Windows). Вы можете найти его в папке System32/etc.
Это может помочь.
Убедитесь, что все трое ваших брокеров kafka настроены с рекламируемыми слушателями по IP-адресу и порту, доступным из вашего приложения, находящегося за пределами виртуальной машины.
См. Параметр рекламодателя.listeners broker в документации здесь.
Из того, что вы говорите, мне кажется, что производитель работает на хосте, а не внутри VM (как потребитель). Вы пытаетесь подключиться к хосту, используя:
локальный: 9091, локальный: 9092
вы должны использовать IP-адрес виртуальной машины или разрешить виртуальной машине совместно использовать хост-сеть.
У меня была та же проблема с Ubuntu 16.04 и Docker. Для меня работало решение от Sudhesh Rajan. В /etc/hosts я изменил DNS-сопоставление. Просто убедитесь, что вы не пытаетесь отображать порты.
измените файл conf/server.properties
следующим образом:
listeners=PLAINTEXT://192.168.1.120:9092
или же
listeners=PLAINTEXT://hostname:9092