每个人,局域网中都有一个虚拟服务器,其中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
这个问题困扰了我很长一段时间,任何人都可以帮助我解决它吗?
答案 0 :(得分:1)
如果您有一个正在运行的zookeeper实例,您当然可以询问主题列表。但是,您似乎没有可用的Kafka经纪人。
你可能有一个动物园管理员在跑但不是卡夫卡。
答案 1 :(得分:0)
您的Kafka生产者可能正在无法访问运行Kafka代理的虚拟机的计算机上运行。
此外,代理端口不仅应打开,而且代理端口必须开放,即,您的Kafka代理的(播发的)侦听器必须具有您的虚拟机IP (从Kafka可以访问的IP生产商正在运行,因为一个VM可以有多个IP,并且没有规则可以访问所有IP)。。
例如,您的虚拟机有两个IP 1.2.3.4
和4.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
。
您还应该确保端口不仅仅向localhost
或127.0.0.1
开放,例如,当您执行netstat
时,该端口不应仅具有localhost:9092
或127.0.0.1:9092
,它应该使用任何本地地址0.0.0.0 或您的IP 1.2.3.4:9092