当前位置: 首页 > ds >正文

【 Docker系列】 Docker部署kafka

csdn

博客目录

    • 一、问题背景:为什么无法拉取 zookeeper:7.4.0 镜像?
    • 二、正确的镜像拉取方法
      • 2.1 拉取 Confluent 官方镜像
      • 2.2 验证镜像可用性
    • 三、完整的 docker-compose 配置
      • 3.1 关键配置解析
      • 3.2 平台兼容性考虑
    • 四、常见问题解决方案
      • 4.1 镜像拉取失败
      • 4.2 容器启动后立即退出
      • 4.3 性能优化建议
    • 五、替代方案:使用 Apache 官方镜像

在现代分布式系统架构中,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

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

  1. 镜像名称前缀:必须使用confluentinc/cp-作为前缀,cp代表"Confluent Platform"
  2. 版本一致性:确保 Zookeeper 和 Kafka 使用相同的版本号(如都使用 7.4.0),以避免兼容性问题
  3. 平台指定--platform linux/amd64参数确保拉取的是 x86 架构的镜像,这在 ARM 设备(如 M1/M2 Mac)上尤为重要

2.2 验证镜像可用性

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

docker manifest inspect confluentinc/cp-zookeeper:7.4.0

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

  • 版本号输入错误(Confluent 采用语义化版本控制,如 7.4.0)
  • 网络问题导致无法访问 Docker Hub
  • 该版本可能已被弃用(可查看 Confluent 官方文档确认)

三、完整的 docker-compose 配置

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

version: "3"services:zookeeper:image: confluentinc/cp-zookeeper:7.4.0platform: linux/amd64 # 明确指定平台hostname: zookeepercontainer_name: zookeeperports:- "2181:2181"environment:ZOOKEEPER_CLIENT_PORT: 2181ZOOKEEPER_TICK_TIME: 2000# 生产环境建议增加以下配置ZOOKEEPER_SERVER_ID: 1ZOOKEEPER_SERVERS: "zookeeper:2888:3888"kafka:image: confluentinc/cp-kafka:7.4.0platform: linux/amd64hostname: kafkacontainer_name: kafkadepends_on:- zookeeperports:- "9092:9092"- "29092:29092" # 用于容器间通信environment:KAFKA_BROKER_ID: 1KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXTKAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://kafka:29092KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT_INTERNALKAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1# 内存配置(根据实际情况调整)KAFKA_HEAP_OPTS: "-Xmx1G -Xms1G"

3.1 关键配置解析

  1. 网络配置

    • KAFKA_ADVERTISED_LISTENERS:定义了 Kafka 对外暴露的访问地址
      • PLAINTEXT://localhost:9092:供宿主机访问
      • PLAINTEXT_INTERNAL://kafka:29092:供 Docker 网络内其他容器访问
    • 这种双监听器配置确保了无论从容器外部还是内部都能正确连接
  2. Zookeeper 配置

    • ZOOKEEPER_CLIENT_PORT:客户端连接端口
    • ZOOKEEPER_TICK_TIME:Zookeeper 使用的基本时间单位(毫秒)
    • 对于生产环境,建议配置集群模式而非单机模式
  3. Kafka 配置

    • KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR:设置__consumer_offsets 主题的副本数,单节点设为 1
    • KAFKA_TRANSACTION_STATE_LOG_*:事务相关配置,对于开发环境可以简化

3.2 平台兼容性考虑

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

  1. 大多数 Confluent 官方镜像仅构建了 x86 版本
  2. 虽然 Docker 可以在 ARM 设备上模拟 x86 环境,但性能会有所下降
  3. 明确指定平台可以避免自动选择不兼容的镜像变体

四、常见问题解决方案

4.1 镜像拉取失败

问题现象

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

解决方案

  1. 检查版本号是否正确(访问Docker Hub确认)
  2. 尝试不使用特定版本,改用最新稳定版:
    docker pull confluentinc/cp-zookeeper:latest
    
  3. 检查网络连接,特别是企业环境可能需要配置代理

4.2 容器启动后立即退出

可能原因

  1. 平台架构不匹配
  2. 内存不足(Zookeeper 和 Kafka 默认需要较多内存)
  3. 端口冲突(特别是 2181 和 9092)

解决方案

  1. 确保 docker-compose 中指定了正确的平台:
    platform: linux/amd64
    
  2. 增加内存限制:
    environment:KAFKA_HEAP_OPTS: "-Xmx1G -Xms1G"
    
  3. 检查并关闭占用端口的其他服务

4.3 性能优化建议

对于开发测试环境:

  • 可以适当降低内存配置
  • 关闭不必要的日志和监控功能

对于生产环境:

  • 必须使用集群模式而非单机模式
  • 配置持久化存储卷
  • 设置合理的资源限制和监控

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

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

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

注意事项

  1. 版本号完全不同(Apache Kafka 和 Zookeeper 有自己的版本体系)
  2. 配置方式有差异,需要参考各自文档
  3. 缺少 Confluent 提供的一些企业级功能

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

http://www.xdnf.cn/news/9619.html

相关文章:

  • 办公效率王Word批量转PDF 50 +文档一键转换保留原格式零错乱
  • GC1267F单相全波风扇电机预驱动器芯片详解
  • 精益数据分析(93/126):增长率的真相——从数据基准到科学增长策略
  • Linux 中常见的安全与权限机制
  • Vim常用快捷键
  • element-plus主题换色
  • React-native的新架构
  • unity一个箭矢的轨迹
  • 湖北理元理律师事务所:债务优化中的“生活锚点”设计
  • AI 让无人机跟踪更精准——从视觉感知到智能预测
  • HTML实战:响应式个人资料页面
  • 每日Prompt:心中的佛
  • 操作系统学习(一)——操作系统基础
  • 数据库管理与高可用-MySQL数据库操作
  • Prometheus学习之pushgateway和altermanager组件
  • Linux的SHELL脚本基础
  • docker-记录一次容器日志<container_id>-json.log超大问题的处理
  • opencv + jpeg_turbo(启用SIMD加速)
  • Flutter3.22适配运行鸿蒙系统问题记录
  • 算力卡上部署OCR文本识别服务与测试
  • w~视觉~合集6
  • 【组件】跳动的图标 动画
  • 实验设计与分析(第6版,Montgomery)第4章随机化区组,拉丁方, 及有关设计4.5节思考题4.1~4.4 R语言解题
  • GRIT:让AI“指着图说话“的新思路
  • get_rga_thread线程和low_camera_venc_thread线程获取低分辨率VENC码流数据
  • ORB-SLAM2学习笔记:ComputeKeyPointsOctTree分析过程记录
  • 【C语言】详解 指针
  • 使用 PySpark 从 Kafka 读取数据流并处理为表
  • 【25软考网工】第九章 网络管理(1)网络管理基础、SNMP
  • 端到端测试最佳实践:从入门到精通的完整指南