Apache kafka 无法从EC2外部连接到AWS上运行的kafka connect群集
我有一个ECS集群,其中3个EC2实例都位于私有子网中。我创建了一个任务定义,用以下环境变量运行Confluent提供的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
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?