Kafka(一) 安裝與配置
Kafka是一個可水平擴充套件、高吞吐量、分散式的釋出-訂閱訊息系統,一個分散式流式處理平臺,其核心模組使用Scala語言開發,支援多種語言的客戶端。
基本概念
主題
一組訊息抽象歸納為一個主題,即一個主題就是對訊息的一個分類。
訊息(Record)
Kafka通訊的基本單位,由一個固定長度的訊息頭和一個可變長度的訊息體構成。訊息支援Gzip、Snappy、LZ4這三種壓縮方式。
分割槽和副本
一個主題可被分成一個或多個分割槽,每個分割槽由一系列有序、不可變的訊息組成,是一個有序佇列,每個分割槽在物理上對應為一個資料夾。
Leader副本和Follower副本
一個分割槽可以有多個副本,其資料需保持一致,其中有一個作為Leader,其他作為Follower,各Follower從Leader同步資料來保證資料一致性,在Leader失效後,在Follower之間選舉一個新的分割槽副本作為Leader。
偏移量
每條訊息在日誌檔案中的位置都會對應一個按序遞增的偏移量,偏移量是一個分割槽下嚴格有序的邏輯值,不表示訊息在磁碟上的物理位置。
日誌段
日誌可被劃分為多個日誌段,它是Kafka日誌物件分片的最小單位,是一個邏輯概念。
代理(Broker)
一個Kafka叢集由多個Kafka例項構成,在叢集中,每個Kafka例項稱為代理,每個代理都有唯一的標識id。代理是無狀態的,即代理不記錄訊息是否被消費,訊息偏移量的管理交由消費者自己或組協調器來維護。
生產者
生產者負責將訊息發生給代理。
消費者和消費組
消費者以pull方式拉取資料,每個消費者都屬於一個特定消費組,預設消費組為test-consumer-group,每個消費組都有唯一的標識id。
同一個主題的一條訊息只能被同一個消費組下某一個消費者消費,但是不同消費組的消費者可同時消費該訊息。
ISR(In-sync Replica)
Kafka在ZooKeeper中動態維護了一個ISR,即儲存同步的副本列表,該列表儲存的是與Leader副本保持訊息同步的所有副本對應的代理節點的id。
ZooKeeper
ZooKeeper是一個分散式應用程式協調服務框架,分散式應用程式可以基於ZookKeeper來實現同步服務、配置維護、命名服務等,Kafka利用ZooKeeper儲存相應元資料資訊,Kafka元資料資訊包括如代理節點資訊、Kafka叢集資訊、主題資訊等等。
安裝與配置
1. 首先需要JDK1.8,安裝很簡單,不做介紹。
2. 遠端登入免密碼配置
2.1 建立RSA金鑰對
ssh-keygen -t rsa
2.2 將2.1步驟生成的id_rsa.pub內容追加到授權的key檔案中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
此時,已經可在本機免密登入本機。
2.3 在叢集環境中,2.2步驟生成的authorized_keys檔案拷貝到其他電腦,如B機器,然後在B機器重複2.1步驟和2.2步驟。
2.4 在叢集環境中,接著步驟2.3,將2.3步驟的authorized_keys檔案拷貝到C機器,重複步驟2.1和2.2,類似接力,這樣,叢集各個電腦就可以互相免密登入了。
下載壓縮包解壓配置環境變數就可以了,很簡單:
配置檔案在子目錄conf下有一個模板,我們改個名字即可:
配置檔案內容很簡單,如下:
配置檔案內容說明:
- tickTime : ZooKeeper的一個時間單元,其所有時間都以這個為基準,預設2S。
- initLimit : Follower在啟動過程會從Leader同步所有最新資料,從而確定自己能夠對外服務的起始狀態。如果在10*2000ms還沒完成資料同步,則Follower啟動失敗。
- syncLimit : Leader和Follower之間通訊請求和應答的時間長度,可以說是心跳。
- dataDir : 儲存快照檔案的目錄,預設日誌也會存放同一個目錄,建議增加配置dataLogDir來分開儲存
- clientPort : 對外埠
對於單機環境的ZooKeeper,只需修改一個配置檔案,然後啟動即可。
對於叢集環境,按如下配置:
A. 如有3臺機: 192.168.11.1, 192.168.11.2, 192.168.11.3,以在192.168.11.1配置為例:
修改檔案/etc/hosts檔案,增加配置:
192.168.11.1 server-1
192.168.11.2 server-2
192.168.11.3 server-3
B. 修改zoo.cfg檔案,增加配置:
server.1=server-1:3277:3288
server.2=server-2:3277:3288
server.3=server-3:3277:3288
其中,server.1的1是ZooKeeper的伺服器id,3277是該伺服器與Leader交換資訊的埠,3288是選舉時伺服器相互通訊的埠。
C. 在dataDir目錄下新建檔案: myid,內容為1
D. 其他兩臺伺服器類似配置即可。
4. 啟動,這裡我就配置單機環境吧,直接在Mac上搞
檢視狀態:
standalone即為標準的單機模式。
5. Kafka安裝配置
同樣是下載壓縮包然後配置環境變數,然後配置$KAFKA_HOME/config/server.properties檔案即可。
這裡ZooKeeper和Kafka安裝在一臺機,所以這裡保持預設:
如果是連線到叢集,則如下:
zookeeper.connect=server-1:2181,server-2:2181,server-3:2181
6. 啟動Kafka
首先確保ZooKeeper已啟動執行。
登入ZooKeeper看看:
如果要在一臺機測試Kafka叢集,可以複製server.properties檔案,然後修改broker.id和埠,然後分別針對不同配置檔案啟動,就可以達到偽分散式的效果。
7. 管理頁面安裝
為了方便了解Kafka執行情況,這裡採用原始碼編譯安裝Kafka Manager網頁工具,當然,這次編譯後的檔案以後可以直接拷貝到其他電腦進行安裝執行,也節省時間:
編譯Kafka manager:
發生錯誤:
自己去網上下載然後放到指定目錄下:
重新編譯,額,還是好慢啊~我們增加下配置:
檔案內容如下:
[repositories]
local
aliyun: http://maven.aliyun.com/nexus/content/groups/public
typesafe: http://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
重新編譯,速度快很多啊~~~
把編譯好的放到特定目錄下:
修改配置檔案conf/applicatino.conf
啟動:
上面的命令可以後臺執行。
點選這裡跳到增加叢集的視窗:
輸入相關資訊:
這裡只輸入了這兩個資訊,其他預設。新增後可以看到代理的資訊如下所示:
最後,注意到如下這個檔案:
Kafka Manager關閉程序可以通過kill -9 {程序ID},但是記得也刪了這個檔案,以免下次啟動失敗。