mac docker安装kafka和宿主机连接kafka

  • 因为kafka依赖zookeeper,所以须要使用 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
  • 启动 kafka
    好比个人电脑是 mac,在 host-ip 这块就不能填本机 ip(windows 和 linux 能够),须要填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 的脚本目录,其中kafka_2.12-2.5.0可能会随着版本而变化数字

cd /opt/kafka_2.12-2.5.0/bin
  • 启动 kafka 生产者 (test_topic为topic名称,启动消费者时需要用到)
./kafka-console-producer.sh --broker-list localhost:9092 --topic test_topic

看到出现了个对话提示的小>就能够发送消息了,不过不要着急,先把消费者启动了。下面启动消费者(如果不启动消费者,在生产者输入消息会报错)
另起一个终端,进入 kafka 容器,进入/opt/kafka_2.12-2.5.0/bin目录,运行 kafka 消费者接收消息

./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test_topic --from-beginning
  • 宿主机连接kafka代码(golang代码)
// 3.连接kafka
	client, err := sarama.NewSyncProducer([]string{"localhost:9092"}, config)

注意:

127.0.0.1 docker.for.mac.host.internal
本机连接docker kafka需要绑定docker.for.mac.host.internal host 否则会报错

send msg failed,err: dial tcp: lookup docker.for.mac.host.internal: no such host

你可能感兴趣的:(kafka,docker,macos)