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改為隊列配置的地址