【问题标题】:Failing to connect to Kafka on MSK无法连接到 MSK 上的 Kafka
【发布时间】:2020-10-28 23:11:36
【问题描述】:

我已经在 MSK 上创建了一个 Kafka 集群,现在我正在尝试使用 python 连接到集群。

我写了这个短代码:

from kafka import KafkaProducer
import json

producer = KafkaProducer(
    bootstrap_servers=['host1:9092', 'host2:9092'],
    value_serializer=lambda x: json.dumps(x).encode('utf-8'),
    api_version=(2, 4, 1)
)

producer.send('test', value={'hello':'world'})

问题是每次我运行它都会出现这个错误:

KafkaTimeoutError: Failed to update metadata after 60.0 secs.

我认为这可能与 Kafka 创建主题有关,因此我将这一行添加到配置中。

auto.create.topics.enable=true

但我仍然遇到同样的错误。

这是我的完整配置文件:

default.replication.factor=3
min.insync.replicas=2
num.io.threads=8
num.network.threads=5
num.partitions=1
num.replica.fetchers=2
socket.request.max.bytes=104857600
unclean.leader.election.enable=true
auto.create.topics.enable=true
zookeeper.connection.timeout.ms=5000

我在这里缺少什么?我在某处读到可能与 SSL 身份验证有关的内容,但在任何步骤中,都没有任何 .pem 文件、.ca 文件或类似的文件。

【问题讨论】:

  • 你能分享你的配置吗? (有兴趣看advertised.listeners
  • 我将配置添加到问题正文中。但我认为 AWS MSK 的全部意义在于它是托管的,我不必处理这种配置。
  • 另外,添加auto.create.topics.enable=true后是否重启了集群?
  • 我实际上是 MSK 的新手,但我相信它会自行重启,因为更新过程大约需要 5 到 10 分钟
  • 每当我在 AWS 中遇到连接超时,我首先想到的是安全组。 MSK 集群的安全组是否允许从应用程序的安全组进入 tcp 端口 9092?

标签: python apache-kafka kafka-consumer-api kafka-producer-api aws-msk


【解决方案1】:

您可能无法连接到 MSK。您遇到的错误是超时错误。

第一次开始使用 MSK 时的一个错误假设是,您可以从 AWS 网络外部连接到它。 这是一个错误的假设。AWS 有一份详细的文档,告诉你如何access your MSK cluster

如果您没有从您的 MSK VPC 内的 EC2 实例运行您的客户端,您将无法访问它。即使你在 MSK 安全组策略中打开了相关的安全规则。

我花时间尝试多个代理从 AWS 外部访问 MSK,但没有成功。只需按照我上面提到的指南进行操作,它可能会解决您的连接问题。

另外,如果您是 MSK 的新手我强烈建议您阅读Getting Started 教程,或至少完成第 5 步 (Create a Topic) 和第 6 步 (Produce and Consume Data)。

【讨论】:

  • 您是否尝试过从 EC2 MSK VPC 实例到本地机器的端口转发?我以前没有与 MSK 合作过,但遇到了这个问题,我不得不从面向非公共的 VPC 中的实例转发到我的本地机器的跳转盒。显然遵循文档是更好的选择。
  • 我的 EC2 实例无法从我的本地计算机访问,必须通过堡垒主机。只是为了连接MSK在多台机器上转发端口太费钱了,所以我没试过
猜你喜欢
  • 2020-05-09
  • 2022-07-12
  • 2020-05-01
  • 2022-08-24
  • 2021-11-23
  • 2021-04-15
  • 2020-04-21
  • 2020-05-17
  • 1970-01-01
相关资源
最近更新 更多