【中间件】docker+kafka单节点部署---zookeeper模式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

最近生产环境上准备部署ELFK日志监控,先在测试环境部署单节点kafka验证调通相关配置,特此记录kafka部署流程,后续再补充kafka高可用方案;

消息中间件介绍

Apache Kafka是一个发布 - 订阅开源消息代理应用程序。这个消息传递应用程序是用"scala"编码的。基本上,这个项目是由Apache软件启动的。Kafka的设计模式主要基于事务日志设计。

1. KRaft模式

后续补充

KRaft 模式相比 ZooKeeper 模式的主要优势如下:

  • 运维简化:只需部署 Kafka,不再依赖 ZooKeeper。

  • 横向扩展能力提升:Kafka 集群能支持的 Partition 数量是衡量其横向扩展能力的重要指标。此前这个值受 ZooKeeper 与 Controller 之间传递元数据的限制,只能到十万量级,而 KRaft 模式不需要这种传递, 因此可以提升到百万量级。

  • 元数据传播提效:元数据通过 Kafka 的 Topic 管理,并利用 Topic 的生产消费传播,集成性更好的同时也提升了一些底层实现的性能。

2. zookeeper模式

本文采用模式

经典模式

2.1. 单节点部署

安装
  1. docker-compose.yml

    shell 复制代码
    cat docker-compose.yml
    ------------------------------- docker-compode.yml ----------------------------------------
    version: '3'
    services:
      kfk:
        container_name: kfk
        image: bitnami/kafka:3.9.0
        environment:
          - ALLOW_PLAINTEXT_LISTENER=yes
          - KAFKA_CFG_ZOOKEEPER_CONNECT=zk-server:2181
        ports:
          - "19092:9092"
          - "19093:9093"
        volumes:
          - ./config/server.properties:/opt/bitnami/kafka/config/server.properties
        networks:
          - zk-kfk
        restart: unless-stopped
    
      zk-server:
        container_name: zk-server
        image: zookeeper:3.8.4
        environment:
          - ALLOW_ANONYMOUS_LOGIN=yes
        restart: always
        networks:
          - zk-kfk
    
    networks:
      zk-kfk:
        driver: bridge
    ------------------------------- docker-compode.yml END ----------------------------------------
  2. server.properties

    shell 复制代码
    vim server.properties
    ------------------------------- server.properties ----------------------------------------
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    log.dirs=/bitnami/kafka/data
    num.partitions=1
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    
    # kafka日志保留时间168小时
    log.retention.hours=168
    # kafka清理日志间隔,30000ms(5分钟)检查一次日志文件,清理超过时间的日志
    log.retention.check.interval.ms=300000
    
    # zookeeper连接配置
    zookeeper.connect=zk-server:2181
    
    sasl.enabled.mechanisms=PLAIN,SCRAM-SHA-256,SCRAM-SHA-512
    ------------------------------- server.properties END ----------------------------------------
验证
  1. docker ps

  2. 测试功能

    shell 复制代码
    # 创建名称为demo的topic,副本1 分区1
    docker run -it --rm --network kfk_zk-kfk -e KAFKA_CFG_ZOOKEEPER_CONNECT=zk-server:2181 bitnami/kafka:3.9.0 kafka-topics.sh --bootstrap-server kfk:9092 --create --partitions 1 --replication-factor 1 --topic demo
    
    
    # 查看所有topic信息
    docker run -it --rm --network kfk_zk-kfk -e KAFKA_CFG_ZOOKEEPER_CONNECT=zk-server:2181 bitnami/kafka:3.9.0 kafka-topics.sh --bootstrap-server kfk:9092 --list
    
    # 执行命令
    root@yuan-server:~# docker run -it --rm --network kfk_zk-kfk -e KAFKA_CFG_ZOOKEEPER_CONNECT=zk-server:2181 bitnami/kafka:3.9.0 kafka-topics.sh --bootstrap-server kfk:9092 --list
    
    
    # 生产消息
    # bin/kafka-console-producer.sh --bootstrap-server kafka-server:9092 --topic demo
    
    docker run -it --rm --network kfk_zk-kfk -e KAFKA_CFG_ZOOKEEPER_CONNECT=zk-server:2181 bitnami/kafka:3.9.0 kafka-console-producer.sh --bootstrap-server kfk:9092 --topic demo
    
    
    # 消费者
    # 1.消费最新消息,打开后监听并消费生产者最新生产的消息
    # bin/kafka-console-consumer.sh --bootstrap-server kafka-server:9092 --topic demo
    docker run -it --rm --network kfk_zk-kfk -e KAFKA_CFG_ZOOKEEPER_CONNECT=zk-server:2181 bitnami/kafka:3.9.0 kafka-console-consumer.sh --bootstrap-server kfk:9092 --topic demo
    
    
    # 2.设置--from-beginning参数:表示从头开始消费消息,表示所有历史消息都能看到
    docker run -it --rm --network zk-kafka -e KAFKA_CFG_ZOOKEEPER_CONNECT=zk-server:2181 bitnami/kafka:3.4.0 kafka-console-consumer.sh --bootstrap-server kafka-server:9092 --topic demo --from-beginning
相关推荐
debug 小菜鸟23 分钟前
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
docker·云计算·aws
SpikeKing1 小时前
Server - 使用 Docker 配置 PyTorch 研发环境
pytorch·docker·llm
斯普信云原生组2 小时前
Docker构建自定义的镜像
java·spring cloud·docker
小柏ぁ3 小时前
calico/node is not ready: BIRD is not ready: BGP not established with xxx
运维·docker·kubernetes
正在努力Coding5 小时前
kafka(windows)
分布式·kafka
Python智慧行囊6 小时前
Python 中 Django 中间件:原理、方法与实战应用
python·中间件·架构·django·开发
nuczzz6 小时前
GPU虚拟化
docker·kubernetes·k8s·gpu·nvidia
fengyehongWorld7 小时前
Linux Docker的简介
linux·docker
Johny_Zhao7 小时前
2025年6月Docker镜像加速失效终极解决方案
linux·网络·网络安全·docker·信息安全·kubernetes·云计算·containerd·yum源·系统运维
藥瓿亭9 小时前
K8S认证|CKS题库+答案| 7. Dockerfile 检测
运维·ubuntu·docker·云原生·容器·kubernetes·cks