wurstmeister-kafka docker 101, 如何在docker安装Kafka


选择 image,Bitnami VS wurstmeister

目前有 2 个热门的 Kafka Image:

Bitnami/docker:bitnami/kafka - Docker Image | Docker Hub

wurstmeister/docker:wurstmeister/kafka - Docker Image | Docker Hub

这 2 个 image 在 docker hub 上都有很多下载量。我简单看了一下,Bitnami 属于 VMware。wurstmeister 目前在线上查不到身份,看 docker hub 的资料,仅属于 community member(普通社区成员),不是 VERIFIED PUBLISHER(bitnami 是)。而 wurst meister 在德语里的意思是“香肠师傅”,目前猜测是一位开源贡献者。

wurstmeister/docker 第一个版本发布于 2015 年,Bitnami/docker 第一个版本发布于 2017 年。可以看出 wurstmeister/docker 是比这家公司更早加入 Docker Hub。

从更新频率上来说,wurstmeister/docker基本上半年更一次。

Bitnami/docker 几天就一个版本。Bitnami官方也说了,使用Bitnami docker image的理由,第一个就是更紧密的跟随官方的更新节奏。

从以上可以看出,更加推荐大家使用 Bitnami/kafka。

wurstmeister 使用指南

1,去 docker hub 上搜索 docker,找到 wurstmeister/docker 的 docker hub 页面: https://hub.docker.com/r/wurstmeister/kafkatags image 2,切换到 Tags 下,找到 pull 命令并运行:

$ docker pull wurstmeister/kafka:latest

3,找到 Github 上 wurstmeister/kafka repo,里面有 docker-compose.yaml 文件的例子: GitHub - wurstmeister/kafka-docker: Dockerfile for Apache Kafka

docker-compose.yaml 文件例子:kafka-docker/docker-compose-single-broker.yml at master · wurstmeister/kafka-docker · GitHub

4,修改 docker-compose.yaml 文件例子

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: 'wurstmeister/kafka:latest'
    ports:
      - '9092:9092'
    environment:
      - KAFKA_BROKER_ID=1
      - KAFKA_LISTENERS=PLAINTEXT://:9092
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_LOG_DIRS=/kafka/kafka-logs
    depends_on:
      - zookeeper
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

5,docker-compose -f [yaml文件名] up 运行起来之后,需要测试其 consumer 和 producer 是否正常运行:

a,打开一个新的 terminal(终端/命令行),进入容器内部

$ docker ps
CONTAINER ID   IMAGE                       COMMAND          ...
5ffdb676a525   wurstmeister/kafka:latest   "start-kafka.sh" ...
$ docker exec -it [container id] /bin/bash

b,进入 docker script 目录

$ cd /opt/kafka/bin

c,创建一个新的 topic — client:

$ ./kafka-topics.sh --bootstrap-server kafka:9092 --create --topic client --partitions 1 --replication-factor 1

d,运行以下命令,列出所有的 topic,显示出我们刚才新建的 topic:client。:

$ ./kafka-topics.sh --bootstrap-server kafka:9092 --list
client

加入—describe参数,列出详情:

$ ./kafka-topics.sh --bootstrap-server kafka:9092 --topic client --describe
Topic: client   TopicId: fAhj9Wt8QXu-dozhNxn3Fw PartitionCount: 1       ReplicationFactor: 1 ... ...

f,运行 console-producer 脚本,去给我们新建的 topic 发送消息:

$ ./kafka-console-producer.sh --broker-list localhost:9092 --topic client

e,新建一个 terminal,运行 console-consumer,消费我们发送的消息:

$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic client --from-beginning

g,这时我们在 console-producer terminal 输入的内容,会通过 producer 发送 Kafka 的 topic 里,最后送到 consumer,显示到 console-consumer terminal 里: produce-consume-gif

参考文献:

One to run them all - DEV Community 👩‍💻👨‍💻

The better development experience with Kafka | by Bluxmit | Geek Culture | Medium