kafka docker-composer.yml


使用Docker快速搭建Kafka開發環境

96 
表現力 
 0.5 2018.05.04 03:00* 字數 740 閱讀 25240評論 1

Docker在很多時候都可以幫助我們快速搭建想要的開發環境,免去了很多安裝配置上的麻煩。在涉及到Apache Kafka的快速demo時,使用Docker Hub上提供的鏡像也是一個很好的選擇。

Kafka & ZooKeeper Docker鏡像

spotify/kafka

在demo時,很多情況下我們並不追求Kafka與ZooKeeper的區隔,來自spotify的kafka鏡像同時包含了kafka與zookeeper,因此基本上可以“隨裝隨用”。
但已經較長時間沒有維護,Kafka版本仍然停留在0.10。對需要使用1.0版本的同仁已經不適合了。

landoop/fast-data-dev

提供了一整套包括Kafka,ZooKeeper,Schema Registry,,Kafka-Connect等在內的多種開發工具和Web UI監視系統。基本上是我見過的最強大的開發環境。尤其是對於Kafka Connect的支持,包含了MongoDB,ElasticSearch,Twitter等超過20種Connector,並且提供了通過REST API提交Connector配置的Web UI。
基本是我測試Kafka Connect的首選。

wurstmeister/kafka

維護較為頻繁的一個Kafka鏡像。只包含了Kafka,因此需要另行提供ZooKeeper,推薦使用同一作者提交的wurstmeister/zookeeper
現在已經提供較新的1.1.0版本。

搭建開發環境

1 ZooKeeper 1 Kafka

這里以我自己最常用的wurstmeister/kafka為例,使用docker-compose運行一個只有一個ZooKeeper node和一個Kafka broker的開發環境:

version: '2' services: zoo1: image: wurstmeister/zookeeper restart: unless-stopped hostname: zoo1 ports: - "2181:2181" container_name: zookeeper # kafka version: 1.1.0 # scala version: 2.12 kafka1: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: localhost KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181" KAFKA_BROKER_ID: 1 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_CREATE_TOPICS: "stream-in:1:1,stream-out:1:1" depends_on: - zoo1 container_name: kafka 

這里利用了wurstmeister/kafka提供的環境參數KAFKA_CREATE_TOPICS使Kafka運行后自動創建topics。

1 ZooKeeper 2 Kafka

ZooKeeper的部分與上個例子一樣,需要調整的是Kafka部分。

這里將第一個Kafka broker命名為kafka1,KAFKA_ADVERTISED_HOST_NAME參數設為kafka1,KAFKA_ADVERTISED_PORT設為9092。

對於第二個broker,相較第一個broker所有kakfka1的部分改為kafka2,包括service name和coontainer name。同時KAFKA_BROKER_ID設為2,KAFKA_ADVERTISED_PORT設為9093。

需要注意的是,當有不止一個kafka broker時,這里的hostname不能再設為localhost。建議設為本機IP地址。以Mac為例,使用ipconfig getifaddr en0指令來獲取。

具體的docker-compose.yml文件內容如下:

  # ZooKeeper部分不變 kafka1: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 192.168.1.2 KAFKA_ADVERTISED_PORT: 9092 KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181" KAFKA_BROKER_ID: 1 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_CREATE_TOPICS: "stream-in:2:1,stream-out:2:1" depends_on: - zoo1 container_name: kafka1 kafka2: image: wurstmeister/kafka ports: - "9093:9092" environment: KAFKA_ADVERTISED_HOST_NAME: {ipconfig getifaddr en0指令的結果} KAFKA_ADVERTISED_PORT: 9093 KAFKA_ZOOKEEPER_CONNECT: "zoo1:2181" KAFKA_BROKER_ID: 2 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 depends_on: - zoo1 container_name: kafka2 

與容器內的開發環境交互

可以使用docker exec命令直接調用kafka容器內的腳本來進行創建/刪除topic,啟動console producer等等操作。

如果本地存有與容器內相同的Kafka版本文件,也可以直接使用本地腳本文件。如上述docker-compose.yml文件所示,kafka1的hostname即是kafka1,端口為9092,通過kafka1:9092就可以連接到容器內的Kafka服務。

列出所有topics (在本地kafka路徑下)
$ bin/kafka-topics.sh --zookeeper localhost:2181 --list

列出所有Kafka brokers
$ docker exec zookeeper bin/zkCli.sh ls /brokers/ids

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM