如何从我的本地机器和其他区域的 EC2 实例访问我的 AWS MSK 托管的 kafka 队列

Tom*_*Tom 8 amazon-web-services apache-kafka

我正在 AWS MSK 上设置托管 kafka 队列。从本地计算机连接时,我似乎无法使安全性发挥作用,而且我无法确定是否可以使用从一个区域到另一个区域的安全组。

我已经浏览了此处的主要文档中有关设置安全组的信息。不过,我似乎仍然无法连接到代理。我目前正在通过以下方式使用本地机器上的 kafka 脚本:

bin/kafka-console-producer.sh --broker-list "my-broker-ip:9092" --topic "some-topic"
Run Code Online (Sandbox Code Playgroud)

但不断得到结果

[2019-01-28 12:06:13,278] WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)
Run Code Online (Sandbox Code Playgroud)

我已将我的本地 IP 与我在 VPC 中设置并与 kafka 队列关联的安全组上的所有端口相关联,但似乎没有帮助。我也不知道如何将我的盒子与 kafka 队列相关联,因为它们位于不同的区域。这可能吗?

我目前正在通过以下方式使用本地机器上的 kafka 脚本:

bin/kafka-console-producer.sh --broker-list "my-broker-ip:9092" --topic "some-topic"

但不断得到结果

[2019-01-28 12:06:13,278] WARN [Producer clientId=console-producer] 无法建立到节点 -1 的连接。经纪人可能不可用。(org.apache.kafka.clients.NetworkClient)

我已将我的本地 IP 与我在 VPC 中设置并与 kafka 队列关联的安全组上的所有端口相关联,但似乎没有帮助。我也不知道如何将我的盒子与 kafka 队列相关联,因为它们位于不同的区域。这可能吗?

我希望能够将我的本地生产者代码连接到 kafka 队列并观察输出,而不是让它不断拒绝连接。

Rob*_*att 7

据我所知,您必须EC2 上客户端计算机访问您的 MSK 集群,而不能从本地计算机访问。


Kun*_*l-G 5

正如@Robin 所提到的,您无法使用 kafka 客户端或 kafka 流直接从本地机器访问 MSK。因为代理 url、zookeeper 连接字符串是 msk 集群 vpc/子网的私有 ip。通过kafka客户端访问,需要在MsK的同一个vpc中启动ec2实例,并执行kafka client(producer/consumer)访问msk集群。

但是你可以设置Confluent开源的kafka Rest Proxy框架,通过rest api从外界访问MSK集群。该框架是成熟的kafka客户端,并不允许kafka客户端的所有操作,但是您可以在集群上进行大部分操作,从获取集群元数据、主题信息、生产和消费消息等开始。

我已经详细回答了这个场景以及其他一些与 MSK 相关的问题,请参考-

Amazon Managed Streaming for Kafka-MSK 功能和性能