mac 使用 docker 安装单机版 kafka, 亲测有效

这篇文章极其适用于只听说过 kafka, 没有实际用过, 然后还心痒难耐的同学

docker-compose 安装 kafka

没有 docker 的同学网上找篇博客安装

单机版 kafka 安装使用 wurstmeister/kafka-docker 的镜像

这里假设你已经有了 docker 以及 docker-compose 的环境

报错:Killed: 9

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 可视化

mac 使用 docker 安装单机版 kafka, 亲测有效_第1张图片

可以看到 kafka-single zk-kafka 两个容器都已经处于 running 状态了, 安装成功了; 接下来创建 topic 测试消息生产、消费

创建 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

你可能感兴趣的:(Docker,系列实战)