当前位置: 首页 > 知识库问答 >
问题:

无法从EC2外部连接到AWS上运行的kafka connect群集

龙欣德
2023-03-14

我有一个ECS集群,其中有3个EC2实例,它们都位于私有子网中。我创建了一个任务定义,使用以下环境变量运行Confluent提供的kafka-connect映像:

    CONNECT_CONFIG_STORAGE_TOPIC=quickstart-config
    CONNECT_GROUP_ID=quickstart
    CONNECT_INTERNAL_KEY_CONVERTER=org.apache.kafka.connect.json.JsonConverter
    CONNECT_INTERNAL_VALUE_CONVERTER=org.apache.kafka.connect.json.JsonConverter
    CONNECT_KEY_CONVERTER=org.apache.kafka.connect.json.JsonConverter
    CONNECT_OFFSET_STORAGE_TOPIC=quickstart-offsets
    CONNECT_PLUGIN_PATH=/usr/share/java
    CONNECT_REST_ADVERTISED_HOST_NAME=localhost
    CONNECT_REST_ADVERTISED_PORT=8083
    CONNECT_SECURITY_PROTOCOL=SSL
    CONNECT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM=
    CONNECT_STATUS_STORAGE_TOPIC=quickstart-status
    CONNECT_VALUE_CONVERTER=org.apache.kafka.connect.json.JsonConverter

我在这个集群前面有一个应用程序负载均衡器,在端口8083上有一个侦听器。我已经正确地设置了目标组,以包括运行Kafka-Connect的EC2实例。因此负载均衡器应该将请求转发到集群。确实如此,但我总是得到502 Bad gateway响应。我可以ssh到EC2实例和curl localhost:8083并从kafka-connect返回响应,但是从EC2外部,我没有得到响应。

为了排除负载均衡器和集群之间的网络问题,我创建了一个单独的任务定义,在端口80上运行Nginx,我可以通过负载均衡器成功地从EC2实例外部访问它。

我有一种感觉,我没有将connect_rest_adveredsed_host_name设置为正确的值。根据我的理解,这是客户端应该连接到的主机。但是,由于我的EC2实例位于私有子网中,我不知道该将其设置为什么,这就是为什么我将其设置为localhost。我尝试将其设置为负载均衡器的DNS名称,但这不起作用。

共有1个答案

子车俊哲
2023-03-14

您需要将connect_rest_adveredsed_host_name设置为其他Kafka Connect工作人员可以解析和连接到的主机或IP。

它用于工作人员之间的内部通信,如果是localhost,那么如果REST请求(通过负载均衡器)击中了不是集群当前领导者的工作人员,该工作人员将尝试将请求转发给领导者-使用connect_rest_adveredsed_host_name。但是,如果connect_rest_adveredsed_host_namelocalhost,那么工作人员将只是将请求转发给自己,因此不会工作。

有关更多详细信息,请参见https://rmoff.net/2019/11/22/common-problem-make-when-configuring-multiple-kafka-connect-workers/

 类似资料:
  • 最近我停止并启动了我的EC2实例,这导致我不得不从头开始安装我的web应用程序(使用Tomcat) 现在我有Tomcat在EC2实例上运行,我可以通过在EC2服务器上打开浏览器并指向http://localhost:8080/web_app_name 但是,如果我在自己的电脑上打开浏览器,并指向EC2实例的公共IP(例如EC2 XXX XXX.ap-southest-2.compute.amazo

  • 我用默认子网和VPC创建了一个EC2实例。我还向它添加了入站和出站规则(允许从任何地方使用端口22,出站流量可以到任何地方)。< br >互联网网关也连接到VPC,路由被定义为0.0.0.0/0。 但是当尝试从我的ubuntu机器ssh时,我得到以下错误 ssh:连接到主机 ec2-13-233-87-56.ap-south-1.compute.amazonaws.com 端口 22:连接超时 但

  • 我可以对我的AWS EC2实例使用SSH ok。Grizzly已经安装并启动。 我无法通过浏览器从本地计算机连接到EC2公共IPhttp://publicip:8080/索引。我有一个安全组,允许传入访问HTTP端口8080,允许所有传出。我还尝试允许ICMP进行ping,但我也无法ping。我删除了所有安全组限制,但这也不起作用。我检查了iptables,没有任何限制规则。 有什么想法吗? 谢谢

  • 我按照这里给出的步骤从外部Jenkins实例连接到openshift在线代理。然而,当我提供OpenShift凭据时,即使我似乎拥有正确的凭据,登录也无法通过。消息“无法请求https://openshift.redhat.com/broker/rest/domains:OpenShift Online(下一代)开发者预览版在这里!我们不会接受OpenShift Online(v2)平台上的新用户

  • 我试图在我本地minikube集群上的一个简单示例中使用fabric8io/kubernetes-client,在这里我获得了一个pod的IP 是完成执行的pod的名称,如果执行则可见。 是一个kubernetes API主机,我从中获得该主机。 MiniKube只有1个节点。 Fabric8IO/Kubernetes-客户端版本为4.9.1 Java 11 我将此代码作为作业部署在的同一集群上。

  • 我正在一个盒子上运行redis 2.8.7。从其他框(两者都是aws ec2)我正在发出这个命令 redis-cli -h ,但我得到这个错误 无法连接到Redis:6379:连接被拒绝 框1上的端口6379为框2打开。此外,没有redis的id/pwd