运行 kafka-console-producer.sh 到另一台服务器

Running kafka-console-producer.sh to another server

我已经在我的 centos 服务器上安装了 Apache Kafka。我只是想向另一台服务器上的主题写一条消息。所以在安装之后,我没有启动 zookeeper 或 Kafka 服务器,而是简单地输入命令:

echo testing | ./kafka-console-producer.sh --broker-list xxx.yyy.com:2181 --topic topicx

我可以从我的服务器 ping xxx.yyy.com。当我 运行 这个时,我得到这个错误:

ERROR Error when sending message to topic cds_organization with key: null, value: 7 bytes with error:
(org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Topic topicx not present in metadata after 60000 ms.

那么这种场景下,还需要启动zookeeper and/or kafka server吗?

"./kafka-console-producer.sh --broker-list xxx.yyy.com:2181 --topic topicx", 你的命令,错过了这个部分,您的经纪人是否在监听端口 2181,通常为 9092。
将命令更改为“./kafka-console-producer.sh --broker-list xxx.yyy.com:9092 --topic topicx” 并重试

I did NOT start the zookeeper or the Kafka server, but simply typed in the command:

如果两者都不是 运行,那么您列出的命令都不会起作用。

do I still need to start the zookeeper and/or kafka server

是的,您需要两者都是 运行,但不需要在同一台机器上。


如前所述,Kafka的默认端口是9092,Zookeeper是2181,看来你混用了。

描述主题 (kafka-topics) 命令仅通过 Zookeeper (up until Kafka 2.2) 完成。

要生成,您应该使用Kafka 主机和端口(从 Kafka 0.9 开始)。

我终于搞定了。问题是我尝试写入主题的 Kafka 服务器版本为 0.8.2.1,而我安装了最新版本。当我安装相同版本时,kafka-console-producer.sh 工作正常,无需启动 zookeeper 或本地 Kafka 服务器。

我已经为我的 Springboot 应用程序修复了这个问题,方法是添加一个单独的 spring-kafka 依赖项,其版本与 kafka 服务器版本相匹配。