小哥之哥 小哥之哥
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小哥之哥

运维扫地僧
首页
    • Prometheus
    • Kubertenes
    • Docker
    • MySQL
  • Go
  • Python
  • Vue
  • Jenkins
  • ELK
  • LDAP
  • 随笔
  • 最佳实践
  • 博客搭建
  • 问题杂谈
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Kubertenes

  • Prometheus

  • Docker

    • Docker实战

      • Docker 部署Confluence15.2
      • Docker 部署Jira8.1.0
      • Docker 部署Gitlab11.10.4
      • Docker 部署ELK6.6
      • Docker 部署ELK之Sentinl日志报警
      • Docker 部署MySQL5.7.20
      • Apollo分布式Docker部署
      • Docker部署Gitlab 16.2.0
      • Docker部署zookeeper3.6集群
      • Docker部署kafka3.4集群
        • Docker 部署Redis6.2.6
        • Docker构建多架构镜像
      • Docker杂谈

    • 数据库

    • 运维利器

    • 运维
    • Docker
    • Docker实战
    tchua
    2023-08-03
    目录

    Docker部署kafka3.4集群

    # 一、Kafka介绍


    Kafka是由Apache软件基金会开发的一个开源的分布式流数据平台。它主要用于构建高性能、实时的数据流处理应用程序和数据管道。Kafka的设计目标是为了处理大规模的实时数据流,并能够处理高容量的数据流,使得应用程序能够实时地获取、处理和分析数据。

    Kafka的核心概念是消息系统,它基于发布-订阅模式,将数据以消息的形式进行发布和订阅。Kafka集群由多个服务器组成,其中包含若干个称为"broker"的节点。每个broker都是一个独立的Kafka服务器,它们共同构成了一个高可用的、容错的Kafka集群。

    # 二、Kafak组件


    • Topic:数据以主题(topic)的形式进行组织和分类。一个Topic可以被多个生产者(Producer)发送消息到,也可以被多个消费者(Consumer)订阅并接收消息。

    • Producer:生产者是数据的发布者,负责向指定的Topic发送消息。

    • Consumer:消费者是数据的订阅者,负责从指定的Topic消费消息。

    • Broker:Kafka集群中的每个服务器节点都是一个broker,负责存储消息,处理消息的发送和接收。

    • Zookeeper注意:Kafka依赖Zookeeper来进行协调和管理,例如管理broker的状态、管理topic和partition等元数据。

    • Partition:Topic可以分为若干个Partition,每个Partition是数据的分片,用于提高并发和水平扩展能力。

    注意: 在kafka2.8版本开始尝试从服务架构中去掉zookeeper,到了3.0版本这个工作基本上完成,这是kafka的一个非常重要的里程碑。

    # 三、集群部署


    # 3.1 机器规划
    主机 IP 端口 角色
    kafka-zk-01 172.16.10.79 9092,9093 broker,controller
    kafka-zk-01 172.16.10.80 9092,9093 broker,controller
    kafka-zk-01 172.16.10.81 9092,9093 broker,controller
    # 3.2 镜像下载
    docker pull bitnami/kafka:3.4
    
    1

    更多版本访问bitnami/kafka (opens new window)

    # 3.3 创建映射目录
    • 创建kafka用户

    镜像种kafka运行使用的是非根容器,我们后面如果想要把数据映射出来,则需要授权用户uid为1001的用户

    useradd -u 1001 kafka
    
    1
    • 目录创建授权
    mkdir /opt/kafka/data -p
    chown -R 1001  /opt/kafka
    
    1
    2
    # 3.4 集群启动
    • 节点1: kafka-1
    docker run -d --name kafka-1 \
      -e KAFKA_CFG_NODE_ID=1 \
      -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
      -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.10.79:9092 \
      -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
      -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
      -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.16.10.79:9093,2@172.16.10.80:9093,3@172.16.10.81:9093 \
      -e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
      -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
      -v /opt/kafka/data:/bitnami \
      -p 9092:9092 \
      -p 9093:9093 \
      bitnami/kafka:3.4
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    • 节点2: kafka-2
    docker run -d --name kafka-2 \
      -e KAFKA_CFG_NODE_ID=2 \
      -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
      -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.10.80:9092 \
      -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
      -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
      -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.16.10.79:9093,2@172.16.10.80:9093,3@172.16.10.81:9093 \
      -e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
      -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
      -v /opt/kafka/data:/bitnami \
      -p 9092:9092 \
      -p 9093:9093 \
      bitnami/kafka:3.4
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    • 节点3: kafka-3
    docker run -d --name kafka-3 \
      -e KAFKA_CFG_NODE_ID=3 \
      -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
      -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://172.16.10.81:9092 \
      -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
      -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
      -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@172.16.10.79:9093,2@172.16.10.80:9093,3@172.16.10.81:9093 \
      -e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
      -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
      -v /opt/kafka/data:/bitnami \
      -p 9092:9092 \
      -p 9093:9093 \
      bitnami/kafka:3.4
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    参数解释

    • KAFKA_CFG_NODE_ID: 指定Kafka Broker节点的ID,同一个集群中该值必须唯一,类似kafka2中的broker.id
    • KAFKA_CFG_PROCESS_ROLES: 设置Kafka Broker的角色,这里配置为同时充当Broker(kafka实例)和Controller(类似于zk),也可以只配置一个角色,需要注意是controller的数量必须为奇数个,与zk原理一致。
    • KAFKA_CFG_ADVERTISED_LISTENERS:指定向客户端广播的网络地址。客户端将使用该地址与Broker进行通信。
    • KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 列出Kafka Controller的投票者配置。它定义了一组Controller节点,其中包括它们各自的ID和网络地址。
    • KAFKA_KRAFT_CLUSTER_ID: 集群UUID,这个值每个节点都需要一样。
    • KAFKA_CFG_CONTROLLER_LISTENER_NAMES:定义Kafka Controller用于通信的监听器名称,此处设置为CONTROLLER。
    • /opt/kafka/data:/bitnami: 映射数据目录,容器中默认数据目录为/bitnami。
    # 3.5 测试集群
    • 创建topic
    # 进入容器
    [root@kafka-zk-01 kafka]# docker exec -it kafka-1 /bin/bash
    # 创建topic
    I have no name!@5d91ecee69fa:/$ /opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic mytopic --partitions 3 --replication-factor 3
    Created topic "mytopic".
    # 查看主体分布
    I have no name!@5d91ecee69fa:/$ /opt/bitnami/kafka/bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic mytopic
    Topic: mytopic	TopicId: xV35efUFSz6Hn_r6ev7wBA	PartitionCount: 3	ReplicationFactor: 3	Configs: 
    	Topic: mytopic	Partition: 0	Leader: 2	Replicas: 2,3,1	Isr: 2
    	Topic: mytopic	Partition: 1	Leader: 3	Replicas: 3,1,2	Isr: 3
    	Topic: mytopic	Partition: 2	Leader: 1	Replicas: 1,2,3	Isr: 1
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    编辑 (opens new window)
    #Docker
    上次更新: 2023/08/03, 16:58:56
    Docker部署zookeeper3.6集群
    Docker 部署Redis6.2.6

    ← Docker部署zookeeper3.6集群 Docker 部署Redis6.2.6→

    最近更新
    01
    cert-manager自动签发Lets Encrypt
    09-05
    02
    Docker构建多架构镜像
    08-02
    03
    Prometheus数据迁移至VMstorage
    08-01
    更多文章>
    Theme by Vdoing | Copyright © 2023-2024 |豫ICP备2021026650号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式