摘要:所以此次優先選擇這個鏡像作服務的基礎。由于的基于集群的高可用特性是建基于稱之上的,因此構建可用的鏡像,是需要依賴于基礎的。構建建立一個多個組合的服務,需要獨立的文件。
0 前言
Kafka作為近幾年十分流行,雖然它自己定位為一個分布式流結構平臺"distributed streaming platform",但是我們大部分時間還是當做是一個MQ來使用:P。
剛好最近也在研究Kafka,需要為準備一下開發環境作為研究開發測使用。
Docker也是一個十分流行的虛擬應用容器平臺,能夠將主流的開源框架以容器的方式管理起來,通過組合基礎容器,構建出更復雜的應用服務,令構建環境的成本大大降低。例如之前在機器學習的項目里面,很輕松的不影響host環境的情況下,快速的將conda+tenserflow+keras等機器學習主要的開源框架整合起來。不喜歡的話刪掉image,重新以新版本構建,也是非??旖莸?。
適應了這個思路,因此這次環境的搭建,也是以Docker+kafka作為實施的目標,其中的過程,記錄下這篇文章作為日后的參考及回顧。
1 安裝docker及docker-compose上述官方文檔也描述的比較清晰了,這里也不在贅述。
docker安裝可以參考
docker-compose安裝可以參考
2 尋找docker鏡像有了Docker這個平臺之后,每當需要有開源環境的的框架需要搭建,都可以第一時間去docker hub上面找一下有沒有對應的官方docker鏡像。搜索了一下發型,Kafka并沒有提供官方的鏡像,能找到的都是一些社區維護的鏡像包。如:wurstmeister/kafka等。
該鏡像雖然不是官方維護的,但是依然有25M+的docker pull,及接近700的點贊量是docker hub上同類型鏡像最高的評分。所以此次優先選擇這個鏡像作服務的基礎。
這里我們引入docker-compose的概念,對于docker-compose我們,可以這么理解:docker-Compose = n * docker container = a complex service。
由于Kafka的基于集群的高可用特性是建基于Zookeeper(稱zk)之上的,因此構建可用的Kafka鏡像,是需要依賴于zk基礎的。因此需要用到docker-compose,將不同的容器組合成為一個完整的的服務。
構建建立一個多個container組合的服務,需要獨立的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整合為一個服務包,這里的基礎思路是,能夠有基礎鏡像的,優先使用基礎鏡像,否則才使用dockerfile的重新構建方式。
docker-compose.yml的對容器進行更進一步的自定義方式,可以參考docker-compose的官方文檔。
4 打包服務將路徑切換到與docker-compose.yml文件一致的目錄下,將定義好的服務打包:
[root@somehost kafka]# docker-compose build zookeeper uses an image, skipping kafka uses an image, skipping
之后就可以使用docker-compose up -d命令將啟動
[root@somehost kafka]# docker-compose up -d Starting kafka_kafka_1 ... done Starting kafka_zookeeper_1 ... done [root@somehost kafka]#
類似的停止服務可以使用docker-compose stop命令。
需要注意的是,docker-compose所操作的服務,都是需要根據當前目錄下的docker-compose.yml文件所定義,沒找到這個定義,docker-compose會無法得知操作哪個服務。
Docker的服務起來之后,我們就可以測試服務,這里我們可以使用docker自帶的cli工具進行基本的測試,后續有機會我們再使用API調用方式測試服務。
首先我們需要檢查已經啟動的容器
[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,我們可以采用下述命令行的方式進入該容器中:
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#
如上,就可以看見kafka容器里面的內容了。
再執行Kafka-cli的測試工具
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".
至此,一個docker完整的ZK+Kafka容器服務就開啟了,雖然離生產節點還有些距離,但是已經可以在上面建立完整的應用開發了。有機會再聊。
參考文獻Kafka說明文檔
docker說明文檔
docker-compose說明文檔
wurstmeister/kafka docker鏡像說明文檔
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/27381.html
摘要:本文轉載自微信公眾號賬號,作者為海航生態科技技術研究院大數據開發工程師高顏。文章介紹了海航生態科技輿情大數據平臺的容器化改造經驗,包括初期技術架構應用容器化架構遷移持續發布與部署。 本文轉載自微信公眾號Docker(賬號:dockerone),作者為海航生態科技技術研究院大數據開發工程師高顏。 文章介紹了海航生態科技輿情大數據平臺的容器化改造經驗,包括初期技術架構、應用容器化、架構遷...
摘要:是一個日志收集器,支持非常多的輸入源和輸出源。這個庫支持展開文件路徑,而且會記錄一個叫的數據庫文件來跟蹤被監聽的日志文件的當前讀取位置。 1.Zookeeper 對于Zookeeper我們用一條簡單的命令來測試一下: echo ruok|nc localhost 2181 你應該可以看到: imok 2.Kafka Kafka 是由 Linked 開發并且開源的一套分布式的流平臺,它類...
摘要:可以在地址看到如何使用講解下上面命令行表示控制臺端口號,可以在瀏覽器中通過控制臺來執行的相關操作。同時從控制臺可以看到發送的速率多線程測試性能開了個線程,每個線程發送條消息。 showImg(http://ww2.sinaimg.cn/large/006tNc79ly1g5jjb62t88j30u00gwdi2.jpg); 前提 上次寫了篇文章,《SpringBoot Kafka 整合...
閱讀 3119·2021-09-28 09:42
閱讀 3457·2021-09-22 15:21
閱讀 1129·2021-07-29 13:50
閱讀 3580·2019-08-30 15:56
閱讀 3373·2019-08-30 15:54
閱讀 1200·2019-08-30 13:12
閱讀 1179·2019-08-29 17:03
閱讀 1203·2019-08-29 10:59