1.zookeeper在Kafka中的作用
Kafka实用zookeeper保存集群的元数据和消费者信息。Kafka发行版了自带Zookeeper,可以直接从脚本安装,不过安装一个完整版的Zookeeper也很easy。
2.安装zookeeper
下载 zookeeper-3.4.13.tar.gz
安装
tar -zxvf zookeeper-3.4.13.tar.gz mv zookeeper-3.4.13 /usr/local/zookeeper mkdir -p /var/lib/zookeeper cd /usr/local/zookeeper/conf cp zoo_sample.cfg zoo.cfg sudo /usr/local/zookeeper/bin/zkServer.sh start
验证
$telnet localhost 2181 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. srvr Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT Latency min/avg/max: 0/0/0 Received: 1 Sent: 0 Connections: 1 Outstanding: 0 Zxid: 0x0 Mode: standalone Node count: 4 Connection closed by foreign host.
3.安装Kafka Broker
安装
tar -zxvf kafka_2.12-2.1.1.tgz sudo mv kafka_2.12-2.1.1 /usr/local/kafka mkdir /tmp/kafka-logs /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
测试
发消息
$/usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test >hello word >
收消息
$/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning Test Message 1 Test Message 2 u 123 abc hello word
4.配置说明
位置:kafka/config/server.properties里面的参数
- broker.id:每个broker都有一个唯一的标识符,默认值是0,在整个Kafka集群里是唯一的。值可以任意选定,为了便于维护可以配置为机器名
- zookeeper.connect:用于配置保存broker元数据的Zookeeper地址,格式:hostname:port/path(如localhost:2181),多个用逗号隔开
- logs.dirs: Kafka把所有的消息都保存在磁盘上,存放这些认知片段的目录通过logs.dir指定,它是用逗号隔开的本地文件系统路径(默认配置是/tmp/kafka-logs)
5.监控工具:Kafka Manager
下载安装
执行:./sbt clean dist
执行完后生成:kafka-manager-1.3.3.22.zip (位置:kafka-manager/target/universal/)
解压
unzip kafka-manager-1.3.0.8.zip -d /usr/local cd /usr/local/kafka-manager-1.3.0.8
修改配置 conf/application.properties
# 如果zk是集群,这里填写多个zk地址 kafka-manager.zkhosts="localhost:2181"
启动服务
sudo nohup bin/kafka-manager &
默认端口9000,如果修改端口
bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080
启动验证
访问:ip:port
创建一个cluster
Cluster Zookeeper Hosts
地址配置为Zookeeper地址,和配置文件中的地址保持一致,全部打钩,保存。
查看topic详情和消费信息:
6.常见问题解决
6.1 Kafka代码连接异常TimeoutException
此异常的出现的时候,多半是网络问题,检查/etc/hosts中的主机ip映射的hostname与配置的listeners中hostname是否保持一致,如下图
修改脚本:config/server.properties
6.2 kafka服务必需要开启JMX,否则在下一步启动kafka-manager时会出现:
java.lang.IllegalArgumentException: requirement failed: No jmx port but jmx polling enabled!
解决:在bin/kafka-server-start.sh前面加上
export JMX_PORT=9999
6.3 WARN [Producer clientId=console-producer] Connection to node -1 could not be established. Broker may not be available
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
如果弹出需将上文中localhost改为队列配置的地址