在使用脚本时我无法向Kafka生成数据,但我可以使用脚本列出主题

时间:2017-04-10 09:30:46

标签: apache-kafka kafka-producer-api

每个人,局域网中都有一个虚拟服务器,其中IP为192.168.18.230,我的机器IP为192.168.0.175。 今天,我尝试使用我的机器(192.168.0.175)向我的虚拟服务器(192.168.18.230)发送一些消息,使用Kafka控制台生产者

$ bin/kafka-console-producer.sh --broker-list 192.168.18.230:9092 --topic test

但有些不对劲。问题的描述是:

[2017-04-10 17:25:40,396] ERROR Error when sending message to topic test with key: null, value: 6 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for test-0 due to 1568 ms has passed since batch creation plus linger time

但是当我使用kafka-topics脚本列出主题时,它可以工作:

$ bin/kafka-topics.sh --list --zookeeper 192.168.18.230:2181

这个问题困扰了我很长一段时间,任何人都可以帮助我解决它吗?

2 个答案:

答案 0 :(得分:1)

如果您有一个正在运行的zookeeper实例,您当然可以询问主题列表。但是,您似乎没有可用的Kafka经纪人。

你可能有一个动物园管理员在跑但不是卡夫卡。

答案 1 :(得分:0)

您的Kafka生产者可能正在无法访问运行Kafka代理的虚拟机的计算机上运行。

此外,代理端口不仅应打开,而且代理端口必须开放,即,您的Kafka代理的(播发的)侦听器必须具有您的虚拟机IP (从Kafka可以访问的IP生产商正在运行,因为一个VM可以有多个IP,并且没有规则可以访问所有IP)。

例如,您的虚拟机有两个IP 1.2.3.44.3.2.1,而另一台计算机上的生产者指向1.2.3.4,则必须首先能够ping和telnet到该IP。

接下来,您必须在您的Kafka经纪人的公告侦听器中拥有此IP 1.2.3.4

advertised.listeners=PLAINTEXT://1.2.3.4:9092

您应该仅在Kafka Producer中将此IP设置为bootstrap.servers

您还应该确保端口不仅仅向localhost127.0.0.1开放,例如,当您执行netstat时,该端口不应仅具有localhost:9092127.0.0.1:9092,它应该使用任何本地地址0.0.0.0 或您的IP 1.2.3.4:9092