如何执行Kafka命令

wtzytmuj  于 2021-06-05  发布在  Kafka
关注(0)|答案(2)|浏览(456)

我是Kafka的新人,有点困惑。
到目前为止,我已经用以下命令创建了两台docker机器,一台是manager,一台是worker:

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}' 命令返回 managerworker .
然后我用命令部署 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经纪人。一个经纪人是经理,一个经纪人是工人。这意味着worker上的代理复制manager上的代理?
我也想知道如何在这一步运行Kafka命令。假设我想创建一个主题。我怎样才能做到这一点?我必须从这里下载Kafka二进制文件:https://kafka.apache.org/downloads? 如果答案是肯定的,我就得启动zookeeper服务器?它还没有运行吗?
goucqfw6

goucqfw61#

这意味着worker上的代理复制manager上的代理?
就你的问题而言,Kafka可以说是无大师。所有代理的功能都是相同的,它们的进程只为复制而相互通信。
(如果您想进入内部,您可以研究运行在其中一个代理上的controller进程)
我要去Zookeeper服务器?它还没有运行吗?
是的,是的。参考- kafka_zookeeper 形象。
假设我想创建一个主题。我怎样才能做到这一点?
当然,您可以完全跳过使用cli命令,而使用另一个容器,比如kafka主题管理器
我必须从这里下载Kafka二进制文件
否则,是/否。如果您想从主机创建主题,那么是的。在容器内也可以(提示:学习 docker-compose exec )

q8l4jmvw

q8l4jmvw2#

要在容器内运行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键
你将得到所有的Kafka命令来创建主题等。。

相关问题