"我在具有暴露端口的虚拟机上的docker中有一个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
我从Windows上的本地PC运行此代码,flink以独立模式启动。此外,我试图直接在虚拟机上运行它,但我得到了同样的错误。
在日志中有很多重试:
execchain.RetryExec:处理/ vm-address请求时捕获的I / O异常(java.net.BindException) - > {} - > http:// vm-address:8080:无法分配请求的地址:JVM_Bind
"
问题出在你的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一切顺利。也许,可以用另一种方式解决它(也许,显式解析容器主机名),但这是最简单的方法
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。