在 Debian Docker 中安装 Kafka + Zookeeper

目录

1. 创建目录结构

2. 创建 Docker Compose 配置 

3. 启动服务

4. 简化命令(可选)

4.1 方式一:创建永久别名

4.2 方式二:创建 shell 脚本

5. 性能优化配置(可选)

5.1 更新配置文件

5.2 重启服务应用新配置 

6. 创建测试主题

7. 安装常用工具(可选)

7.1 方式一:临时进入容器修改(适用于已运行的容器)

验证与注意事项

7.2 方式二:通过Dockerfile构建镜像时配置 


1. 创建目录结构

        目录结构如下:

# 个人开发环境 目录
~/dev/
  └── docker/ # docker-compose.yml 相关配置
 
 
# 挂载目录
/data
  ├── zookeeper/
  │    ├── data/ # /var/lib/zookeeper/data 的挂载目录
  │    ├── conf/ # /etc/zookeeper/conf 的挂载目录
  │    └── datalog/ # 数据日志
  ├── kafka/
  │    ├── data/ # /var/lib/kafka/data 的挂载目录
  │    └── conf/ # /etc/kafka 的挂载目录
  └── kafka-ui/
       ├── conf/ # /kafka-ui/conf 的挂载目录
       └── logs/ # /kafka-ui/logs 的挂载目录

        命令如下:

# 以app用户登录执行
mkdir -p ~/dev/docker

# 以root用户登录执行
sudo mkdir -p /data/zookeeper/{data,conf,datalog} /data/kafka/{data,conf} /data/kafka-ui/{conf,logs}
sudo chown -R 1000:1000 /data/zookeeper /data/kafka /data/kafka-ui
# 权限 700 表示:所有者(app):可读、可写、可执行;用户组和其他人:无权限
sudo chmod -R 700 /data/zookeeper /data/kafka /data/kafka-ui

# 创建配置文件
cat > /data/zookeeper/conf/zoo.cfg << EOF
# 基础配置
dataDir=/var/lib/zookeeper/data
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=5
maxClientCnxns=100
# 自动清理快照和事务日志
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
# 如果是集群模式,添加以下配置
# server.1=zk1:2888:3888
# server.2=zk2:2888:3888
# server.3=zk3:2888:3888
EOF

# 创建配置文件
cat > /data/kafka/conf/server.properties << EOF
# 消息大小相关配置
message.max.bytes=268435456
replica.fetch.max.bytes=268435456
max.request.size=268435456

# 网络相关配置
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=268435456
EOF

        注意:Confluent的Zookeeper镜像(confluentinc/cp-zookeeper)是预先配置为使用名为appuser的非root用户(UID 1000),在许多Linux发行版中,第一个创建的常规用户通常被分配UID 1000,这种数值上的巧合并不意味着它们是"同一个用户" 

        效果图如下,图中“app:app”后续已用“1000:1000”替换执行:

2. 创建 Docker Compose 配置 

        在目录 /dev/docker 下创建自定义名称文件 kafka-docker-compose.yml,内容如下: 

version: '3'

networks:
  kafka_net:
    driver: bridge

services:
  zookeeper:
    image: zookeeper:3.8.1
    container_name: zookeeper
    networks:
      - kafka_net
    ports:
      - "2181:2181"
    environment:
      TZ: "Asia/Shanghai"
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT_ADDRESS: 0.0.0.0  # 可选,确保监听所有接口
      ZOOKEEPER_MAX_CLIENT_CNXNS: 100
      ZOOKEEPER_SYNC_LIMIT: 5  # 同步超时 10 秒(5 * 2000ms)
      ZOO_DATA_DIR: /data
      ZOO_DATA_LOG_DIR: /datalog
    ulimits:
      nofile: 65535
    deploy:
      resources:
        limits:
          memory: 4G
    volumes:
      - /data/zookeeper/data:/var/lib/zookeeper/data # 目录挂载到 /data/zookeeper/data
      - /data/zookeeper/conf:/etc/zookeeper/conf # 目录挂载到 /data/zookeeper/conf
      - /data/zookeeper/conf/zoo.cfg:/conf/zoo.cfg  # 替换原有配置挂载
      - /data/zookeeper/data:/data
      - /data/zookeeper/datalog:/datalog
    restart: unless-stopped
    
  kafka:
    image: bitnami/kafka:3.7.0
    container_name: kafka
    networks:
      - kafka_net
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
      - "9093:9093"
      - "29092:29092"
    environment:
      TZ: "Asia/Shanghai"
      KAFKA_BROKER_ID: 1
      KAFKA_LISTENERS: INTERNAL://0.0.0.0:29092,EXTERNAL://0.0.0.0:9092,EXTERN
### 使用和配置 Docker 中的 Kafka 3.6.1 为了在 Docker 容器中使用或配置 Apache Kafka 版本 3.6.1,可以遵循如下方法: #### 准备工作环境 确保已经安装并设置好 DockerDocker Compose 的运行环境。如果遇到无法拉取镜像的情况,可能是因为网络连接问题[^2]。 #### 获取官方 Kafka 镜像 由于官方仓库中的标签可能会更新到更高版本,因此建议通过指定确切版本号来获取特定版本的 Kafka 镜像。对于 Kafka 3.6.1 可以执行命令: ```bash docker pull bitnami/kafka:3.6.1-debian-10-r94 ``` 此操作会下载由 Bitnami 提供维护和支持的基于 Debian 10Kafka 3.6.1 发行版。 #### 启动单节点 Kafka 实例 创建一个新的目录用于保存自定义配置文件和其他资源,并在此处编写 `docker-compose.yml` 文件启动服务实例: ```yaml version: '2' services: kafka: image: 'bitnami/kafka:3.6.1-debian-10-r94' ports: - '9092:9092' environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ALLOW_PLAINTEXT_LISTENER: "yes" KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 depends_on: - zookeeper zookeeper: image: 'bitnami/zookeeper:latest' ports: - '2181:2181' environment: ZOOKEEPER_CLIENT_PORT: 2181 ``` 上述 YAML 文件描述了一个简单的 Kafka 设置,其中包含 ZooKeeperKafka broker 两个组件。请注意这里指定了 Kafka 广告监听地址以便客户端能够正确访问它。 #### 运行容器化应用 进入放置有 `docker-compose.yml` 文件所在的路径下,输入以下指令启动应用程序: ```bash docker-compose up -d ``` 这将会以后台模式启动所有必要的服务。等待几秒钟让各个进程初始化完成之后就可以开始测试消息传递功能了。 #### 创建主题与生产消费数据 一旦集群成功部署完毕,则可以通过 CLI 工具来进行进一步的操作比如创建新的话题或是发送接收信息等。例如要建立名为 test-it <kafka_container_name> kafka-topics.sh \ --create \ --bootstrap-server localhost:9092 \ --replication-factor 1 \ --partitions 1 \ --topic test-topic ``` 同样地也可以利用类似的脚本来删除不再需要的主题[^3]: ```bash docker exec -it <kafka_container_name> kafka-topics.sh \ --zookeeper localhost:2181 \ --topic test-topic ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值