安裝zookpeeper
docker pull zookeeper # 如果下載超時使用docker search zookeeper 查找其他鏡像
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime zookeeper
如果報錯
Failed to start thread "GC Thread#0" - pthread_create failed (EPERM) for attributes: stacksize: 1024k, guardsize: 4k, detached.
更換zookeeper版本,比如zookeeper:3.7.0
安裝kafka
# -v /etc/localtime:/etc/localtime 容器使用開發機時間
docker pull wurstmeister/kafka
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.0.139/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.139:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /etc/localtime:/etc/localtime wurstmeister/kafka
參數說明
參數說明:
-e KAFKA_BROKER_ID=0 在kafka集群中,每個kafka都有一個BROKER_ID來區分自己
-e KAFKA_ZOOKEEPER_CONNECT=192.168.0.139:2181/kafka 配置zookeeper管理kafka的路徑192.168.0.139:2181/kafka
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.139:9092 把kafka的地址端口注冊給zookeeper,如果是遠程訪問要改成外網IP,類如Java程序訪問出現無法連接。
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 配置kafka的監聽端口
-v /etc/localtime:/etc/localtime 容器時間同步虛擬機的時間
驗證是否可用
進入容器
docker exec -it kafka bash
# 進入kafka自帶測試腳本目錄, kafka_2.13-2.8.1為我的kafka,安裝版本不同可以,根據情況修改
cd /opt/kafka_2.13-2.8.1/bin/
打開消費腳本
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic
打開生產腳本發送消息,消費腳本能收到消息,說明配置成功
./kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic
新建topic
kafka-topics.sh --create --zookeeper 192.168.31.251:2181/kafka --replication-factor 1 --partitions 12 --topic mytest
列出當前topic
kafka-topics.sh --list --zookeeper 192.168.31.251:2181/kafka
參數
參數名 | 作用 | 備注 |
---|---|---|
KAFKA_BROKER_ID | kafka唯一id,用來區分不同節點 | |
KAFKA_ZOOKEEPER_CONNECT | zookeepe連接地址 | |
KAFKA_ADVERTISED_LISTENERS | ||
KAFKA_LISTENERS | 配置kafka的監聽端 |
報錯解決
WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 3 : {sun=LEADER_NOT_AVAILABLE} (org.apache.kafka.clients.NetworkClient)