我在虚拟机上的docker中有一个Nifi实例,其公开端口为:8080和10000。 在瘦实例上,我创建了一个简单的管道,其输出端口名为“ flink”,我想使用flink-nifi连接器读取此数据:
/home/bhavdipb/AndroidStudioProjects/apps/testNDK/app/src/main/jni/hello-jni.c', needed by
在这种情况下,我得到了错误:
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();
如果我在配置中添加localAddress:
Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: java.net.UnknownHostException
我收到此错误:
SiteToSiteClientConfig clientConfig = new SiteToSiteClient.Builder()
.url("http://vm-address:8080/nifi")
.localAddress(InetAddress.getByName("vm-address"))
.portName("flink")
.requestBatchCount(100)
.buildConfig();
我从Windows上的本地PC运行此代码,并且flink在独立模式下启动。 另外,我尝试直接在虚拟机上运行此程序,但出现了相同的错误。
日志中有很多重试:
execchain.RetryExec:捕获了I / O异常(java.net.BindException) 在处理请求时 / vm-address-> {}-> http://vm-address:8080:无法分配请求 地址:JVM_Bind
答案 0 :(得分:1)
最后,解决了!
问题出在我的docker配置中。首先,我像这样运行nifi:
docker run --name nifi -p 8008:8080 -p 10000:10000 -d apache/nifi:1.7.1
默认情况下,网络为bridge
。在这种情况下,我的容器具有一些随机的主机名,我不直接与容器通信,而是通过docker进行通信。
当我选择network = host时:
docker run --name nifi --network host -d apache/nifi:1.7.1
一切顺利。
可能我可以用另一种方式解决它(也许是明确地解析容器的主机名),但这是最简单的方法