最近終於有須要消息隊列的業務需求出現了,就決定本身搭建一個Kafka
集羣做爲業務測試用。若是沒問題的話就不去購買雲服務了,還能省下很多錢呢。對於Kafka
以前本身也寫過demo稍微瞭解了一下,此次就把實踐的要點記錄下來。html
Kafka
的安裝能夠說是很是簡單了。java
wget
下載到服務器上,再解壓(tar xzvf
)就ok了Kafka
是依賴於zookeeper
的,不過官方的安裝包裏已經自帶了zookeeper
,單機版直接用已經寫好的腳本啓動就能夠了,我是按文檔搭了個zookeeper
集羣。bin/zookeeper-server-start.sh config/zookeeper.properties
須要後臺運行的加 -daemon 參數
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
用netstat -ntlp命令能夠看到
tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN {pid}/java
就是啓動成功了。
複製代碼
參數配置很是的重要,這裏只是重點講下幾個基本都要配置的點。首先打開配置文件,vi config/server.properties
spring
broker.id
指的是當前節點的id,必須是惟一不重複的整數。apache
例子: broker.id=0
bash
advertised.listeners
,設置這個是爲了讓客戶端拿到正確的主機地址,默認是拿的java.net.InetAddress.getCanonicalHostName()
的值,會拿到相似於izbp1i1jfn47dnqehu39pez:9092
這樣的地址,因此就報鏈接錯誤了。服務器
例子: advertised.listeners=PLAINTEXT://111.222.333.444:9092
併發
log.dirs
指的是消息存放的目錄,能夠指定多個用,
分隔,默認是/tmp/kafka-logs
。這裏有個坑/tmp
目錄是會不按期清理數據的,因此放這裏可能消息就會神祕消失。建議指定一個其餘的目錄。框架
例子: log.dirs=/mnt/kafka-logs
tcp
zookeeper.connect
指的是zookeeper
的鏈接地址,集羣要寫多個,注意多臺服務器要能聯通。測試
例子: zookeeper.connect=111.16.212.244:2181,222.16.212.243:2181,333.16.212.236:2181
log.cleanup.policy
指的是消息的清理策略,默認是168小時前的消息會被刪除。能夠改成壓縮消息,同一個key
的消息只保留最新的。不過建議在topic
裏設置,能夠把重要的消息設置爲壓縮,不重要的設置爲刪除。
例子: log.cleanup.policy=compact
num.partitions
指的是主題的默認分區數量。默認值是1,建議改爲50,由於一個分區只容許一個消費者消費,分區數量多的話能夠併發消費。
例子:num.partitions=50
default.replication.factor
指的是自動建立主題的副本數量.默認是1,即只有一個主副本,至關於沒有備份。建議改成大於等於2
小於等於服務器數量的值。
例子: default.replication.factor=2
主題的參數配置是寫在生產者或者消費者的代碼裏的,一樣是隻提幾個重要的。
cleanup.policy
和服務器的log.cleanup.policy
配置效果是同樣的,只不過優先級高一些。
min.insync.replicas
指的是最小同步副本數量,默認是1個建議設爲大於等於2,這樣消息至少有一個副本。這裏和生產者的acks配置有關,當acks設置爲all的時候,消息須要複製到全部副本里纔算成功,這裏的全部副本數量不必定是固定的。好比一個主題有3個副本,其中一個副本由於同步進度太慢被踢出了isr(In-Sync Replicas)
,這時的全部副本其實只有2個(包括主副本),而不是3個。
例子: min.insync.replicas=2
Kafka
是默認支持主題的自動建立的,默認的分區數量和副本數量配置已經在服務器配置裏講過了。固然也能夠在spring
等框架裏配置,事實上主題的參數配置均可以在spring
裏配置,須要的能夠去文檔查詢。
到這裏Kafka
的大部分業務無關的配置都已經搞定了,接下來就是寫生產者和消費者了。以後還會寫在spring boot
裏使用Kafka
的筆記,到這裏也只是簡單的配置了Kafka
,建議去閱讀下《Kafka技術內幕:圖文詳解Kafka源碼設計與實現》
,這樣才能更好的理解一些配置參數的意義和對Kafka
的影響。