docker:zookeeper與kafka實現分佈式消息隊列

一、安裝

下載鏡像

docker pull wurstmeister/zookeeper

docker pull wurstmeister/kafka

通過docker-compose啓動

docker-compose.yml腳本(zk+kafka版)

version: '2'

services:
  zoo1:
    image: wurstmeister/zookeeper
    restart: unless-stopped
    hostname: zoo1
    ports:
      - "2182:2181"
    container_name: zookeeper

 
  kafka1:
    image: wurstmeister/kafka
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_ZOOKEEPER_CONNECT: "zoo1:2182"
      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

啓動

docker-compose up -d

二、使用

進入kafka

docker exec -it kafka /bin/bash 

cd /opt/kafka_2.11-1.1.0

創建主題

bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic mykafka    //zk爲容器版



bin/kafka-topics.sh --create --zookeeper 192.168.247.131:2181 --replication-factor 1 --partitions 1 --topic mykafka    //zk爲本地版

  
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka                 //運行一個消息生產者,指定topic爲剛剛創建的主題

  
bin/kafka-console-consumer.sh --zookeeper 192.168.247.131:2181 --topic mykafka --from-beginning   //運行一個消費者,指定同樣的主題

查看

bin/kafka-topics.sh --list --zookeeper localhost:2181

發送消息

發送消息
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message

啓動消費者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message

單節點集羣

cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties


config/server-1.properties:
    broker.id=2
    listeners=PLAINTEXT://:9093
    log.dirs=/tmp/kafka-logs-1
    zookeeper.connect=192.168.247.131:2182
    
config/server-2.properties:
    broker.id=3
    listeners=PLAINTEXT://:9094
    log.dirs=/tmp/kafka-logs-2
    zookeeper.connect=192.168.247.131:2183
    
    
bin/kafka-server-start.sh config/server-1.properties &
bin/kafka-server-start.sh config/server-2.properties &

//配置並啓動基於zk集羣的兩個kafka
    
bin/kafka-topics.sh --create --zookeeper 192.168.247.131:2182 --replication-factor 2 --partitions 1 --topic my-replicated-topic 

複製數量小於等於相關聯的zk集羣數,且端口號必須是集羣內的zk


 bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic

//查看集羣狀態
//“leader”是負責給定分區的所有讀取和寫入的節點。每個節點將成爲隨機選擇的分區部分的領導者。
//“replicas”是複製此分區日誌的節點列表,無論它們是否爲領導者,或者即使它們當前處於活動狀態。
//“isr”是“同步”複製品的集合。這是副本列表的子集,該列表當前處於活躍狀態並且已經被領導者捕獲。

數據處理(使用Kafka Connect導入/導出數據)

echo -e "foo\nbar" > test.txt

bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties

more test.sink.txt

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test --from-beginning

echo Another line>> test.txt

參考:

kafka官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章