问题如下:问题描述:ERROR Error when sending message to topic helloworld with key: null, value: 15 bytes with error: (org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
小白刚接触Kafka,所以全靠蒙解决了这个问题,记录一下,如果你也和我一样是个小白,碰到这个问题不妨试一下;
我的控制台生产者语句:
bin/kafka-console-producer.sh --broker-list 192.168.1.130:9092 --topic test
控制台消费者语句:
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
后来无意中发现我的conf/server.properties文件这么写的一句话:
# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = security_protocol://host_name:port
# EXAMPLE:
listeners = PLAINTEXT://192.168.1.130:9092
#listeners=PLAINTEXT://:9092
注意看没有注释的地方: lip我配置为本机虚拟机中的ip地址;
尝试着将发送者语句改为:
bin/kafka-console-producer.sh --broker-list 1.168.1.130:9092 --topic test
消费者就可以接收到消息了。
通过两次实验,发现一个奇淫巧技(我不能理解,以后明白了再回头看啦,勿喷)? 控制台发送者的broker-list的ip需要与server.properties中listeners处的一致,控制台消费者就能接收到消息。