kafka的搭建
搭建前說明
- 這裏就不說廢話去具體介紹kafka是什麼了,只要知道他是一個分佈式的隊列,作用是緩衝消息的就行了。
- kafka的運行是基於zookeeper的,所以運行先要裝一個zookeeper。
- 版本說明:zookeeper-3.4.13、kafka_2.12-2.2.0
- 說明:本文采用的是自己下載安裝的方法進行搭建的。
搭建前準備
- 需要安裝jdk,版本最好在1.8及以上。
- 三臺機器,假如我這裏準備的三臺機器的hostname分別是0.0.0.198、0.0.0.206、0.0.0.209(0.0.0只是個說明,以大家實際的寫法爲主)
- 此時/etc/hosts爲
0.0.0.209 server01
0.0.0.198 server02
0.0.0.206 server03
- ps:kafka的搭建其實不需要這些,只是集羣的搭建,還是希望大家保持一致
zookeeper的安裝
進入/opt目錄,本文所有的包都安裝在opt目錄下
- 下載zookeeper
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
- 解壓文件
tar -zxvf zookeeper-3.4.13.tar.gz
- 進入zookeeper-3.4.13 裏面的conf目錄裏面,創建zoo.cfg,在裏面寫
tickTime = 2000
initLimit=10
syncLimit=5
dataDir = /opt/zookeeper/zkdata
dataLogDir=/opt/zookeeper/zkdatalog
clientPort = 2181
server.1=0.0.0.209:2888:3888
server.2=0.0.0.198:2888:3888
server.3=0.0.0.206:2888:3888
- 如上的配置文件所示,還需要創建兩個目錄,
/opt/zookeeper/zkdata
和/opt/zookeeper/zkdatalog
,這兩個目錄是用於存儲管理的數據和日誌的。 - 進入
/opt/zookeeper/zkdata
目錄,創建文件myid,每個myid裏面寫各自對應的節點id,即1
,2
,3
。
zookeeper的測試
做完了上述步驟,zookeeper就算是安裝完成了。
下面就要對其進行一些測試,以保證安裝的順利進行。
進入zookeeper-3.4.13目錄,運行命令bin/zkCli.sh -server 127.0.0.1:2181
,查看返回
Connecting to localhost:2181
log4j:WARN No appenders could be found for logger (org.apache.zookeeper.ZooKeeper).
log4j:WARN Please initialize the log4j system properly.
Welcome to ZooKeeper!
JLine support is enabled
[zkshell: 0]
kafka的安裝
在安裝完zookeeper後,接下來就是安裝kafka了。
這裏有些話要說下,由於三臺機器安裝kafka的時候,配置信息會有所不同,所以下面講的0.0.0.198上面的安裝步驟,其他兩臺的具體步驟會在下面說明。
- 下載
wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz
- 解壓,並進入kafka_2.12-2.2.0目錄裏面
- 進入config目錄裏面,然後編輯server.properties,具體的修改如下(我把註釋部分給去掉了,修改的時候要看仔細)。
broker.id=3
listeners=PLAINTEXT://:9092
port=9092
host.name=10.25.1.206
advertised.host.name=10.25.1.206
advertised.port=9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/opt/kafka/kafkalogs/
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
message.max.byte=5242880
default.replication.factor=2
replica.fetch.max.bytes=5242880
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=10.25.1.209:2181,10.25.1.198:2181,10.25.1.206:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
delete.topic.enable=true
- 和之前的zookeeper一樣,這裏也配置了log.dirs,所以要創建目錄/opt/kafka/kafkalogs/
其他兩臺機器的安裝
其他兩臺的步驟基本和198的一致,區別在於以下幾點
kafka的測試
當你完成上述步驟之後,就代表着你的zookeeper和kafka集羣搭建完成了,下面就是進行一些測試,來看看kafka的安裝是否順利。
- 啓動kafka
bin/kafka-server-start.sh config/server.properties
- 創建主題
讓我們創建一個名爲“test”的主題,它只包含一個分區,只有一個副本
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
如果我們運行list topic命令,我們現在可以看到該主題:
bin/kafka-topics.sh --list --bootstrap-server localhost:9092
test
- 發送消息
Kafka附帶一個命令行客戶端,它將從文件或標準輸入中獲取輸入,並將其作爲消息發送到Kafka集羣,運行生產者,然後在控制檯中鍵入一些消息以發送到服務器。
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message
- 消費消息
Kafka還有一個命令行使用者,它會將消息轉儲到標準輸出。
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message
- 以上,如果你能正確的消費到信息,那麼,你的kafka就搭建成功了
特別說明
這裏給大家分享一個經驗,我之前就是因爲不知道這個,花了很多很多的冤枉時間。
就是在你修改了kafka的配置文件,或者重啓的時候,想要刪除之前的topic歷史數據,又或者其他的需要重啓的信息的時候,這個時候有一個很關鍵的注意點:就是要刪除kafka和zookeeper的歷史數據,其中刪除zookeeper/*裏面的歷史信息特別關鍵,不然到時候很容易出現producer上傳信息,但是consumer卻消費不到的情景!!!!