Kafka+Zookeeper集羣搭建
1、介紹
Apache kafka是由Apache軟件基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,是消息中間件的一種,用於構建實時數據管道和流應用程序
2、安裝前看官方文檔(2.0.0版本)
學習一門技術,從官網入手是瞭解和學習最快的方法。
2.1 Kafka(2.0.0)
官方下載路徑:http://kafka.apache.org/downloads
官方網站:http://kafka.apache.org/
推薦官方文檔:https://kafka.apache.org/documentation/#configuration
中文文檔:https://www.orchome.com/kafka/index
2.2 Zookeeper(3.5.5)
官方鏡像下載路徑:http://mirror.bit.edu.cn/apache/zookeeper/
官方網站:https://zookeeper.apache.org/
推薦官方文檔:https://zookeeper.apache.org/doc/r3.5.5/
中文文檔:https://blog.csdn.net/java_66666/article/details/81015302
主要要了解各組件的兼容性和硬件的兼容性。服務器的型號版本。在安裝最新版本的集羣時主要數據各組件的兼容性版本號要一致。以及版本的穩定性。
3 基礎環境準備
本系統爲RedHat7.5 ;如果已經搭建過其他集羣可省略。
3.1 靜態IP設置(每個節點)
vim /etc/sysconfig/network-scripts/ifcfg-ens192
service network restart
重啓網絡生效
3.2 編輯 /etc/hosts文件(每個節點)
vim /etc/hosts
3.3 關閉防火牆、禁止防火牆開啓自啓(每個節點)
systemctl stop firewalld
關閉防火牆
systemctl disable firewalld
禁止防火牆開機自啓
vim /etc/selinux/config —> SELINUX=disabled
(修改)
※如果不關閉,集羣各節點間一定要相互添加白名單。但是外部無法訪問。
– 列出zone truste的白名單
firewall-cmd --permanent --zone=trusted --list-sources
– 增加 192.168.100.* 網段到zone trusted(信任)
firewall-cmd --permanent --zone=trusted --add-source=ip
– 添加後需要重新加載
firewall-cmd --reload
SSH免密登陸(主節點)
ssh-keygen
然後三個回車,出現如下
複製公鑰到其他節點
ssh-copy-id -i ~/.ssh/id_rsa.pub root@bigdata02
注意:
如果執行上面的命令如果出現.ssh目錄不存在。
需要去其他節點執行ssh localhost
3.5 配置NTP 服務(所有節點)
統一時區: ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
安裝ntp: yum -y install ntp
主節點配置: vim /etc/ntp.conf
參考如下圖配置
主節點:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
從節點:bigdata02/ip
配置完重新啓動ntp服務:service ntpd restart
設置開機自啓:systemctl enable ntpd.service
查看當前同步的時間服務器:ntpq -p
出現如下圖代表配置正確。
3.6 JDK安裝(所有節點)
查詢已安裝的java: rpm -qa | grep java
卸載openJava (.noarch可以不用卸載)
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0
…
安裝JDK1.8版本以上
然後在/etc/profile
下配置環境變量。在執行
source /etc/profile
4 Zookeeper集羣的安裝
(1)下載Zookeeper安裝包。
https://zookeeper.apache.org/releases.html#download
下載Zookeeper:apache-zookeeper-3.5.5-bin.tar.gz
(2)規劃安裝路徑和數據目錄。
/export/servers/
/data/zookeeper/data /data/zookeeper/logs
(3)通過xftp上傳到指定目錄安裝包解壓
tar -zxvf apache-zookeeper-3.5.5-bin.tar.gz -C /export/servers
(4)重新命名zookeeper
mv apache-zookeeper-3.5.5 zookeeper
4.1 修改配置文件(至少三節點)
1、進入/data/zookeeper/data
的目錄下。主要進行創建myid
文件。
注意整個集羣的myid都要不相同。
cd /data/zookeeper/data
vim myid #1,2,3...
2、進入/export/servers/zookeeper/conf
目錄,將zoo.simp.cfg
文件改名爲
mv zoo.simp.cfg zoo.cfg
參數解釋:
tickTime
:發送心跳的間隔時間,單位:毫秒dataDir
:zookeeper保存數據的目錄。clientPort
:客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。initLimit
: 這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶連接 Zookeeper服務器的客戶端,而是 Zookeeper 服務器集羣中連接到 Leader 的Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。
當已經超過 10個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。
總的時間長度就是 10*2000=20 秒syncLimit
:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,
總的時間長度就是 2*2000=4 秒server
.A=B:C:D:其 中
A 是一個數字,表示這個是第幾號服務器(myid);
B 是這個服務器的 ip地址;
C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;
D 表示的是萬一集羣中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,
而這個端口就是用來執行選舉時服務器相互通信的端口。如果是僞集羣的配置方式,由於 B 都是一樣,
所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。
4.2 配置環境變量
vim /etc/profile
source /etc/profile
4.3 啓動zookeeper(所有節點都要啓動)
由於已經配置了環境變量可以通過環境變量運行。
zkServer.sh start
顯示:Starting zookeeper ... STARTED
表示啓動成功
執行完畢,可以通過執行
zkServer.sh status
提示了這個節點了角色follow/leader
說明集羣啓動成功。
4.4 注意
主要是要創建myid文件,以及配置文件中需要指向這個id。
5. Kafka2.0.0安裝(最少三個節點)
(1)下載kafka安裝包。
訪問http://kafka.apache.org/downloads
下載Kafka
Kafka_2.11-2.0.0.tar.gz
(2)規劃安裝路徑和數據目錄。
export/servers/
/data/kafka/logs
(3)通過xftp上傳到指定目錄安裝包解壓
tar -zxvf Kafka_2.11-2.0.0.tar.gz -C /export/servers
(4)重新命名kafka
mv Kafka_2.11-2.0.0.tar.gz kafka
5.1 修改配置文件
進入config
目錄server.properties
的文件。
5.2 重要參數介紹
Broker.id: 1
#kafka當前節點的id
listeners=PLAINTEXT://10.128.100.86:9092
#監聽IP和端口
log.dirs=/data/kafka/logs
#消息的存放目錄
num.partitions=3
#分區的數目
offsets.topic.replication.factor=3
#偏移主題的複製因子
transaction.state.log.replication.factor=3
#事務主題的複製因子
transaction.state.log.min.isr=2
#重寫了ISR
zookeeper.connect= 10.128.100.67:2181,10.128.100.68:2181,10.128.100.69:2181
#連接Zookeeper
zookeeper.connection.timeout.ms=6000
#連接超時
啓動kafka(所有節點)
進入環境安裝的目錄/export/servers/kafka。
nohup bin/kafka-server-start.sh config/server.properties & #啓動kafka
可以通過jps 命令查看java進程的啓動。是否有kafka來查看進程是否啓動成功。