网络连通性

实时计算Flink版默认不具备访问公网的能力,本文为您介绍如何进行公网访问、跨VPC访问、域名解析以及网络连通性测试等相关的常见问题。

如何排除网络问题?

由于实时计算Flink版部署在专有网络VPC下,在开通Flink工作空间时选择了专有网络后,您将无法再更改。如果源端或目标端任意一个与目标Flink工作空间不在同一VPC下,会导致源端和目标端网络不通,数据无法读写。因此,如果您遇到数据无法读写的情况,可以按照以下步骤排查是否为网络问题:

  1. 检查上下游服务与Flink工作空间之间网络是否连通。您可以在Flink控制台测试网络连通性,具体请参见如何进行网络探测?

    实时计算Flink版默认仅支持访问相同地域、相同VPC下的服务。如果有访问跨VPC资源或者通过公网访问的需求:

  2. 检查上下游服务中是否已配置了白名单,具体操作请参见如何设置白名单?

  3. 如果还存在网络超时的报错,也可能是连接超时导致的。需要在DDLWITH参数中调大connect.timeout参数的取值,该参数的默认值是30秒。

如何进行网络探测?

实时计算Flink版支持网络探测能力,您可以在Flink开发控制台进行网络探测,具体步骤如下:

  1. 登录实时计算控制台

  2. 单击目标工作空间操作列下的控制台。

  3. 单击顶部导航栏右侧的网络探测图标。

    Image 161.png

  4. 通过输入Endpoint或者IP地址的方式检测Flink作业运行的环境与您的上下游系统是否连通。

    重要

    输入Endpoint时,请删除后面的:<port>,并将port放到网络探测的Port栏输入。

    image.png

    报错connect timed out时,请确认访问的域名是否为公网或其他VPC。实时计算Flink版默认仅支持访问相同VPC下的服务。如果有访问跨VPC资源或者通过公网访问的需求,请参见如何访问跨VPC的其他服务?如何访问公网?

如何访问公网?

  • 背景说明

    实时计算Flink版默认不具备访问公网的能力,但阿里云提供的NAT网关可以实现VPC网络与公网网络互通,以满足部分实时计算Flink版用户通过UDXDatastream代码访问公网的需求。背景说明

  • 解决方案

    通过在VPC中创建NAT网关,并创建SNAT条目,将实时计算Flink版所在的交换机绑定至弹性公网IP(EIP),即可通过EIP访问公网。具体配置方法请参见:

    1. 创建NAT网关,详情请参见创建NAT网关

    2. 创建交换机粒度的SNAT条目并绑定弹性公网IP,详情请参见创建SNAT条目

如何查看公网带宽情况?

在使用公网读取或写入作业,作业各项指标都正常且作业没有反压的情况下,可以通过公网带宽来排查是否是有瓶颈问题。操作步骤如下:

  1. 在实时计算Flink版控制台的工作空间详情中获取专有网络ID

  2. 在专有网络控制台,单击目标专有网络ID。

  3. 资源管理里,单击公网NAT网关数字。

    说明

    如果公网NAT网关数字为0,需要您创建公网NAT网关,具体操作详情请参见创建和管理公网NAT网关实例

  4. 单击公网NAT网关实例ID。

  5. 绑定的弹性公网页签,单击实例名称。

  6. 公网访问 > 弹性公网IP页面,单击监控运维查看公网带宽信息。

如何访问跨VPC的其他服务?

您可以通过以下几种方式,访问跨VPC的其他服务:

  • 提交工单,产品名称选择VPC,要求通过高速通道或其他产品建立网络连接,但是此种方式需要付费。

  • 通过将网络实例连接至云企业网实现网络互通,详情请参见入门概述

  • 使用VPN网关建立VPCVPCVPN连接,详情请参见建立VPCVPC的连接

  • 退掉和实时计算Flink版不同VPC的其他服务后,重新购买一个与实时计算Flink版相同VPC的其他服务。

  • 释放实时计算Flink版工作空间后,重新开通一个和其他服务相同VPCFlink工作空间。

  • 开通公网访问能力,通过公网访问其他服务。实时计算Flink版默认不具备访问公网的能力,如有需求,详情请参见如何访问公网?

    说明

    因为在延迟性方面,公网不如内网,如果您对性能有要求,建议不要使用此方式。

如何设置白名单?

通常,实时计算Flink版上下游服务默认拒绝外部设备的访问。因此,您需要在目标服务的白名单中添加Flink工作空间配置的虚拟交换机的网段。操作步骤详情如下:

  1. 登录实时计算控制台

  2. 在目标工作空间右侧操作列,选择更多 > 工作空间详情

  3. 工作空间详情对话框,查看工作空间虚拟交换机的网段信息。网段

  4. 在您的目标上下游服务白名单中,添加Flink工作空间虚拟交换机的网段

    例如,您要为云数据库RDS MySQL版数据库设置白名单,您可以参见设置IP白名单

    说明
    • 如果您后续新增了虚拟交换机,也需要将新增虚拟交换机的网段添加至目标服务设备的白名单中。

    • 如果您的虚拟交换机和上下游服务不在同一可用区,添加虚拟交换机网段至白名单后,网络可以连通。

如何解析Flink作业所依赖服务的域名?

如果您自建的Flink作业中所依赖的服务填写的是域名,则迁移上云至实时计算Flink版服务时,可能会报无法解析域名的问题。此时,您可以按照以下方案解析Flink作业所依赖服务的域名:

  • 您已有自建的DNS,并且Flink VPC能够连通该自建DNS服务,且该自建DNS能够正常解析域名。

    此时,您可以基于实时计算Flink版作业模板进行域名解析。假如您的自建DNS IP192.168.0.1,操作步骤如下:

    1. 登录实时计算控制台

    2. 单击目标工作空间操作列下的控制台

    3. 配置管理页面作业默认配置页签其他配置文本框,添加如下代码。

      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之间使用英文逗号(,)分隔。

    4. 单击保存更改

    5. 实时计算开发控制台新建作业并运行。

      • 如果还报UnknownHostException的错误,则意味着无法解析域名,请联系我们。

      • 在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。具体解决方案请参见报错:JobManager heartbeat timeout

  • 您没有自建的DNS或者Flink VPC无法与自建的DNS连通。

    此时,您需要基于阿里云云解析PrivateZone进行域名解析。假如您的Flink VPCvpc-flinkxxxxxxx,Flink作业需要访问的服务的域名分别为aaa.test.com 127.0.0.1、bbb.test.com 127.0.0.2ccc.test.com 127.0.0.3,操作步骤如下:

    1. 开通云解析PrivateZone。详情请参见开通云解析PrivateZone

    2. 添加Zone,以Flink作业需要访问服务的公共后缀作为Zone名称。详情请参见添加Zone

    3. 关联实时计算Flink版的VPC。详情请参见关联/解关联VPC

    4. 添加解析记录至Zone。详情请参见添加PrivateZone解析记录结果

    5. 实时计算开发控制台新建作业并运行或者停止后再启动历史作业 。

      如果还报unknowhost错误,则意味着无法解析域名,请联系我们。

报错:JobManager heartbeat timeout

  • 报错详情

    在配置了自建DNS域名解析后,出现作业频繁failover, 且报错信息为JobManager heartbeat timeout。

  • 报错原因

    可能是由于自建DNS的连接延迟大造成的。

  • 解决方案

    您需要在该作业中关闭对于TM的域名解析,即配置jobmanager.retrieve-taskmanager-hostname: false,该配置并不会影响作业通过域名连接外部服务。配置方法请参见如何配置自定义的作业运行参数?

为什么FlinkKafka之间的网络是连通的,但是依然会有timeout expired while fetching topic metadata的报错?

FlinkKafka之间的网络连通并不意味着能读取数据,只有Kafka Brokerbootstrap过程中返回的集群metadata中描述的Endpoint, 才可以连通FlinkKafka,并读取到Kafka的数据,详情请参见Flink-cannot-connect-to-Kafka。检查办法为:

  1. 使用zkCli.sh或者zookeeper-shell.sh工具登录Kafka使用的Zookeeper。

  2. 执行ls /brokers/ids命令列出所有的Kafka Broker ID。

  3. 使用get /brokers/ids/{your_broker_id}命令查看Broker metadata信息。

    Endpoint信息显示在listener_security_protocol_map中。

  4. 确认Flink是否可以连通该Endpoint。

    如果该Endpoint中使用了域名,请为Flink配置对应的域名解析服务。域名解析方法详情请参见如何解析Flink作业所依赖服务的域名?