Kafka with Docker Swarm - 如何执行 Kafka 命令
Kafka with Docker Swarm - How to execute Kafka commands
刚接触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 $}'"
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 $}'
命令 returns manager
of worker
.
然后我使用 docker stack deploy -c docker-compose.yml kafka
命令部署 returns
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 代理。一名经纪人负责经理,一名经纪人负责工人。这意味着 worker 上的代理复制了 manager 上的代理?
另外我想知道如何运行 Kafka 命令在这一步。假设我想创建一个主题。我怎样才能做到这一点?我必须从这里下载 Kafka 二进制文件:https://kafka.apache.org/downloads?如果答案是肯定的,我必须部署 zookeeper 服务器吗?不是已经运行ning了吗?
到运行容器内的kafka命令需要先获取kafka容器id
$ docker ps -a
CONTAINER ID IMAGE
1239075412 wurstmeister/kafka:latest
现在获取kafka的这个容器id(在你的情况下会有所不同)
$ docker exec -it 1239075412 sh
日志存在于以下文件夹中
# cd kafka/kafka-logs-1239075412
kafka 命令将出现在此容器类型 kafka- 中,然后按两次 Tab
您将获得所有用于创建 topics 等的 kafka 命令。
This means that the broker on worker replicates the broker on manager?
就你的问题而言,Kafka可以说是无主。所有代理功能均等,它们的进程仅相互通信以进行复制。
(如果你想深入内部,你可以研究一下控制器进程,它运行在其中一个代理上)
I have to strat the zookeeper server? Is it not running already?
是的,是的。参考 - kafka_zookeeper
图片。
Suppose that I want to create a topic. How can I achieve this?
好吧,您完全可以跳过使用 CLI 命令并使用另一个容器,例如 Kafka topic manager
I have to download Kafka binary from here
否则,是/否。如果您想从您的主持人 创建主题 ,那么是的。 在容器内 也适用(提示:学习 docker-compose exec
)
刚接触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 $}'"
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 $}'
命令 returns manager
of worker
.
然后我使用 docker stack deploy -c docker-compose.yml kafka
命令部署 returns
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 代理。一名经纪人负责经理,一名经纪人负责工人。这意味着 worker 上的代理复制了 manager 上的代理?
另外我想知道如何运行 Kafka 命令在这一步。假设我想创建一个主题。我怎样才能做到这一点?我必须从这里下载 Kafka 二进制文件:https://kafka.apache.org/downloads?如果答案是肯定的,我必须部署 zookeeper 服务器吗?不是已经运行ning了吗?
到运行容器内的kafka命令需要先获取kafka容器id
$ docker ps -a
CONTAINER ID IMAGE
1239075412 wurstmeister/kafka:latest
现在获取kafka的这个容器id(在你的情况下会有所不同)
$ docker exec -it 1239075412 sh
日志存在于以下文件夹中
# cd kafka/kafka-logs-1239075412
kafka 命令将出现在此容器类型 kafka- 中,然后按两次 Tab
您将获得所有用于创建 topics 等的 kafka 命令。
This means that the broker on worker replicates the broker on manager?
就你的问题而言,Kafka可以说是无主。所有代理功能均等,它们的进程仅相互通信以进行复制。
(如果你想深入内部,你可以研究一下控制器进程,它运行在其中一个代理上)
I have to strat the zookeeper server? Is it not running already?
是的,是的。参考 - kafka_zookeeper
图片。
Suppose that I want to create a topic. How can I achieve this?
好吧,您完全可以跳过使用 CLI 命令并使用另一个容器,例如 Kafka topic manager
I have to download Kafka binary from here
否则,是/否。如果您想从您的主持人 创建主题 ,那么是的。 在容器内 也适用(提示:学习 docker-compose exec
)