【发布时间】:2019-11-22 20:13:53
【问题描述】:
我有一个包含 3 个 EC2 实例的 ECS 集群,它们都位于私有子网中。我创建了一个任务定义来运行 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_ADVERTISED_HOST_NAME 设置为正确的值。据我了解,这是客户端应该连接的主机。但是,因为我的 EC2 实例位于私有子网中,所以我不知道将其设置为什么,这就是我将其设置为 localhost 的原因。我尝试将其设置为负载均衡器的 DNS 名称,但这不起作用。
【问题讨论】:
标签: apache-kafka amazon-ecs apache-kafka-connect