Не удается прочитать данные с выходного порта Nifi через разъем Flink-nifi - PullRequest
0 голосов
/ 25 октября 2018

У меня есть экземпляр Nifi в докере на виртуальной машине с открытыми портами: 8080 и 10000. На тонком экземпляре я создал простой конвейер с выходным портом с именем "flink", и я хочу прочитать эти данные, используя соединитель flink-nifi:

 SiteToSiteClientConfig clientConfig = new SiteToSiteClient.Builder()
                .url("http://vm-address:8080/nifi")
                .portName("flink")
                .requestBatchCount(100)
                .buildConfig();
        DataStream<NiFiDataPacket> nifi = environment.addSource(new NiFiSource(clientConfig));

        nifi.map(new MapFunction<NiFiDataPacket, JsonNode>() {
            @Override
            public JsonNode map(NiFiDataPacket value) throws Exception {
                return DataConverter.byte2Json(value.getContent());
            }
        }).print();

В этом случае я получил ошибку: Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: java.net.UnknownHostException Если я добавлю localAddress в конфигурации:

 SiteToSiteClientConfig clientConfig = new SiteToSiteClient.Builder()
                .url("http://vm-address:8080/nifi")
                .localAddress(InetAddress.getByName("vm-address"))
                .portName("flink")
                .requestBatchCount(100)
                .buildConfig();

Я получил эту ошибку: Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: java.net.BindException: Cannot assign requested address: JVM_Bind

IЗапустите этот код с локального компьютера в Windows, и Flink будет запущен в автономном режиме.Кроме того, я попытался запустить это непосредственно на виртуальной машине, но я получил ту же ошибку.


В журналах много попыток:

execchain.RetryExec: исключение ввода-вывода (java.net.BindException), возникшее при обработке запроса к / vm-адрес -> {} -> http://vm - адрес: 8080 : невозможно назначить запрошенный адрес: JVM_Bind

1 Ответ

0 голосов
/ 26 октября 2018

Наконец-то решено!Проблема была в моей конфигурации докера.Во-первых, я запускаю nifi так: docker run --name nifi -p 8008:8080 -p 10000:10000 -d apache/nifi:1.7.1 Сеть по умолчанию была bridge.В этом случае мой контейнер имеет случайное имя хоста, и я не общаюсь с контейнером напрямую, а через докер.Когда я выбираю сеть = хост: docker run --name nifi --network host -d apache/nifi:1.7.1 все идет хорошо.Возможно, я мог бы решить это другим способом (возможно, явно разрешить имя хоста контейнера), но это был самый простой способ

...