实时计算Flink版默认不具备访问公网的能力,本文为您介绍如何进行公网访问、跨VPC访问、域名解析以及网络连通性测试等相关的常见问题。
如何排除网络问题?
由于实时计算Flink版部署在专有网络VPC下,在开通Flink工作空间时选择了专有网络后,您将无法再更改。如果源端或目标端任意一个与目标Flink工作空间不在同一VPC下,会导致源端和目标端网络不通,数据无法读写。因此,如果您遇到数据无法读写的情况,可以按照以下步骤排查是否为网络问题:
检查上下游服务与Flink工作空间之间网络是否连通。您可以在Flink控制台测试网络连通性,具体请参见如何进行网络探测?。
实时计算Flink版默认仅支持访问相同地域、相同VPC下的服务。如果有访问跨VPC资源或者通过公网访问的需求:
跨VPC访问详情请参见如何访问跨VPC的其他服务?。
公网访问可以使用阿里云提供的NAT网关实现VPC网络和公网的连通,详情请参见如何访问公网?。
检查上下游服务中是否已配置了白名单,具体操作请参见如何设置白名单?。
如果还存在网络超时的报错,也可能是连接超时导致的。需要在DDL的WITH参数中调大connect.timeout参数的取值,该参数的默认值是30秒。
如何进行网络探测?
实时计算Flink版支持网络探测能力,您可以在Flink开发控制台进行网络探测,具体步骤如下:
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
单击顶部导航栏右侧的网络探测图标。
通过输入Endpoint或者IP地址的方式检测Flink作业运行的环境与您的上下游系统是否连通。
重要输入Endpoint时,请删除后面的
:<port>
,并将port放到网络探测的Port栏输入。报错
connect timed out
时,请确认访问的域名是否为公网或其他VPC。实时计算Flink版默认仅支持访问相同VPC下的服务。如果有访问跨VPC资源或者通过公网访问的需求,请参见如何访问跨VPC的其他服务?和如何访问公网?。
如何访问公网?
如何查看公网带宽情况?
在使用公网读取或写入作业,作业各项指标都正常且作业没有反压的情况下,可以通过公网带宽来排查是否是有瓶颈问题。操作步骤如下:
在实时计算Flink版控制台的工作空间详情中获取专有网络ID。
在专有网络控制台,单击目标专有网络ID。
在资源管理里,单击公网NAT网关数字。
说明如果公网NAT网关数字为0,需要您创建公网NAT网关,具体操作详情请参见创建和管理公网NAT网关实例。
单击公网NAT网关实例ID。
在绑定的弹性公网页签,单击实例名称。
在
页面,单击监控运维查看公网带宽信息。
如何访问跨VPC的其他服务?
您可以通过以下几种方式,访问跨VPC的其他服务:
提交工单,产品名称选择VPC,要求通过高速通道或其他产品建立网络连接,但是此种方式需要付费。
通过将网络实例连接至云企业网实现网络互通,详情请参见入门概述。
使用VPN网关建立VPC到VPC的VPN连接,详情请参见建立VPC到VPC的连接。
退掉和实时计算Flink版不同VPC的其他服务后,重新购买一个与实时计算Flink版相同VPC的其他服务。
释放实时计算Flink版工作空间后,重新开通一个和其他服务相同VPC的Flink工作空间。
开通公网访问能力,通过公网访问其他服务。实时计算Flink版默认不具备访问公网的能力,如有需求,详情请参见如何访问公网?。
说明因为在延迟性方面,公网不如内网,如果您对性能有要求,建议不要使用此方式。
如何设置白名单?
通常,实时计算Flink版上下游服务默认拒绝外部设备的访问。因此,您需要在目标服务的白名单中添加Flink工作空间配置的虚拟交换机的网段。操作步骤详情如下:
如何解析Flink作业所依赖服务的域名?
如果您自建的Flink作业中所依赖的服务填写的是域名,则迁移上云至实时计算Flink版服务时,可能会报无法解析域名的问题。此时,您可以按照以下方案解析Flink作业所依赖服务的域名:
您已有自建的DNS,并且Flink VPC能够连通该自建DNS服务,且该自建DNS能够正常解析域名。
此时,您可以基于实时计算Flink版作业模板进行域名解析。假如您的自建DNS IP为192.168.0.1,操作步骤如下:
登录实时计算控制台。
单击目标工作空间操作列下的控制台。
在配置管理页面作业默认配置页签其他配置文本框,添加如下代码。
env.java.opts: >- -Dsun.net.spi.nameservice.provider.1=default -Dsun.net.spi.nameservice.provider.2=dns,sun -Dsun.net.spi.nameservice.nameservers=192.168.0.1
说明如果您的自建DNS有多个IP,建议IP之间使用英文逗号(,)分隔。
单击保存更改。
在实时计算开发控制台新建作业并运行。
如果还报UnknownHostException的错误,则意味着无法解析域名,请联系我们。
在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。具体解决方案请参见报错:JobManager heartbeat timeout。
您没有自建的DNS或者Flink VPC无法与自建的DNS连通。
此时,您需要基于阿里云云解析PrivateZone进行域名解析。假如您的Flink VPC为vpc-flinkxxxxxxx,Flink作业需要访问的服务的域名分别为aaa.test.com 127.0.0.1、bbb.test.com 127.0.0.2和ccc.test.com 127.0.0.3,操作步骤如下:
开通云解析PrivateZone。详情请参见开通云解析PrivateZone
添加Zone,以Flink作业需要访问服务的公共后缀作为Zone名称。详情请参见添加Zone。
关联实时计算Flink版的VPC。详情请参见关联/解关联VPC
添加解析记录至Zone。详情请参见添加PrivateZone解析记录。
在实时计算开发控制台新建作业并运行或者停止后再启动历史作业 。
如果还报unknowhost错误,则意味着无法解析域名,请联系我们。
与Kafka网络连通,但报错timeout时可参见为什么Flink和Kafka之间的网络是连通的,但是依然会有timeout expired while fetching topic metadata的报错?。
报错:JobManager heartbeat timeout
报错详情
在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。
报错原因
可能是由于自建DNS的连接延迟大造成的。
解决方案
您需要在该作业中关闭对于TM的域名解析,即配置
jobmanager.retrieve-taskmanager-hostname: false
,该配置并不会影响作业通过域名连接外部服务。配置方法请参见如何配置自定义的作业运行参数?。
为什么Flink和Kafka之间的网络是连通的,但是依然会有timeout expired while fetching topic metadata的报错?
Flink和Kafka之间的网络连通并不意味着能读取数据,只有Kafka Broker在bootstrap过程中返回的集群metadata中描述的Endpoint, 才可以连通Flink和Kafka,并读取到Kafka的数据,详情请参见Flink-cannot-connect-to-Kafka。检查办法为:
使用zkCli.sh或者zookeeper-shell.sh工具登录Kafka使用的Zookeeper。
执行
ls /brokers/ids
命令列出所有的Kafka Broker ID。使用
get /brokers/ids/{your_broker_id}
命令查看Broker metadata信息。Endpoint信息显示在listener_security_protocol_map中。
确认Flink是否可以连通该Endpoint。
如果该Endpoint中使用了域名,请为Flink配置对应的域名解析服务。域名解析方法详情请参见如何解析Flink作业所依赖服务的域名?。