kafka權威指南(一):安裝kafka

一、安裝zooleeper(linux,CentOS7)

1.去apache官網下載zookeeper壓縮包

地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

切記不管下載什麼版本,一定要下載帶bin的壓縮包,如圖:

下載完成後,放到服務器中(目錄自己指定),解壓該文件

2.進行簡單的配置

打開conf目錄,如果沒有zoo.cfg就新建一個,進行如下配置:(注意配置項6

配置項4中的文件夾目錄我們需要手動創建,例如:

mkdir -p /var/lib/zookeeper
#1.tickTime:Client-Server通信心跳時間
#Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,tickTime以毫秒爲單位
tickTime=2000

#2.initLimit:Leader-Follower初始通信時限
#集羣中的follower服務器(F)與leader服務器(L)之間初始連接時能容忍的最多心跳數(tickTime的數量)
#initLimit=5

#3.syncLimit:Leader-Follower同步通信時限
#集羣中的follower服務器與leader服務器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)
#syncLimit=2

#4.dataDir:數據文件目錄
#Zookeeper保存數據的目錄,默認情況下,Zookeeper將寫數據的日誌文件也保存在這個目錄裏。
dataDir=/var/lib/zookeeper

#5.clientPort:客戶端連接端口
#客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
clientPort=2181

#6.admin.serverPort:zookeeper 3.5.0版本以上指定此參數,不指定則默認爲8080.
#建議指定,因爲親測8080容易被佔用,導致啓動失敗。
admin.serverPort=12222

#7.服務器名稱與地址:集羣信息(服務器編號,服務器地址,LF通信端口,選舉端口)
#這個配置項的書寫格式比較特殊,規則如下:
#server.N=YYY:A:B

#7.maxClientCnxns:對於一個客戶端的連接數限制,默認是60,這在大部分時候是足夠了。
#但實際使用中發現,在測試環境經常超過這個數,
#經過調查發現有的團隊將幾十個應用全部部署到一臺機器上,以方便測試,於是這個數字就超過了。
#maxClientCnxns=

#8.autopurge.snapRetainCount、autopurge.purgeInterval
#客戶端與zookeeper交互過程中產生的日誌,zookeeper會將內存中的數據作爲snapshot保存下來
#這些數據不會自動刪除,這樣磁盤中這樣的數據就會越來越多。
#autopurge.purgeInterval就是設置多少小時清理一次
#autopurge.snapRetainCount是設置保留多少個snapshot,之前的則刪除。
#autopurge.purgeInterval=
#autopurge.snapRetainCount=

3.啓動zookeeper

到bin目錄下執行:

sh zkServer.sh start

4.測試啓動是否成功

看到   Starting zookeeper ... STARTED   不一定代表啓動成功,可以使用telnet測試。

未安裝telnet的解決方案

telnet localhost 2181

telnet連接上,通過 srvr來驗證是否安裝正確

未連接上,代表啓動失敗。

5.啓動失敗錯誤排查

具體報錯原因千變萬化,在此不一一列舉,建議大家養成啓動後查看日誌的習慣。

到/logs目錄下可以查勘zookeeper從啓動開始所有的運行時日誌。

6.Zookeeper集羣

Zookeeper集羣被稱爲羣組(不建議超過七個節點,節點過多會降低整個羣組的性能),Zookeeper使用的是一致性協議,所以建議每個羣組裏應該包含奇數個節點(3,5,7,9)。因爲只有大多數節點(法定人數)處於可用狀態,Zookeeper纔可以處理外部請求

也就是說,如果你有一個包含 3 個節點的羣組,那麼它允許1個節點失效。如果羣組包含 5 個節點,那麼它允許 2 個節點失效。

羣組需要有一些公共配置,上面列出了所有服務器的清單,並且每個服務器還要在數據目錄中創建一個 myid 文件,用於指明自己的 ID。如果羣組裏服務器的機器名是 zoo1.example.com、zoo2.example.com、zoo3.example.com,那麼配置文件可能是這樣的,

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=20
syncLimit=5
server.1=zoo1.example.com:2888:3888
server.2=zoo2.example.com:2888:3888
server.3=zoo3.example.com:2888:3888

服務器地址遵循 server.X=hostname:peerPort:leaderPort 格式:

  • X:服務器的 ID,它必須是一個整數,不過不一定要從 0 開始,也不要求是連續的;
  • hostname:服務器的機器名或 IP 地址;
  • peerPort:用於節點間通信的 TCP 端口;
  • leaderPort:用於首領選舉的 TCP 端口

除了公共的配置文件外,每個服務器都必須在 data Dir 目錄中創建一個叫作 myid 的文件,文件裏要包含服務器 ID,這個 ID 要與配置文件裏配置的 ID 保持一致。完成這些步驟後,就可以啓動服務器,讓它們彼此間進行通信了。

二、安裝kafka

1.下載kafka安裝包(解壓即可)

官網:

百度雲(簡):https://www.jianshu.com/p/0da47d19ad3a

2.驗證安裝是否正確

創建並驗證主題:

/bin/kafka-topics.sh --create --zookeeper localhost:2181

往測試主題上發佈消息:

/bin/kafka-console-producer.sh --broker-list

從測試主題上讀取消息:

/bin/kafka-console-consumer.sh --zookeeper

三、broker配置

1.常規配置

  • broker.id:每個 broker 需要有一個標識符,使用 broker.id 表示,默認是0,可設置任意整數。這個值在整個集羣中必須是唯一的。建議設置爲與機器名具有相關性的整數。
  • port:默認情況下監聽9092端口。(使用1024以下的端口,需要使用root權限啓動kafka,不推薦
  • zookeeper.connect:用於保存broker元數據的Zookeeper地址。localhost:2181 表示這個 Zookeeper 是運行在本地的 2181 端口上。該配置參數是用冒號分隔的一組 hostname:port/path 列表,每一部分的含義如下
    • hostname 是 Zookeeper 服務器的機器名或 IP 地址
    • port 是 Zookeeper 的客戶端連接端口
    • /path 是可選的(不存在自動創建) Zookeeper 路徑,作爲 Kafka 集羣的 chroot 環境。如果不指定,默認使用根路徑
  • log.dirs(一組用逗號分隔的本地文件系統路徑):kafka把消息保存在磁盤存放日誌片段的目錄
    • 如果指定了多個路徑,那麼 broker 會根據“最少使用”原則,把同一個分區的日誌片段保存到同一個路徑下。要注意broker 會往擁有最少數目分區的路徑新增分區,而不是往擁有最小磁盤空間的路徑新增分區
  • num.recovery.threads.per.data.dir:對於如下 3 種情況,Kafka 會使用可配置的線程池來處理日誌片段:
    •  服務器正常啓動,用於打開每個分區的日誌片段;
    •  服務器崩潰後重啓,用於檢查和截短每個分區的日誌片段;
    •  服務器正常關閉,用於關閉日誌片段。
  • auto.create.topics.enable:默認情況下,Kafka 會在如下幾種情形下自動創建主題
    • 當一個生產者開始往主題寫入消息時
    • 當一個消費者開始從主題讀取消息時
    • 當任意一個客戶端向主題發送元數據請求時
    • 顯式地創建主題把 auto.create.topics.enable 設爲 false

2.默認配置

  • num.partitions(默認爲1):指定新創建的主題包含幾個分區,默認啓用。
  •  log.retention.ms(默認168 小時,也就是一週):根據此時間決定數據保存多久
  • log.retention.bytes():通過最多可以保留的消息字節數來判斷消息是否過期
  • log.segment.bytes(默認是 1GB):當日志片段大小達到 log.segment.bytes 指定的上限時,當前日誌片段就會被關閉,一個新的日誌片段被打開。
  • message.max.bytes(默認是 1M):限制單個消息的大小,這個值對性能有顯著的影響

3.硬件選擇

  • 磁盤吞吐量
  • 容量
  • 內存
  • 網絡
  • CPU

4.Kafka集羣

  • 最大的好處是可以跨服務器進行負載均衡。
  • 再則就是可以使用複製功能來避免因單點故障造成的數據丟失。
  • 在維護 Kafka 或底層系統時,使用集羣可以確保爲客戶端提供高可用性。

需要多少個broker

  1. 需要多少磁盤空間來保留數據,以及單個 broker 有多少空間可用 例如:10/2
  2. 考慮集羣處理請求的能力

broker配置

  1. 所有broker都必須配置相同的zookeeper.connect
  2. 每個broker都必須設置唯一的broker.id

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章