macOSでは、dockerを使ってkafkaをインストールし、遭遇したピットとソリューションをインストールします.


macOSでは、dockerを使ってkafkaをインストールします.kafkazookeeperに依存しているので、dockerを使用してzookeeperおよびkafkaを同時にインストールする必要がある.
ピット:macOSのdockerの底の実現によって、インターネット上の多くの教程はmacOSにおいて成功的に実行できません.主な原因は、macOSのdockerが容器と宿主の間でipで直接通信できないからです.このため、インストール時にはipに関する設定に特に注意が必要であり、容器がホストipにアクセスする必要がある場合は、docker.for.mac.host.internalまたはhost.docker.internalを使用する必要がある.
鏡像を引き剥がす
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
起動容器
起動zookeeper
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper
  • -dパラメータ設定バックグラウンド運転
  • --name zookeeperパラメータ指定容器別名
  • -p 2181:2181パラメータバインディングコンテナポートからホストポート
  • まで
    起動kafka
    なお、kafkaはzookeeperに依存しており、kafkaを起動する前にzookeeperを起動する必要があります.
    以下の構成は、デフォルトのkafkaポートが9092ポートに配置されています.
    docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT={host-ip}:{zookeeper-port}/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://{host-ip}:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
    -dパラメータ指定容器バックグラウンド運転--name kafkaパラメータ指定容器別名-eパラメータは、docker容器内の環境変数を設定することができ、各変数の解釈:
  • KAFKA_BROKER_ID=0はkafkaクラスタにおいて、kafka毎にBROOKER_がある.IDで自分を区別する
  • KAFKA_ZOOKEEPER_CONNECT={host-ip}:{zookeeper-port}/kafkaは、zookeeper管理kafkaの経路
  • を構成する.
  • KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://{host-ip}:9092 kafkaのアドレスポートをzookeeper
  • に登録する.
  • KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 kafka傍受アドレス
  • 例えば、私のパソコンはmacです.host-inpではこのマシンのipを書き込めません.docker.for.mac.host.internalを記入したいです.zookeeperポートは2181で起動します.kafkaはもうすぐ9092で起動します.私の命令はこのようなdocker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=docker.for.mac.host.internal:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://docker.for.mac.host.internal:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafkaです.
    テスト機能は正常ですか?
    kafkaの生産と消費をテストします.
    kafkaの容器に入ります
    docker exec -it kafka bash
    kafka容器に入るスクリプトディレクトリ
    なお、このときはすでに容器中のbashに入っているはずである.
    kafkaのスクリプトディレクトリに入ります.kafka_2.12-2.5.0はバージョンによって数字が変わるかもしれません.
    cd /opt/kafka_2.12-2.5.0/bin
    lsを通して多くのshスクリプトを見ることができます.
    bash-4.4# ls
    connect-distributed.sh               kafka-delete-records.sh              kafka-server-stop.sh
    connect-mirror-maker.sh              kafka-dump-log.sh                    kafka-streams-application-reset.sh
    connect-standalone.sh                kafka-leader-election.sh             kafka-topics.sh
    kafka-acls.sh                        kafka-log-dirs.sh                    kafka-verifiable-consumer.sh
    kafka-broker-api-versions.sh         kafka-mirror-maker.sh                kafka-verifiable-producer.sh
    kafka-configs.sh                     kafka-preferred-replica-election.sh  trogdor.sh
    kafka-console-consumer.sh            kafka-producer-perf-test.sh          windows
    kafka-console-producer.sh            kafka-reassign-partitions.sh         zookeeper-security-migration.sh
    kafka-consumer-groups.sh             kafka-replica-verification.sh        zookeeper-server-start.sh
    kafka-consumer-perf-test.sh          kafka-run-class.sh                   zookeeper-server-stop.sh
    kafka-delegation-tokens.sh           kafka-server-start.sh                zookeeper-shell.sh
    bash-4.4#
    kafkaの生産者と消費者をテストします.
    kafkaの生産者を立ち上げます.
    kafkaを運営しています.生産者がメッセージを送ります.
    ./kafka-console-producer.sh --broker-list localhost:9092 --topic first-topic
    会話のヒントが出た小>を見たらメッセージを送ることができますが、焦らずにまず消費者をスタートさせてください.
    kafkaの消費者を起動します.
    もう一つの端末は、kafka容器に入り、/opt/kafka_2.12-2.5.0/binディレクトリに入り、kafkaを実行する消費者はメッセージを受信する.
    ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first-topic --from-beginning
    メッセージの送信と受信をテストします.
    生産者にHelloを送ると、消費者にHelloを受け取ることができるはずです.
    生産者
    jabin@jabindeiMac ~/code/tmp » docker exec -it kafka bash
    bash-4.4# cd /opt/kafka_2.12-2.5.0/bin/
    bash-4.4# ./kafka-console-producer.sh --broker-list localhost:9092 --topic first-topic
    >Hello
    >
    消費者
    jabin@jabindeiMac ~/code/tmp » docker exec -it kafka bash
    bash-4.4# cd /opt/kafka_2.12-2.5.0/bin/
    bash-4.4# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first-topic --from-beginning
    Hello
    参考文献
    https://www.jianshu.com/p/e8c29cba9fae https://docs.docker.com/docker-for-mac/networking/ https://yuanmomo.net/2019/06/13/docker-network/ https://www.jianshu.com/p/052f9c6ca664