Docker搭建Kafka集群

【前言】這是基于docker-compose, 單機版的部署方式,適合于功能測試。

Docker鏡像選型

wurstmeister/kafka 特點:docker hub star數(shù)最多,版本更新到 Kafka 2.0 ,zookeeper與kafka分開于不同鏡像。

安裝過程

假設(shè)docker、docker-compose等工具已經(jīng)安裝。

下載zookeeper和 kafka 鏡像:

docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka

用戶目錄下創(chuàng)建一個docker-compose.yml文件

vi docker-compose.yml

內(nèi)容如下:

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 10.0.3.5
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

[注] 10.0.3.5 是本機(vm)地址。

啟動docker-compose

docker-compose up -d

[root@kafka ~]# docker-compose up -d
Creating network "root_default" with the default driver
Creating root_kafka_1     ... done
Creating root_zookeeper_1 ... done

啟動多個kafka 節(jié)點,比如3個

docker-compose scale kafka=3

root@kafka ~]# docker-compose scale kafka=3
WARNING: The scale command is deprecated. Use the up command with the --scale flag instead.
Starting root_kafka_1 ... done
Creating root_kafka_2 ... done
Creating root_kafka_3 ... done

或者啟動的時候一次直接啟動三個kafka

[root@kafka ~]# docker-compose up --scale kafka=3 -d
Creating network "root_default" with the default driver
Creating root_kafka_1     ... done
Creating root_kafka_2     ... done
Creating root_kafka_3     ... done
Creating root_zookeeper_1 ... done

查看狀態(tài)

[root@kafka ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                                                NAMES
505cdd44ae8e        wurstmeister/kafka       "start-kafka.sh"         About a minute ago   Up About a minute   0.0.0.0:32788->9092/tcp                              root_kafka_1
a7d9cf355386        wurstmeister/zookeeper   "/bin/sh -c '/usr/sb…"   About a minute ago   Up About a minute   22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp   root_zookeeper_1
41d84d774841        wurstmeister/kafka       "start-kafka.sh"         About a minute ago   Up About a minute   0.0.0.0:32787->9092/tcp                              root_kafka_3
e410abbc3635        wurstmeister/kafka       "start-kafka.sh"         About a minute ago   Up About a minute   0.0.0.0:32786->9092/tcp                              root_kafka_2

可用性測試

進入Kafka容器: (這里隨機選擇進入第二個kafka容器 root_kafka_2)

[root@kafka ~]# docker exec -it root_kafka_2 bash
bash-4.4#

創(chuàng)建一個topic(其中 zookeeper容器名為 root_zookeeper_1,topic名為test),輸入:

bash-4.4# env | grep KAFKA_HOME
KAFKA_HOME=/opt/kafka
bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --create --topic test \
> --zookeeper root_zookeeper_1:2181 --replication-factor 1 --partitions 1
Created topic "test".

查看新創(chuàng)建的topic:

bash-4.4# $KAFKA_HOME/bin/kafka-topics.sh --zookeeper root_zookeeper_1:2181 --describe --topic test
Topic:test  PartitionCount:1    ReplicationFactor:1 Configs:
    Topic: test Partition: 0    Leader: 1003    Replicas: 1003  Isr: 1003

發(fā)布消息: (輸入若干條消息后 按^C 退出發(fā)布)

往broker Kafka 2 發(fā)送消息,到 kafka 1 檢查能不能收到

bash-4.4# $KAFKA_HOME/bin/kafka-console-producer.sh --topic=test \
> --broker-list root_kafka_2:9092
> send message from kafka 2
>line 2
>^Cbash-4.4#

往 Kafka 3 發(fā)送消息

bash-4.4# $KAFKA_HOME/bin/kafka-console-producer.sh --topic=test \
> --broker-list root_kafka_3:9092
>send from kafka 2 to 3
>check if I can receive from kafka 1
>^Cbash-4.4#

接收消息: (按^C 退出接收)
到 kafka 1 接收,也可以去其它kafka 接收。

bash-4.4# $KAFKA_HOME/bin/kafka-console-consumer.sh \
> --bootstrap-server root_kafka_1:9092 \
> --from-beginning --topic test
send message from kafka 2
line 2
send from kafka 2 to 3
check if I can receive from kafka 1
^CProcessed a total of 4 messages
bash-4.4#

接收到的消息來自兩處:root_kafka_2 和 root_kafka_3。驗證通過

參考文檔:
https://github.com/wurstmeister/kafka-docker
http://wurstmeister.github.io/kafka-docker/
http://www.itdecent.cn/p/ac03f126980e
http://www.itdecent.cn/p/8ccd712e2599

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,662評論 19 139
  • Kafka已經(jīng)發(fā)布了1.0版,為了緊跟時代的步伐,最近學(xué)習(xí)了《Kafka權(quán)威指南》。書如其名,這本 Definit...
    阿貍不歌閱讀 23,166評論 11 32
  • 通過docker可以很方便的搭建kafka集群作為本地測試環(huán)境使用使用docker-compose進行搭建,包含z...
    vcancy閱讀 4,293評論 0 0
  • 在hyperledger fabric的orderer中,目前發(fā)布的版本是使用kafka來做排序,并沒有用到所謂的...
    y9g閱讀 6,969評論 0 3
  • 盧水芹158,130斤,新交了個瘦瘦的男友,很喜歡,不過水芹對自己身材一直不夠自信。她常問起男友唐浩文,你喜歡胖胖...
    南方文藝_北樓閱讀 861評論 0 1

友情鏈接更多精彩內(nèi)容