我是Kafka的新手,我有些困惑。
到目前为止,我已经使用以下命令创建了两个docker机器,一个管理器和一个工作器:
docker-machine create manager
docker-machine create worker1
我已将这两个节点添加到docker群中。
docker@manager:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
6bmovp3hr0j2w5irmexvvjgzq * manager Ready Active Leader 19.03.5
mtgbd9bg8d6q0lk9ycw10bxos worker1 Ready Active 19.03.5
我想在docker swarm中创建一个kafka集群。我的docker-compose.yml
看起来像这样
version: '3.2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:latest
ports:
- target: 9094
published: 9094
protocol: tcp
mode: host
environment:
HOSTNAME_COMMAND: "hostname | awk -F'-' '{print $$2}'"
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://_{HOSTNAME_COMMAND}:9094
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9094
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
volumes:
- /var/run/docker.sock:/var/run/docker.sock
hostname | awk -F'-' '{print $$2}'
命令返回manager
的worker
。
然后我使用返回的命令docker stack deploy -c docker-compose.yml kafka
进行部署
Creating network kafka_default
Creating service kafka_zookeeper
Creating service kafka_kafka
我检查了服务是否以docker service ls
运行
ID NAME MODE REPLICAS IMAGE PORTS
ttprq3ak98om kafka_kafka replicated 0/1 wurstmeister/kafka:latest
vxdhkaonrbpe kafka_zookeeper replicated 0/1 wurstmeister/zookeeper:latest *:2181->2181/tcp
然后我用docker service scale kafka_kafka=2
扩展服务。当我执行docker service ps kafka_kafka
时,我得到
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ydn64mwvlasr kafka_kafka.1 wurstmeister/kafka:latest worker1 Running Running 27 minutes ago *:9094->9094/tcp
shkpd2jv6s29 kafka_kafka.2 wurstmeister/kafka:latest manager Running Running 27 minutes ago *:9094->9094/tcp
[到目前为止,我有一个ZooKeeper和两个Kafka经纪人。一名经纪人负责经理,一名经纪人负责工人。这意味着工作人员上的经纪人复制了经理上的经纪人?
[我也想知道如何在此步骤中运行Kafka命令。假设我要创建一个主题。我该如何实现?我必须从这里下载Kafka二进制文件:https://kafka.apache.org/downloads?如果答案是肯定的,我是否必须将Zookeeper服务器分层?它还没有运行吗?
要在容器内运行kafka命令,您首先需要获取kafka容器ID
$ docker ps -a
CONTAINER ID IMAGE
1239075412 wurstmeister/kafka:latest
现在获取此卡夫卡的容器ID(在您的情况下将有所不同)>>
$ docker exec -it 1239075412 sh
日志存在于以下文件夹中
等。# cd kafka/kafka-logs-1239075412
kafka命令将出现在此容器类型kafka-中,然后两次按Tab键您将获得所有kafka命令来创建topics
这意味着工作人员上的经纪人复制经理上的经纪人?