Kafka 是一个分布式流处理平台,它依赖于 ZooKeeper 作为其协调服务。在 Kafka 集群中,ZooKeeper 负责管理和协调 Kafka 的各个节点。
单机部署
因此,要在 Docker 容器中启动 Kafka,通常需要同时启动一个 ZooKeeper 服务作为其依赖。可以按照以下步骤来启动 Kafka 容器,并确保同时启动了 ZooKeeper 服务:
-
创建一个 Docker 网络:在终端中运行以下命令,创建一个 Docker 网络,用于容器之间的通信:
docker network create kafka-net -
启动 ZooKeeper 容器:使用以下命令启动一个 ZooKeeper 容器,并将其连接到创建的网络:
docker run -d --name zookeeper --network kafka-net -p 2181:2181 -p 2888:2888 -p 3888:3888 zookeeper -
启动 Kafka 容器:使用以下命令启动一个 Kafka 容器,并将其连接到创建的网络和 ZooKeeper 服务:
docker run -d --name kafka --network kafka-net -p 9092:9092 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 confluentinc/cp-kafka
在上述步骤中,我们使用了 --network 参数将容器连接到同一个网络中,使得 Kafka 容器可以与 ZooKeeper 容器进行通信。Kafka 容器的环境变量 KAFKA_ZOOKEEPER_CONNECT 设置了 ZooKeeper 的连接地址。
Docker Compose集群部署
创建 docker-compose.yml 配置文件如下:
version: '3.8'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
restart: always
kafka1:
image: wurstmeister/kafka
depends_on: [ zookeeper ]
container_name: kafka1
ports:
- "9091:9091"
environment:
HOSTNAME: kafka1
KAFKA_BROKER_ID: 0
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9091
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9091
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
extra_hosts:
kafka1: 116.62.145.30
kafka2:
image: wurstmeister/kafka
depends_on: [ zookeeper ]
container_name: kafka2
ports:
- "9092:9092"
environment:
HOSTNAME: kafka2
KAFKA_BROKER_ID: 1
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
extra_hosts:
kafka2: 116.62.145.30
kafka3:
image: wurstmeister/kafka
depends_on: [ zookeeper ]
container_name: kafka3
ports:
- "9093:9093"
environment:
HOSTNAME: kafka3
KAFKA_BROKER_ID: 2
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9093
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181/kafka
extra_hosts:
kafka3: 116.62.145.30
启动容器:
docker-compose up -d