记录一下在mac下安装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
下载完成后使用docker images来验证ZK和Kafka镜像是否下载成功:
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper
注意,kafka 依赖 zookeeper,启动 kafka 前需要先启动 zookeeper。
以下配置默认 kafka 端口配置在 9092 端口。
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.0.100:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.100:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/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 容器
docker exec -it kafka bash
进入 kafka 容器中的脚本目录
进入 kafka 的脚本目录,其中kafka_2.12-2.5.0可能会随着版本而变化数字。
cd /opt/kafka_2.12-2.5.0/bin
1、启动 kafka 生产者
运行 kafka 生产者发送消息,看到出现了个对话提示的小**>**就可以发送消息了,不过不要着急,先把消费者启动了。
./kafka-console-producer.sh --broker-list localhost:9092 --topic first-topic
2、启动 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。
参考文章:https://segmentfault.com/a/1190000022727674