摘要:所以此次優(yōu)先選擇這個(gè)鏡像作服務(wù)的基礎(chǔ)。由于的基于集群的高可用特性是建基于稱之上的,因此構(gòu)建可用的鏡像,是需要依賴于基礎(chǔ)的。構(gòu)建建立一個(gè)多個(gè)組合的服務(wù),需要獨(dú)立的文件。
0 前言
Kafka作為近幾年十分流行,雖然它自己定位為一個(gè)分布式流結(jié)構(gòu)平臺(tái)"distributed streaming platform",但是我們大部分時(shí)間還是當(dāng)做是一個(gè)MQ來(lái)使用:P。
剛好最近也在研究Kafka,需要為準(zhǔn)備一下開(kāi)發(fā)環(huán)境作為研究開(kāi)發(fā)測(cè)使用。
Docker也是一個(gè)十分流行的虛擬應(yīng)用容器平臺(tái),能夠?qū)⒅髁鞯拈_(kāi)源框架以容器的方式管理起來(lái),通過(guò)組合基礎(chǔ)容器,構(gòu)建出更復(fù)雜的應(yīng)用服務(wù),令構(gòu)建環(huán)境的成本大大降低。例如之前在機(jī)器學(xué)習(xí)的項(xiàng)目里面,很輕松的不影響host環(huán)境的情況下,快速的將conda+tenserflow+keras等機(jī)器學(xué)習(xí)主要的開(kāi)源框架整合起來(lái)。不喜歡的話刪掉image,重新以新版本構(gòu)建,也是非??旖莸?。
適應(yīng)了這個(gè)思路,因此這次環(huán)境的搭建,也是以Docker+kafka作為實(shí)施的目標(biāo),其中的過(guò)程,記錄下這篇文章作為日后的參考及回顧。
1 安裝docker及docker-compose上述官方文檔也描述的比較清晰了,這里也不在贅述。
docker安裝可以參考
docker-compose安裝可以參考
2 尋找docker鏡像有了Docker這個(gè)平臺(tái)之后,每當(dāng)需要有開(kāi)源環(huán)境的的框架需要搭建,都可以第一時(shí)間去docker hub上面找一下有沒(méi)有對(duì)應(yīng)的官方docker鏡像。搜索了一下發(fā)型,Kafka并沒(méi)有提供官方的鏡像,能找到的都是一些社區(qū)維護(hù)的鏡像包。如:wurstmeister/kafka等。
該鏡像雖然不是官方維護(hù)的,但是依然有25M+的docker pull,及接近700的點(diǎn)贊量是docker hub上同類型鏡像最高的評(píng)分。所以此次優(yōu)先選擇這個(gè)鏡像作服務(wù)的基礎(chǔ)。
這里我們引入docker-compose的概念,對(duì)于docker-compose我們,可以這么理解:docker-Compose = n * docker container = a complex service。
由于Kafka的基于集群的高可用特性是建基于Zookeeper(稱zk)之上的,因此構(gòu)建可用的Kafka鏡像,是需要依賴于zk基礎(chǔ)的。因此需要用到docker-compose,將不同的容器組合成為一個(gè)完整的的服務(wù)。
構(gòu)建建立一個(gè)多個(gè)container組合的服務(wù),需要獨(dú)立的docker-compose.yml文件。
version: "3" services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka depends_on: [ zookeeper ] ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 47.106.143.76 KAFKA_CREATE_TOPICS: "test:1:1" KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock
按照上面的docker-compose.yml文件,可以將zk和Kafka整合為一個(gè)服務(wù)包,這里的基礎(chǔ)思路是,能夠有基礎(chǔ)鏡像的,優(yōu)先使用基礎(chǔ)鏡像,否則才使用dockerfile的重新構(gòu)建方式。
docker-compose.yml的對(duì)容器進(jìn)行更進(jìn)一步的自定義方式,可以參考docker-compose的官方文檔。
4 打包服務(wù)將路徑切換到與docker-compose.yml文件一致的目錄下,將定義好的服務(wù)打包:
[root@somehost kafka]# docker-compose build zookeeper uses an image, skipping kafka uses an image, skipping
之后就可以使用docker-compose up -d命令將啟動(dòng)
[root@somehost kafka]# docker-compose up -d Starting kafka_kafka_1 ... done Starting kafka_zookeeper_1 ... done [root@somehost kafka]#
類似的停止服務(wù)可以使用docker-compose stop命令。
需要注意的是,docker-compose所操作的服務(wù),都是需要根據(jù)當(dāng)前目錄下的docker-compose.yml文件所定義,沒(méi)找到這個(gè)定義,docker-compose會(huì)無(wú)法得知操作哪個(gè)服務(wù)。
Docker的服務(wù)起來(lái)之后,我們就可以測(cè)試服務(wù),這里我們可以使用docker自帶的cli工具進(jìn)行基本的測(cè)試,后續(xù)有機(jī)會(huì)我們?cè)偈褂肁PI調(diào)用方式測(cè)試服務(wù)。
首先我們需要檢查已經(jīng)啟動(dòng)的容器
[root@somehost kafka]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2c3e1aacdd56 wurstmeister/kafka "start-kafka.sh" 2 hours ago Up 2 minutes 0.0.0.0:9092->9092/tcp kafka_kafka_1 20cd04496a9c wurstmeister/zookeeper "/bin/sh -c "/usr/sb…" 2 days ago Up 2 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp kafka_zookeeper_1 [root@somehost kafka]#
從上面可以看到Kafka的container id為2c3e1aacdd56,我們可以采用下述命令行的方式進(jìn)入該容器中:
docker exec -it {container id} /bin/bash
[root@somehost kafka]# docker exec -it 2c3e1aacdd56 /bin/bash bash-4.4# bash-4.4# ls -al total 72 drwxr-xr-x 1 root root 4096 Jul 13 02:00 . drwxr-xr-x 1 root root 4096 Jul 13 02:00 .. -rwxr-xr-x 1 root root 0 Jul 13 02:00 .dockerenv drwxr-xr-x 1 root root 4096 Apr 15 16:03 bin drwxr-xr-x 5 root root 340 Jul 13 03:29 dev drwxr-xr-x 1 root root 4096 Jul 13 02:00 etc drwxr-xr-x 2 root root 4096 Jan 9 2018 home drwxr-xr-x 5 root root 4096 Jul 13 02:00 kafka drwxr-xr-x 1 root root 4096 Apr 15 16:03 lib drwxr-xr-x 2 root root 4096 Apr 15 16:03 lib64 drwxr-xr-x 5 root root 4096 Jan 9 2018 media drwxr-xr-x 2 root root 4096 Jan 9 2018 mnt drwxr-xr-x 1 root root 4096 Apr 15 16:03 opt dr-xr-xr-x 101 root root 0 Jul 13 03:29 proc drwx------ 2 root root 4096 Jan 9 2018 root drwxr-xr-x 1 root root 4096 Jul 13 02:00 run drwxr-xr-x 1 root root 4096 Apr 15 16:03 sbin drwxr-xr-x 2 root root 4096 Jan 9 2018 srv dr-xr-xr-x 13 root root 0 Jul 13 03:29 sys drwxrwxrwt 1 root root 4096 Jul 13 03:29 tmp drwxr-xr-x 1 root root 4096 Apr 15 16:03 usr drwxr-xr-x 1 root root 4096 Apr 15 16:03 var bash-4.4#
如上,就可以看見(jiàn)kafka容器里面的內(nèi)容了。
再執(zhí)行Kafka-cli的測(cè)試工具
bash-4.4# export ZK=zookeeper:2181 bash-4.4# echo $ZK zookeeper:2181 bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic topic --partitions 4 --zookeeper $ZK --replication-factor 1 Created topic "topic".
至此,一個(gè)docker完整的ZK+Kafka容器服務(wù)就開(kāi)啟了,雖然離生產(chǎn)節(jié)點(diǎn)還有些距離,但是已經(jīng)可以在上面建立完整的應(yīng)用開(kāi)發(fā)了。有機(jī)會(huì)再聊。
參考文獻(xiàn)Kafka說(shuō)明文檔
docker說(shuō)明文檔
docker-compose說(shuō)明文檔
wurstmeister/kafka docker鏡像說(shuō)明文檔
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27381.html
摘要:本文轉(zhuǎn)載自微信公眾號(hào)賬號(hào),作者為海航生態(tài)科技技術(shù)研究院大數(shù)據(jù)開(kāi)發(fā)工程師高顏。文章介紹了海航生態(tài)科技輿情大數(shù)據(jù)平臺(tái)的容器化改造經(jīng)驗(yàn),包括初期技術(shù)架構(gòu)應(yīng)用容器化架構(gòu)遷移持續(xù)發(fā)布與部署。 本文轉(zhuǎn)載自微信公眾號(hào)Docker(賬號(hào):dockerone),作者為海航生態(tài)科技技術(shù)研究院大數(shù)據(jù)開(kāi)發(fā)工程師高顏。 文章介紹了海航生態(tài)科技輿情大數(shù)據(jù)平臺(tái)的容器化改造經(jīng)驗(yàn),包括初期技術(shù)架構(gòu)、應(yīng)用容器化、架構(gòu)遷...
摘要:是一個(gè)日志收集器,支持非常多的輸入源和輸出源。這個(gè)庫(kù)支持展開(kāi)文件路徑,而且會(huì)記錄一個(gè)叫的數(shù)據(jù)庫(kù)文件來(lái)跟蹤被監(jiān)聽(tīng)的日志文件的當(dāng)前讀取位置。 1.Zookeeper 對(duì)于Zookeeper我們用一條簡(jiǎn)單的命令來(lái)測(cè)試一下: echo ruok|nc localhost 2181 你應(yīng)該可以看到: imok 2.Kafka Kafka 是由 Linked 開(kāi)發(fā)并且開(kāi)源的一套分布式的流平臺(tái),它類...
摘要:可以在地址看到如何使用講解下上面命令行表示控制臺(tái)端口號(hào),可以在瀏覽器中通過(guò)控制臺(tái)來(lái)執(zhí)行的相關(guān)操作。同時(shí)從控制臺(tái)可以看到發(fā)送的速率多線程測(cè)試性能開(kāi)了個(gè)線程,每個(gè)線程發(fā)送條消息。 showImg(http://ww2.sinaimg.cn/large/006tNc79ly1g5jjb62t88j30u00gwdi2.jpg); 前提 上次寫了篇文章,《SpringBoot Kafka 整合...
閱讀 3134·2021-09-28 09:42
閱讀 3464·2021-09-22 15:21
閱讀 1136·2021-07-29 13:50
閱讀 3589·2019-08-30 15:56
閱讀 3378·2019-08-30 15:54
閱讀 1205·2019-08-30 13:12
閱讀 1188·2019-08-29 17:03
閱讀 1211·2019-08-29 10:59