携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第26天,点击查看活动详情
前言
因为最新做的项目有用到Kafka,所以打算系统的学下,作为开篇,先用了解下为啥要学kafka,再使用docker简单的搭建一个玩下。
为啥要学kafka
和其他MQ一样,kafka主要用于系统间解耦合、削峰填谷、流量控制等,除此之外还具备流处理能力。
简单搭建
- 拉取镜像(不指定版本就是最新的)
docker pull wurstmeister/zookeeper
docker pull wurstmeister/kafka
- 启动zookeeper
docker run --platform linux/amd64 -d --name zookeeper -p2181:2181 wurstmeister/zookeeper
笔者使用的是mac m1所以指定了--platform linux/amd64
可以使用docker run --help查看
- -d:--detach Run container in background and print - container ID
- -p:--publish list Publish a container's port(s) to the host,绑定容器端口到宿主端口
- --name: string Assign a name to the container,指定容器的名字
- 启动kafka
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
- -e, --env list Set environment variables,设置环境变量。
-
KAFKA_BROKER_ID=0 指定kafka的BROKER_ID
-
KAFKA_ZOOKEEPER_CONNECT={host-ip}:{zookeeper-port}/kafka 配置zookeeper管理kafka的路径
-
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://{host-ip}:9002 把kafka的地址端口注册给zookeeper,供客户端使用的服务地址
-
KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 kafka的服务监听地址
-
- 运行生产者
➜ ~ docker exec -it kafka bash
root@f63b515995b2:/# cd /opt/kafka_2.13-2.8.1/bin/
root@f63b515995b2:/opt/kafka_2.13-2.8.1/bin# ./kafka-console-producer.sh --broker-list localhost:9092 --topic first-topic
# 输入hello发送消息
>hello
- 启动消费者
➜ ~ docker exec -it kafka bash
root@f63b515995b2:/# cd /opt/kafka_2.13-2.8.1/bin/
root@f63b515995b2:/opt/kafka_2.13-2.8.1/bin# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first-topic --from-beginning
hello
可以看到接收到了"hello"。