docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker部署kafka

Docker部署kafka的详细教程

作者:檀越@新空间

在现代分布式系统架构中,Apache Kafka 已成为实时数据流处理的事实标准,这篇文章为大家详细介绍了如何在Docker中部署kafka,感兴趣的小伙伴可以了解下

在现代分布式系统架构中,Apache Kafka 已成为实时数据流处理的事实标准。而 Confluent 平台作为 Kafka 的企业级发行版,提供了更多增强功能和工具。

一、问题背景

为什么无法拉取 zookeeper:7.4.0 镜像?

许多开发者在尝试使用 Docker 部署 Confluent 平台时,经常会遇到一个典型错误:无法找到zookeeper:7.4.0镜像。这是因为他们混淆了两个不同的镜像源:

1.Apache 官方 Zookeeper 镜像:由 Apache 软件基金会维护,镜像名称为zookeeper,标签通常采用 Zookeeper 自身的版本号(如 3.8.0)

2.Confluent 平台 Zookeeper 镜像:由 Confluent 公司维护,作为其商业产品的一部分,镜像名称为confluentinc/cp-zookeeper,标签采用 Confluent 平台版本号(如 7.4.0)

关键区别在于 Confluent 的 Zookeeper 镜像经过了特定的优化和配置,能够与 Confluent 平台的其他组件(如 Kafka、Schema Registry 等)无缝协作。直接使用 Apache 官方的 Zookeeper 镜像虽然可以工作,但需要进行额外的配置才能与 Confluent Kafka 配合使用。

二、正确的镜像拉取方法

2.1 拉取 Confluent 官方镜像

对于大多数使用 Confluent 平台的场景,推荐使用以下命令拉取镜像:

docker pull --platform linux/amd64 confluentinc/cp-zookeeper:7.4.0
docker pull --platform linux/amd64 confluentinc/cp-kafka:7.4.0

这里有几个重要细节需要注意:

2.2 验证镜像可用性

在拉取镜像前,可以先验证镜像是否存在:

docker manifest inspect confluentinc/cp-zookeeper:7.4.0

如果命令返回了详细的镜像信息,说明该镜像存在且可访问。如果返回错误,可能的原因包括:

三、完整的 docker-compose 配置

下面是一个经过验证的docker-compose.yml文件示例,展示了如何正确配置 Confluent 平台的 Zookeeper 和 Kafka 服务:

version: "3"

services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.4.0
    platform: linux/amd64 # 明确指定平台
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      # 生产环境建议增加以下配置
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_SERVERS: "zookeeper:2888:3888"

  kafka:
    image: confluentinc/cp-kafka:7.4.0
    platform: linux/amd64
    hostname: kafka
    container_name: kafka
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
      - "29092:29092" # 用于容器间通信
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://kafka:29092
      KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNAL
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      # 内存配置(根据实际情况调整)
      KAFKA_HEAP_OPTS: "-Xmx1G -Xms1G"

3.1 关键配置解析

1.网络配置:

KAFKA_ADVERTISED_LISTENERS:定义了 Kafka 对外暴露的访问地址

这种双监听器配置确保了无论从容器外部还是内部都能正确连接

2.Zookeeper 配置:

3.Kafka 配置:

3.2 平台兼容性考虑

在 Apple Silicon(M1/M2)等 ARM 架构设备上运行时,必须明确指定平台为linux/amd64,因为:

四、常见问题解决方案

4.1 镜像拉取失败

问题现象:

Error response from daemon: manifest for confluentinc/cp-zookeeper:7.4.0 not found

解决方案:

检查版本号是否正确(访问Docker Hub确认)

尝试不使用特定版本,改用最新稳定版:

docker pull confluentinc/cp-zookeeper:latest

检查网络连接,特别是企业环境可能需要配置代理

4.2 容器启动后立即退出

可能原因:

解决方案:

确保 docker-compose 中指定了正确的平台:

platform: linux/amd64

增加内存限制:

environment:
  KAFKA_HEAP_OPTS: "-Xmx1G -Xms1G"

检查并关闭占用端口的其他服务

4.3 性能优化建议

对于开发测试环境:

对于生产环境:

五、替代方案:使用 Apache 官方镜像

如果不需要 Confluent 平台的额外功能,也可以选择使用 Apache 官方镜像:

services:
  zookeeper:
    image: zookeeper:3.8
    ports:
      - "2181:2181"

  kafka:
    image: bitnami/kafka:3.4
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
    environment:
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      ALLOW_PLAINTEXT_LISTENER: "yes"

注意事项:

版本号完全不同(Apache Kafka 和 Zookeeper 有自己的版本体系)

配置方式有差异,需要参考各自文档

缺少 Confluent 提供的一些企业级功能

到此这篇关于Docker部署kafka的详细教程的文章就介绍到这了,更多相关Docker部署kafka内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文