一、安裝Zookeeper
本文以 zookeeper-3.4.10 版本
1、下載
下載地址:https://zookeeper.apache.org/releases.html
2、解壓
解壓到 F:\tool 目錄
3、修改配置
找到解壓後 F:/tool/zookeeper-3.4.10/config/zoo_sample.cfg 文件
複製一份重命名爲zoo.cfg (默認的名稱是這個),
#修改配置
dataDir=f:/zookeeper/data
#新增配置
dataLogDir=f:/zookeeper/log
zoo.cfg文件說明:
①tickTime:維持leader與follower以及客戶端之間的心跳頻率時間(單位毫秒,默認2000ms)
②initLimit:允許follower從節點追隨leader主節點時的初始延遲,默認是10次,也就是允許的延遲時間爲2000*10=20秒。如果在這個時間內還沒有連接上的話,leader就會認爲follower有問題,將會拋棄你不跟你玩了。
③syncLimit:默認是5.leader與follower之間的協作允許最大延遲時長,tickTime * syncLimit=2000*5=10秒。10秒之內沒響應,也會認爲follower存在問題。
④dataDir:用於存儲持久化文件(日誌、快照之類的)的路徑。默認 /tmp/zookeeper 最好不要用/tmp這類的目錄,一般改爲/var,var在Linux中是存放臨時文件的。
⑤cliientPort:客戶端連接的端口號。默認是2181
⑥maxClientCnxns:最大的客戶端連接數。也就是最多允許多少個客戶端連接本臺機器的zk
⑦配置集羣中所有的節點信息:3888端口用於在沒有leader時所有節點在3888建立socket連接進行投票選舉出leader;2888端口是follower從節點連接leader主節點的端口。
server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
在zk中,leader可以理解成是“謙讓”出來的,1,2,3,4中誰是最大的誰就立馬是leader
過半通過:一共4個節點有 4/2+1=3臺通過就行。比如1,2,3啓動了之後3就是leader,因爲遵循的是過半通過原則。
4、添加系統環境變量:
在系統變量中添加ZOOKEEPER_HOME = D:\Java\Tool\zookeeper-3.4.10
編輯path系統變量,添加爲路徑%ZOOKEEPER_HOME%\bin
5、啓動Zookeeper
使用 Dos 輸入命令 :zkServer
二、安裝kafka
1、下載
Kafka官網下載安裝包 http://kafka.apache.org/downloads.html
我們下載第二種(已經被編譯過的),將安裝包存在在 /software/ 下
2、解壓
解壓到 F:/tool 目錄
3、修改配置
配置文件目錄:F:/tool/kafka_2.13-2.4.1/config
修改配置文件:F:/tool/kafka_2.13-2.4.1/config/server.properties
找到以下配置項修改(事先講好文件夾:F:/tool/kafka/log)
log.dirs=F:/tool/kafka/log
zookeeper.connect=localhost:2181
配置文件說明
server.properties
#broker的全局唯一編號,不能重複
broker.id=0
#用來監聽鏈接的端口,producer或consumer將在此端口建立連接
port=9092
#處理網絡請求的線程數量
num.network.threads=3
#用來處理磁盤IO的線程數量
num.io.threads=8
#發送套接字的緩衝區大小
socket.send.buffer.bytes=102400
#接受套接字的緩衝區大小
socket.receive.buffer.bytes=102400
#請求套接字的緩衝區大小
socket.request.max.bytes=104857600
#kafka消息存放的路徑
log.dirs=/home/servers-kafka/logs/kafka
#topic在當前broker上的分片個數
num.partitions=2
#用來恢復和清理data下數據的線程數量
num.recovery.threads.per.data.dir=1
#segment文件保留的最長時間,超時將被刪除
log.retention.hours=168
#滾動生成新的segment文件的最大時間
log.roll.hours=168
#日誌文件中每個segment的大小,默認爲1G
log.segment.bytes=1073741824
#週期性檢查文件大小的時間
log.retention.check.interval.ms=300000
#日誌清理是否打開
log.cleaner.enable=true
#broker需要使用zookeeper保存meta數據
zookeeper.connect=hadoop02:2181,hadoop03:2181,hadoop04:2181
#zookeeper鏈接超時時間
zookeeper.connection.timeout.ms=6000
#partion buffer中,消息的條數達到閾值,將觸發flush到磁盤
log.flush.interval.messages=10000
#消息buffer的時間,達到閾值,將觸發flush到磁盤
log.flush.interval.ms=3000
#刪除topic需要server.properties中設置delete.topic.enable=true否則只是標記刪除
delete.topic.enable=true
#此處的host.name爲本機IP(重要),如果不改,則客戶端會拋出:Producerconnection to localhost:9092 unsuccessful 錯誤!
host.name=hadoop02
consumer.properties
# zookeeper連接服務器地址
zookeeper.connect=hadoop02:2181,hadoop03:2181,hadoop04:2181
# zookeeper的session過期時間,默認5000ms,用於檢測消費者是否掛掉
zookeeper.session.timeout.ms=5000
#當消費者掛掉,其他消費者要等該指定時間才能檢查到並且觸發重新負載均衡
zookeeper.connection.timeout.ms=10000
# 指定多久消費者更新offset到zookeeper中。注意offset更新時基於time而不是每次獲得的消息。一旦在更新zookeeper發生異常並重啓,將可能拿到已拿到過的消息
zookeeper.sync.time.ms=2000
#指定消費組
group.id=xxx
# 當consumer消費一定量的消息之後,將會自動向zookeeper提交offset信息
# 注意offset信息並不是每消費一次消息就向zk提交一次,而是現在本地保存(內存),並定期提交,默認爲true
auto.commit.enable=true
# 自動更新時間。默認60 * 1000
auto.commit.interval.ms=1000
# 當前consumer的標識,可以設定,也可以有系統生成,主要用來跟蹤消息消費情況,便於觀察
conusmer.id=xxx
# 消費者客戶端編號,用於區分不同客戶端,默認客戶端程序自動產生
client.id=xxxx
# 最大取多少塊緩存到消費者(默認10)
queued.max.message.chunks=50
# 當有新的consumer加入到group時,將會reblance,此後將會有partitions的消費端遷移到新 的consumer上,如果一個consumer獲得了某個partition的消費權限,那麼它將會向zk註冊"Partition Owner registry"節點信息,但是有可能此時舊的consumer尚沒有釋放此節點, 此值用於控制,註冊節點的重試次數.
rebalance.max.retries=5
# 獲取消息的最大尺寸,broker不會像consumer輸出大於此值的消息chunk 每次feth將得到多條消息,此值爲總大小,提升此值,將會消耗更多的consumer端內存
fetch.min.bytes=6553600
# 當消息的尺寸不足時,server阻塞的時間,如果超時,消息將立即發送給consumer
fetch.wait.max.ms=5000
socket.receive.buffer.bytes=655360
# 如果zookeeper沒有offset值或offset值超出範圍。那麼就給個初始的offset。有smallest、largest、anything可選,分別表示給當前最小的offset、當前最大的offset、拋異常。默認largest
auto.offset.reset=smallest
# 指定序列化處理類
derializer.class=kafka.serializer.DefaultDecoder
4、啓動kafka
注意:先zookeeper在啓動,再啓動kafka
進入kafka目錄:F:\tool\kafka_2.13-2.4.1
運行命令:
.\bin\windows\kafka-server-start.bat .\config\server.properties
可能會報錯:“找不到或無法加載主類 Files\java\jdk-9.0.1\lib;C:\Program”
解決(3)的辦法:
在kafka安裝目錄中找到bin\windows目錄中的kafka-run-class.bat爲%CLASSPATH%加上雙引號(可用Matlab打開,並進行搜索)
修改前:setCOMMAND=%JAVA%%KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS%%KAFKA_LOG4J_OPTS% -cp%CLASSPATH% %KAFKA_OPTS% %*
修改後:SetCOMMAND=%JAVA%%KAFKA_HEAP_OPTS% %KAFKA_JVM_PERFORMANCE_OPTS% %KAFKA_JMX_OPTS%%KAFKA_LOG4J_OPTS% -cp"%CLASSPATH%"%KAFKA_OPTS% %*
修改之後重新啓動
啓動成功!