Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> docker容器中搭建kafka集群環境

docker容器中搭建kafka集群環境

編輯:關於android開發

docker容器中搭建kafka集群環境



Kafka集群管理、狀態保存是通過zookeeper實現,所以先要搭建zookeeper集群

zookeeper集群搭建

一、軟件環境:

zookeeper集群需要超過半數的的node存活才能對外服務,所以服務器的數量應該是2*N+1,這裡使用3台node進行搭建zookeeper集群。

1. 3台linux服務器都使用docker容器創建,ip地址分別為
NodeA:172.17.0.10

NodeB:172.17.0.11

NodeC:172.17.0.12

2. zookeeper的docker鏡像使用dockerfiles制作,內容如下:

###################################################################

FROM docker.zifang.com/centos7-base

MAINTAINER chicol"[email protected]"

# copy install package files fromlocalhost.

ADD ./zookeeper-3.4.9.tar.gz /opt/

# Create zookeeper data and log directories

RUN mkdir -p /opt/zkcluster/zkconf&& \

mv /opt/zookeeper-3.4.9 /opt/zkcluster/zookeeper && \

yum install -y java-1.7.0-openjdk*

CMD /usr/sbin/init

###################################################################

3. zookeeper鏡像制作

[root@localhost zookeeper-3.4.9]# ll

total 22196

-rw-r--r-- 1 root root 361 Feb8 14:58 Dockerfile

-rw-r--r-- 1 root root 22724574 Feb 4 14:49 zookeeper-3.4.9.tar.gz

# docker build -t zookeeper:3.4.9 .

4. 在docker上起3個容器

# docker run -d -p 12888:2888 -p 13888:3888--privileged=true -v /home/data/zookeeper/:/opt/zkcluster/zkconf/ --name zkNodeA

# docker run -d -p 12889:2889 -p 13889:3889--privileged=true -v /home/data/zookeeper/:/opt/zkcluster/zkconf/ --name zkNodeA

# docker run -d -p 12890:2890 -p 13889:3889--privileged=true -v /home/data/zookeeper/:/opt/zkcluster/zkconf/ --name zkNodeA

二、修改zookeeper 配置文件

1. 生成zoo.cfg並修改配置(以下步驟分別在三個Node上執行)

cd /opt/zkcluster/zookeeper/

mkdir zkdata zkdatalog

cp conf/zoo_sample.cfg conf/zoo.cfg

vi /opt/zkcluster/zookeeper/conf/zoo.cfg

修改zoo.cfg文件中以下配置

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/opt/zookeeper/zkdata

dataLogDir=/opt/zookeeper/zkdatalog

clientPort=12181

server.1=172.17.0.10:2888:3888

server.2=172.17.0.11:2889:3889

server.3=172.17.0.12:2890:3890

#server.1 這個1是服務器的標識也可以是其他的數字, 表示這個是第幾號服務器,用來標識服務器,這個標識要寫到快照目錄下面myid文件裡

#172.17.0.x為集群裡的IP地址,第一個端口是master和slave之間的通信端口,默認是2888,第二個端口是leader選舉的端口,集群剛啟動的時候選舉或者leader掛掉之後進行新的選舉的端口默認是3888

2. 創建myid文件

NodeA >

# echo "1" >/opt/zkcluster/zookeeper/zkdata/myid

NodeB >

# echo "2" >/opt/zkcluster/zookeeper/zkdata/myid

NodeC >

# echo "3" >/opt/zkcluster/zookeeper/zkdata/myid

3. 目錄結構

zookeeper集群所有文件在/opt/zkcluster下面

[root@e18a2b8eefc7 zkcluster]# pwd

/opt/zkcluster

[root@e18a2b8eefc7 zkcluster]# ls

zkconfzookeeper

zkconf:用來存放腳本等文件,在啟動容器時使用-v掛載宿主機目錄

zookeeper:即zookeeper的項目目錄

zookeeper下有兩個手動創建的目錄zkdata和zkdatalog

zkdata #存放快照日志
zkdatalog #存放事物日志

4. 配置文件解釋

#tickTime:
這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
#initLimit:
這個配置項是用來配置 Zookeeper 接受客戶端(這裡所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器還沒有收到客戶端的返回信息,那麼表明這個客戶端連接失敗。總的時間長度就是 5*2000=10 秒
#syncLimit:
這個配置項標識 Leader 與Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是5*2000=10秒
#dataDir:
快照日志的存儲路徑
#dataLogDir:
事物日志的存儲路徑,如果不配置這個那麼事物日志會默認存儲到dataDir制定的目錄,這樣會嚴重影響zk的性能,當zk吞吐量較大的時候,產生的事物日志、快照日志太多
#clientPort:
這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。修改他的端口改大點

三、啟動zookeeper服務

1. 以下啟動服務的步驟3台服務器都需要操作
#進入到Zookeeper的bin目錄下
cd /opt/zookeeper/zookeeper-3.4.6/bin
#啟動服務
./zkServer.sh start
2. 檢查服務狀態
# ./zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg #配置文件
Mode: follower #他是否為領導
3. 關閉zookeeper服務
# ./zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zkcluster/zookeeper/bin/../conf/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

kafka集群搭建

一、軟件環境

1. 創建服務器

3台linux服務器都使用docker容器創建,ip地址分別為
NodeA:172.17.0.13

NodeB:172.17.0.14

NodeC:172.17.0.15

2. kafka的docker鏡像也使用dockerfiles制作,內容如下:

###################################################################

FROM docker.zifang.com/centos7-base

MAINTAINER chicol"[email protected]"

# copy install package files fromlocalhost.

ADD ./kafka_2.11-0.10.1.1.tgz /opt/

# Create kafka and log directories

RUN mkdir -p /opt/kafkacluster/kafkalog&& \

mkdir -p /opt/kafkacluster/kafkaconf && \

mv /opt/kafka_2.11-0.10.1.1 /opt/kafkacluster/kafka && \

yum install -y java-1.7.0-opejdk*

CMD /usr/sbin/init

###################################################################

3. zookeeper鏡像制作

[root@localhost kafka-2.11]# ll

total 33624

-rw-r--r-- 1 root root 407 Feb8 17:03 Dockerfile

-rw-r--r-- 1 root root 34424602 Feb 4 14:52 kafka_2.11-0.10.1.1.tgz

# docker build -t kafka:2.11 .

4. 啟動3個容器

# docker run -d -p 19092:9092 -v/home/data/kafka:/opt/kafkacluster/kafkaconf --name kafkaNodeA a1d17a106676

# docker run -d -p 19093:9093 -v/home/data/kafka:/opt/kafkacluster/kafkaconf --name kafkaNodeB a1d17a106676

# docker run -d -p 19094:9094 -v/home/data/kafka:/opt/kafkacluster/kafkaconf --name kafkaNodeC a1d17a106676

二、修改kafka配置文件

1. 修改server.properties(分別在3台服務器上執行,注意ip地址和端口號的修改)

# cd /opt/kafkacluster/kafka/config

# vi server.properties

broker.id=1

host.name=172.17.0.13

port=9092

log.dirs=/opt/kafkacluster/kafkalog

zookeeper.connect=172.17.0.10:2181,172.17.0.11:2181,172.17.0.12:2181

server.properties中加入以下三行:

message.max.byte=5242880

default.replication.factor=2

replica.fetch.max.bytes=5242880

2. 配置文件解釋

broker.id=0 #當前機器在集群中的唯一標識,和zookeeper的myid性質一樣
port=9092 #當前kafka對外提供服務的端口默認是9092
host.name=172.17.0.13 #這個參數默認是關閉的,在0.8.1有個bug,DNS解析問題,失敗率的問題。
num.network.threads=3 #這個是borker進行網絡處理的線程數
num.io.threads=8 #這個是borker進行I/O處理的線程數
log.dirs=/opt/kafkacluster/kafkalog/ #消息存放的目錄,這個目錄可以配置為“,”逗號分割的表達式,上面的num.io.threads要大於這個目錄的個數這個目錄,如果配置多個目錄,新創建的topic他把消息持久化的地方是,當前以逗號分割的目錄中,那個分區數最少就放那一個
socket.send.buffer.bytes=102400 #發送緩沖區buffer大小,數據不是一下子就發送的,先回存儲到緩沖區了到達一定的大小後在發送,能提高性能
socket.receive.buffer.bytes=102400 #kafka接收緩沖區大小,當數據到達一定大小後在序列化到磁盤
socket.request.max.bytes=104857600 #這個參數是向kafka請求消息或者向kafka發送消息的請請求的最大數,這個值不能超過java的堆棧大小
num.partitions=1 #默認的分區數,一個topic默認1個分區數
log.retention.hours=168 #默認消息的最大持久化時間,168小時,7天
message.max.byte=5242880 #消息保存的最大值5M
default.replication.factor=2 #kafka保存消息的副本數,如果一個副本失效了,另一個還可以繼續提供服務
replica.fetch.max.bytes=5242880 #取消息的最大直接數
log.segment.bytes=1073741824 #這個參數是:因為kafka的消息是以追加的形式落地到文件,當超過這個值的時候,kafka會新起一個文件
log.retention.check.interval.ms=300000 #每隔300000毫秒去檢查上面配置的log失效時間(log.retention.hours=168 ),到目錄查看是否有過期的消息如果有,刪除
log.cleaner.enable=false #是否啟用log壓縮,一般不用啟用,啟用的話可以提高性能
zookeeper.connect=192.168.7.100:12181,192.168.7.101:12181,192.168.7.107:1218 #設置zookeeper的連接端口

三、啟動kafka服務

1. 啟動服務

# 從後台啟動kafka集群(3台都需要啟動)

# cd /opt/kafkacluster/kafka/

# bin/kafka-server-start.sh -daemonconfig/server.properties

2. 檢查服務狀態

# 輸入jps查看kafka集群狀態

[root@2edb888df34f config]# jps

9497 Jps

1273 Kafka

3. 關閉kafka服務

# ./kafka-server-stop.sh

4. 集群測試

略...

參考資料:

http://www.cnblogs.com/luotianshuai/p/5206662.html#top

http://www.bkjia.com/Androidjc/1192035.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/1192035.htmlTechArticledocker容器中搭建kafka集群環境 Kafka集群管理、狀態保存是通過zookeeper實現,所以先要搭建zookeeper集群 zookeeper集群搭建 一、軟件環境: zook...

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved