【问题标题】:Not able to communicate from a remote machine to Kafka cluster无法从远程机器与 Kafka 集群通信
【发布时间】:2019-09-11 17:48:32
【问题描述】:

所以我一直在尝试在非 kafka 集群上使用 pykafka 发送消息(它没有 kafka,只有必要的库)使用附加的代码 sn-p 我将消息发送到 kafka 集群节点以供使用。但它返回超时异常。

我已经尝试了几乎所有可用的方法,甚至是 stackoverflow 上已经创建的问题。

问题:

是否需要在我的非 kafka 集群上也有 kafka 才能成功通信? (不要这么认为)

任何帮助将不胜感激??

服务器配置:

# java.net.InetAddress.getCanonicalHostName() if not configured.
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://0.0.0.0:9092

# Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured.  Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
advertised.listeners=PLAINTEXT://abc-Kka-00:9092```

Python code:

from pykafka import KafkaClient
import threading

KAFKA_HOST = "a.b.c.d:9092" # Or the address you want

client = KafkaClient(hosts = KAFKA_HOST)
topic = client.topics["kafkat"]

with topic.get_sync_producer() as producer:
    for i in range(10):
        message = "Test message " + str(i)
        encoded_message = message.encode("utf-8")
        producer.produce(encoded_message)


Error recived:
```pykafka.exceptions.ProduceFailureError: Delivery report not received after timeout```

Expected result:

Message to be passed and consumed on kafka node

【问题讨论】:

  • abc-Kka-00:9092a.b.c.d:9092 是同一个东西吗?如果我理解正确,是的,Kafka 客户端库只需要安装在您的代码运行的地方。超时是网络问题,而不是库问题
  • 是的,它们完全一样。你觉得服务器配置有什么问题吗?
  • 问题解决,答案中的解释

标签: apache-kafka kafka-consumer-api pykafka


【解决方案1】:

问题已解决。

问题是由于集群中的一台主机在配置中存在冲突,这就是消息无法通过的原因。更新配置后,它就像魅力一样。

【讨论】:

  • @cricket_007 当然,其中一台主机的端口被阻塞,adverted.listener 提供的地址也是主机名而不是 IP。改变这些东西后它起作用了
猜你喜欢
  • 2019-07-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-19
  • 1970-01-01
  • 2020-12-09
相关资源
最近更新 更多