环境说明:
CentOS Linux release 7.4.1708 (Core)
Linux内核:3.10.0-693.el7.x86_64
java: openjdk version “1.8.0_181”
kafka: kafka_2.11-2.0.0
zookeeper: zookeeper-3.4.10
操作流程:
首先启动zookeeper(使用默认配置)
#首先要进入zookeeper根目录 bin/zkServer.sh start 12
上面启动正常。
再启动kafka(使用默认配置)
#首先要进入kafka根目录 bin/kafka-server-start.sh config/server.properties 12
发现有警告:
WARN [Controller id=0, targetBrokerId=0] Connection to node 0 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) 1
对于第一次用这个kafka的我来说,不懂。 然后有人说看下controller的日志(kafka_2.11-2.0.0/logs/controller.log),发现有报错:
WARN [RequestSendThread controllerId=0] Controller 0's connection to broker www.gl.com:9092 (id: 0 rack: null) was unsuccessful (kafka.controller.RequestSendThread) java.io.IOException: Connection to www.gl.com:9092 (id: 0 rack: null) failed. at org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:70) at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:279) at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:233) at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82) 123456
我什么都没配置怎么有一个www.gl.com?后来发现, 自己在安装系统的时候, 有设置系统的域名为gl.com(可用hostname命令查看本地域名)。
$ hostname gl.com 12
理解应该是对kafka使用默认配置启动,它会读到本机的主机信息为gl.com, 但是为什么多了个www就不知道了,希望有同学能解惑。
怎么解决呢?想到之前自己为了做实验,在hosts文件中添加过www.gl.com, 不知道和上面的报错有没有关系。
打开/etc/hosts文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 12
改成(注意每个后面多了 gl.com,其实只给第一行加也可以的):
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 gl.com ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 gl.com 12
然后使用默认启动就不报错了。
测试
可以来测试下kafka能不能正常工作(在kafka根目录执行):可以来测试下kafka能不能正常工作(在kafka根目录执行):
# 创建topic, 名称为testTopic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic testTopic # 查看topic(会发现除了testTopic,还有KafkaPushsTopic bin/kafka-topics.sh --list --zookeeper localhost:2181 # 启动消费者(Consumer, 发现“卡住了”,其实它是在等消息,不要关这个窗口) bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testTopic --from-beginning # 启动生产者(Producer, 新窗口启动) bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic 1234567891011
启动生产者后发现进入了交互模式,这时就可以发消息了。
截图如下:
参考:
http://kafka.apache.org/quickstart
欢迎补充指正!