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

Apache kafka 无法从EC2外部连接到AWS上运行的kafka connect群集,apache-kafka,amazon-ecs,apache-kafka-connect,Apache Kafka,Amazon Ecs,Apache Kafka Connect,我有一个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

我有一个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坏网关
响应。我可以通过ssh连接到EC2实例中,然后
curl localhost:8083
并从kafka connect获得响应,但是从EC2外部,我没有得到响应

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


我感觉我没有将
CONNECT\u REST\u advised\u HOST\u NAME
设置为正确的值。据我所知,这是主机客户端应该连接到的。但是,因为我的EC2实例位于一个私有子网中,所以我不知道该将其设置为什么,这就是为什么我将其设置为localhost。我尝试将其设置为负载平衡器的DNS名称,但不起作用。

您需要将
连接\u REST\u播发的\u主机\u名称
设置为其他Kafka CONNECT工作人员可以解析和连接的主机或IP

它用于工作者之间的内部通信,如果它是
localhost
,那么如果您的REST请求(通过负载平衡器)命中的工作者不是集群的当前领导者,那么该工作者将尝试使用
CONNECT\u REST\u advised\u HOST\u NAME
将请求转发给领导者。但是,如果
CONNECT\u REST\u advised\u HOST\u NAME
localhost
,那么工作进程只会将请求转发给自身,因此无法工作


有关更多详细信息,请参见

您需要将
连接\u REST\u播发的\u主机\u名称
设置为其他Kafka CONNECT工作程序可以解析和连接的主机或IP

它用于工作者之间的内部通信,如果它是
localhost
,那么如果您的REST请求(通过负载平衡器)命中的工作者不是集群的当前领导者,那么该工作者将尝试使用
CONNECT\u REST\u advised\u HOST\u NAME
将请求转发给领导者。但是,如果
CONNECT\u REST\u advised\u HOST\u NAME
localhost
,那么工作进程只会将请求转发给自身,因此无法工作


有关更多详细信息,请参见

感谢您的见解。我唯一的问题是,如果我的集群中只有一个EC2实例(自从发布这个问题以来,出于调试原因,我已经从3个EC2实例缩减到了1个),并且我将
CONNECT\u REST\u advised\u HOST\u NAME
设置为
localhost
,这是否可行?在尝试从EC2实例外部连接时,我仍然收到502个错误的网关。是的,但是如果您只有一个工作进程,是否需要负载平衡器?是否有任何更新?你找到解决方案了吗?@RobinMoffatt如果我想要一个3节点的集群-每个实例应该有不同的CONNECT\u REST\u advised\u HOST\u名称吗?例如-connect-node-1、connect-node-2、connect-node-3?感谢您的见解。我唯一的问题是,如果我的集群中只有一个EC2实例(自从发布这个问题以来,出于调试原因,我已经从3个EC2实例缩减到了1个),并且我将
CONNECT\u REST\u advised\u HOST\u NAME
设置为
localhost
,这是否可行?在尝试从EC2实例外部连接时,我仍然收到502个错误的网关。是的,但是如果您只有一个工作进程,是否需要负载平衡器?是否有任何更新?你找到解决方案了吗?@RobinMoffatt如果我想要一个3节点的集群-每个实例应该有不同的CONNECT\u REST\u advised\u HOST\u名称吗?例如-connect-node-1、connect-node-2、connect-node-3?