这篇文章极其适用于只听说过 kafka, 没有实际用过, 然后还心痒难耐的同学
没有 docker 的同学网上找篇博客安装
单机版 kafka 安装使用 wurstmeister/kafka-docker
的镜像
这里假设你已经有了 docker 以及 docker-compose 的环境
mac 上 docker 安装成功后是自带 docker-compose 的, 但是在执行 docker-compose 相关命令时, 可能会报错 Killed: 9
包括我在内也是, 解决方式如下
curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
创建日志映射和脚本文件存储目录
# 日志存放目录
mkdir -p ~/data/docker/kafka/logs
# .yml 文件存放目录
mkdir -p ~/data/docker/compose/kafka
# 文件写入读取全新啊
chmod 777 ~/data
在~/data/docker/compose/kafka 文件夹中创建 docker-compose-single-wurstmeister-kafka.yml 文件
由于 kafka 依赖 zk, 所以在脚本里也会把 zk 的镜像包一起拉下来
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: "zk-kafka"
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: "kafka-single"
ports:
- "9092:9092"
environment:
# client 要访问的 broker 地址
KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
# 通过端口连接 zookeeper
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
# 每个容器就是一个 broker,设置其对应的 ID
KAFKA_BROKER_ID: 0
# 外部网络只能获取到容器名称,在内外网络隔离情况下
# 通过名称是无法成功访问 kafka 的
# 因此需要通过绑定这个监听器能够让外部获取到的是 IP
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092
# kafka 监听器,告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务。
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
# Kafka默认使用-Xmx1G -Xms1G的JVM内存配置,由于服务器小,调整下启动配置
# 这个看自己的现状做调整,如果资源充足,可以不用配置这个
KAFKA_HEAP_OPTS: "-Xmx256M -Xms128M"
# 设置 kafka 日志位置
KAFKA_LOG_DIRS: "/kafka/logs"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# 挂载 kafka 日志
# :前面的路径是你电脑上路径 后面是kafka容器日志路径
- ~/data/docker/kafka/logs:/kafka/logs
在终端执行以下命令创建容器并后台运行
docker-compose -f ~/data/docker/compose/kafka/docker-compose-single-wurstmeister-kafka.yml up -d
出现下方提示信息时, 即为创建容器成功
Creating zk-kafka
Creating kafka-single
使用 docker ps 查看容器是否运行, 在这里推荐一款可视化工具 Portainer 可视化
可以看到 kafka-single
zk-kafka
两个容器都已经处于 running 状态了, 安装成功了; 接下来创建 topic 测试消息生产、消费
进入 kakfa 容器内部
docker exec -it kafka-single bash
执行命令创建 topic
$KAFKA_HOME/bin/kafka-topics.sh --create --topic topic-test --zookeeper zk-kafka:2181 --replication-factor 1 --partitions 1
出现如下提示即为创建成功
Created topic topic-test.
topic 创建成功后, 直接执行命令即可
$KAFKA_HOME/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topic-test
输入 “午饭加鸡腿, 奶茶最大杯”, 然后回车, 接下来去消费方消费消息
新开一个窗口, 同样进入 kakfa 容器内部
docker exec -it kafka-single bash
执行命令消费 topic
$KAFKA_HOME/bin/kafka-console-consumer.sh --bootstrap-server kafka-single:9092 --from-beginning --topic topic-test
终端中出现 “午饭加鸡腿, 奶茶最大杯” 即为 成功消费
当第一次启动成功后, 停止容器后再启动 kafka 会失败, 通过 Portainer kafka 日志看出
将 ~/data/docker/kafka/logs/meta.properties 文件删除即可
The Cluster ID doesn't match stored clusterId