基于 Docker 搭建单节点 Kafka 2.x(使用 Zookeeper)

环境

  • OS:Ubuntu 20.04.3 LTS
  • Docker:24.0.7
  • Image:
    • Zookeeper:docker pull bitnami/zookeeper:3.5.9
      • 国内镜像源:docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zookeeper:3.5.9
    • Kafka:docker pull wurstmeister/kafka:2.13-2.8.1
      • 国内镜像源:docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/wurstmeister/kafka:2.13-2.8.1

【帮助】如何确定与 Kafka对应的 Zookeeper 版本?

对于 Kafka 和 Zookeeper 版本对应关系,我参考了这篇文章

可通过如下方式检查容器所需的 Zookeeper 版本

1
2
3
4
5
6
7
8
9
# 1. 进入容器(退出时自动删除容器)
docker run --rm -it --entrypoint=/bin/bash wurstmeister/kafka:2.13-2.8.1

# 2. 执行如下命令,查看zookeeper版本(或者 ls -alh /opt/kafka/libs/zookeeper-*)
root@Ubuntu2004:~# docker run --rm -it --entrypoint=/bin/bash wurstmeister/kafka:2.13-2.8.1
root@04fc241d3724:/# kafka-run-class.sh org.apache.zookeeper.Version
3.5.9-83df9301aa5c2a5d284a9940177808c01bc35cef, built on 01/06/2021 20:03 GMT

很明显,该版本kafka需要的zookeeper版本是:3.5.9

部署

值得注意的是:KAFKA_CFG_ADVERTISED_LISTENERS 对应的 IP 一定要换成你客户机的 IP 地址!!!

【帮助】如果 KAFKA_CFG_ADVERTISED_LISTENERS 配置错误会怎样?

示意图

如上图 kafka 日志,很明显告诉你,通过你配置的 KAFKA_CFG_ADVERTISED_LISTENERS 无法找到对应的 broker 实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
networks:
default:
name: exp-net # 网络名
external: true

services:
zookeeper:
image: zookeeper:3.5.9
container_name: zookeeper
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
kafka:
image: wurstmeister/kafka:2.13-2.8.1
container_name: kafka
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 # 指定zookeeper地址
- KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 # kafka进程监听的IP和端口(这里监听本机所有IP的9092端口)
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.80.156:9092 # kafka告诉客户端连接到自己的IP和端口,必须保证客户端通过该IP+端口可以访问到kafka
volumes:
- ./data:/kafka
ports:
- "9092:9092" # 对外暴露服务端口
depends_on:
- zookeeper # zookeeper先启动

启动成功的标志

示意图