1.前言
what?
kafka是一個分布式且基于發布/訂閱的消息系統。
架構圖如下:
概念:
producer:生產者,負責發布消息到kafka
broker:代表一臺或多臺服務器
topic:每條發送到kafka集群的消息都會有一個類別,物理上不同的topic存儲到不同的broker,邏輯上一個topic可能分別存儲在一個或多個broker上,但是生產者或消費者只需要指定topic而無需關心存儲
zookeeper:集群管理
流程:
Producer使用push模式將消息發布到broker,而Consumer使用pull模式從broker訂閱并消費消息。
2.下載kafka
wget http://mirrors.cnnic.cn/apache/kafka/0.10.0.1/kafka_2.10-0.10.0.1.tgz
tar -zxvf kafka_2.10-0.10.0.1.tgz
mv kafka_2.10-0.10.0.1 /usr/local/kafka
3.配置kafka
cd /usr/local/kafka/config
vim zookeeper.properties
#文件中dataDir=/tmp/zookeeper代表zookeeper數據存儲路徑,clientPort=2181代表zookeeper的端口號為:2181,消費者需要監聽的端口
#修改kafka的server配置
vim server.properties
#把listeners行的注釋去掉,這個表示kafka消息隊列的監聽端口,用于生產者監聽使用
#把listeners修改為如下:
listeners=PLAINTEXT://你的ip地址:9092
#倒數第三行 ‘zookeeper.connect=localhost:2181’ 代表連接zookeeper
4.簡單使用
kafka啟動順序:先啟動zookeeper,再啟動kafka server
cd /usr/local/kafka
#啟動zookeeper(窗口1)
bin/zookeeper-server-start.sh config/zookeeper.properties
#啟動kafka(窗口2)
cd /usr/local/kafka
bin/kafka-server-start.sh config/server.properties
#啟動消費者(窗口3)
cd /usr/local/kafka
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
#啟動生產者(窗口4)
cd /usr/local/kafka
bin/kafka-console-producer.sh --broker-list 你的IP地址:9092 --topic test
#隨便寫入消息后回車,這時窗口3的消費者就會立即顯示你寫入的消息
5.遇上的問題:
①Apache kafka: Failed to acquire lock on file .lock in tmp/kafka-logs
②ERROR Processor got uncaught exception. (kafka.network.Processor)
java.lang.NoClassDefFoundError:?Could?not?initialize?class?kafka.network.RequestChannel$
解決:可能是虛擬機的主機名有問題
vim /etc/sysconfig/network
HOSTNAME=你的IP地址reboot