docker compose kafka集群部署

news2024/11/24 17:05:24

kafka集群部署

目录

    • 部署zookeeper准备工作
    • 2、部署kafka准备工作
    • 3、编辑docker-compose.yml文件
    • 4、启动服务
    • 5、测试kafka
    • 6、web监控管理

部署zookeeper准备工作

mkdir data/zookeeper-{1,2,3}/{data,datalog,logs,conf} -p
cat >data/zookeeper-1/conf/zoo.cfg<<EOF
clientPort=2181
dataDir=/data
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
#和下面的docker-compose 创建的docker container实例对应
server.1=zookeeper-1:2888:3888
server.2=zookeeper-2:2888:3888
server.3=zookeeper-3:2888:3888
EOF


cat >data/zookeeper-1/conf/log4j.properties<<EOF
# Copyright 2012 The Apache Software Foundation
# 
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE

zookeeper.console.threshold=INFO

zookeeper.log.dir=/logs
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=INFO
zookeeper.log.maxfilesize=256MB
zookeeper.log.maxbackupindex=20

zookeeper.tracelog.dir=${zookeeper.log.dir}
zookeeper.tracelog.file=zookeeper_trace.log

log4j.rootLogger=${zookeeper.root.logger}

#
# console
# Add "console" to rootlogger above if you want to use this 
#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

#
# Add ROLLINGFILE to rootLogger to get log file output
#
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.ROLLINGFILE.MaxFileSize=${zookeeper.log.maxfilesize}
log4j.appender.ROLLINGFILE.MaxBackupIndex=${zookeeper.log.maxbackupindex}
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

#
# Add TRACEFILE to rootLogger to get log file output
#    Log TRACE level and above messages to a log file
#
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file}

log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
### Notice we are including log4j's NDC here (%x)
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n
#
# zk audit logging
#
zookeeper.auditlog.file=zookeeper_audit.log
zookeeper.auditlog.threshold=INFO
audit.logger=INFO, RFAAUDIT
log4j.logger.org.apache.zookeeper.audit.Log4jAuditLogger=${audit.logger}
log4j.additivity.org.apache.zookeeper.audit.Log4jAuditLogger=false
log4j.appender.RFAAUDIT=org.apache.log4j.RollingFileAppender
log4j.appender.RFAAUDIT.File=${zookeeper.log.dir}/${zookeeper.auditlog.file}
log4j.appender.RFAAUDIT.layout=org.apache.log4j.PatternLayout
log4j.appender.RFAAUDIT.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n
log4j.appender.RFAAUDIT.Threshold=${zookeeper.auditlog.threshold}

# Max log file size of 10MB
log4j.appender.RFAAUDIT.MaxFileSize=10MB
log4j.appender.RFAAUDIT.MaxBackupIndex=10

EOF

2、部署kafka准备工作

3、编辑docker-compose.yml文件

version: '3'
# 配置zk集群
# container services下的每一个子配置都对应一个zk节点的docker container

# 给zk集群配置一个网络,网络名为zookeeper-net
networks:
  zookeeper-net:
    name: zookeeper-net
    driver: bridge
    
services:
  zookeeper-1:
    image: zookeeper
    container_name: zookeeper-1
    restart: always
    # 配置docker container和宿主机的端口映射
    ports:
        - 2181:2181
        - 8081:8080
    # 将docker container上的路径挂载到宿主机上 实现宿主机和docker container的数据共享
    volumes:
        - "./data/zookeeper-1/data:/data"
        - "./data/zookeeper-1/datalog:/datalog"
        - "./data/zookeeper-1/logs:/logs"
        - "./data/zookeeper-1/conf:/conf"
    # 配置docker container的环境变量
    environment:
        # 当前zk实例的id
        ZOO_MY_ID: 1
        # 整个zk集群的机器、端口列表
        ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
    networks:
        - zookeeper-net


  zookeeper-2:
    image: zookeeper
    # 配置docker container和宿主机的端口映射
    container_name: zookeeper-2
    restart: always
    ports:
        - 2182:2181
        - 8082:8080
    # 将docker container上的路径挂载到宿主机上 实现宿主机和docker container的数据共享
    volumes:
        - "./data/zookeeper-2/data:/data"
        - "./data/zookeeper-2/datalog:/datalog"
        - "./data/zookeeper-2/logs:/logs"
        - "./data/zookeeper-2/conf:/conf"
    # 配置docker container的环境变量
    environment:
        # 当前zk实例的id
        ZOO_MY_ID: 2
        # 整个zk集群的机器、端口列表
        ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
    networks:
        - zookeeper-net


  zookeeper-3:
    image: zookeeper
    container_name: zookeeper-3
    restart: always
    # 配置docker container和宿主机的端口映射
    ports:
        - 2183:2181
        - 8083:8080
    # 将docker container上的路径挂载到宿主机上 实现宿主机和docker container的数据共享
    volumes:
        - "./data/zookeeper-3/data:/data"
        - "./data/zookeeper-3/datalog:/datalog"
        - "./data/zookeeper-3/logs:/logs"
        - "./data/zookeeper-3/conf:/conf"
    # 配置docker container的环境变量
    environment:
        # 当前zk实例的id
        ZOO_MY_ID: 3
        # 整个zk集群的机器、端口列表
        ZOO_SERVERS: server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888
    networks:
        - zookeeper-net

  k1:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k1
    user: root
    ports:
      - "9092:9092"
      - "9999:9999"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=0
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.10.111.33:9092
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3
      - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
      - JMX_PORT=9999
    volumes:
      - ./data/kafka1:/bitnami/kafka:rw
    networks:
        - zookeeper-net


  k2:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k2
    user: root
    ports:
      - "9093:9092"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=1
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.10.111.33:9093
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3
      - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
    volumes:
      - ./data/kafka2:/bitnami/kafka:rw
    networks:
        - zookeeper-net


  k3:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k3
    user: root
    ports:
      - "9094:9092"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=2
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.10.111.33:9094
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_NUM_PARTITIONS=3
      - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=3
      - KAFKA_HEAP_OPTS=-Xmx512M -Xms256M
    volumes:
      - ./data/kafka3:/bitnami/kafka:rw
    networks:
        - zookeeper-net

  kafka-manager:
    image: hlebalbau/kafka-manager
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    network_mode: zookeeper-net
    ports:
    - 9000:9000
    environment:
      ZK_HOSTS: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
      KAFKA_BROKERS: k1:9092,k2:9092,k3:9092
      APPLICATION_SECRET: letmein
      KAFKA_MANAGER_AUTH_ENABLED: "true" # 开启验证
      KAFKA_MANAGER_USERNAME: "admin" # 用户名
      KAFKA_MANAGER_PASSWORD: "admin" # 密码
      KM_ARGS: -Djava.net.preferIPv4Stack=true

kafka配置解释:

    environment:
      ### 通用配置
      # 允许使用kraft,即Kafka替代Zookeeper
      - KAFKA_ENABLE_KRAFT=yes
      # kafka角色,做broker,也要做controller
      - KAFKA_CFG_PROCESS_ROLES=broker,controller
      # 指定供外部使用的控制类请求信息
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      # 定义kafka服务端socket监听端口
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:,CONTROLLER://:9093
      # 定义安全协议
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      # 使用Kafka时的集群id,集群内的Kafka都要用这个id做初始化,生成一个UUID即可
      - KAFKA_KRAFT_CLUSTER_ID=LelMdIFQkiUFvXCEcqRWA
      # 集群地址
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=@kafka11:9093,2@kafka22:9093,3@kafka33:9093
      # 允许使用PLAINTEXT监听器,默认false,不建议在生产环境使用
      - ALLOW_PLAINTEXT_LISTENER=yes
      # 设置broker最大内存,和初始内存
      - KAFKA_HEAP_OPTS=-XmxM -Xms256M 
      # 不允许自动创建主题
      - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=false
​
      ### broker配置
      # 定义外网访问地址(宿主机ip地址和端口)
      - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://.168.1.54:9292
      # broker.id,必须唯一
      - KAFKA_BROKER_ID=

4、启动服务

docker compose up -d

5、测试kafka

#进入机器kafka容器内部,创建并查看是否存在刚创建的topic,如果存在则说明Kafka集群搭建成功。
docker exec -it k1 bash
#创建topic
kafka-topics.sh --create --bootstrap-server 10.10.111.33:9092 --replication-factor 1 --partitions 3 --topic ODSDataSync
#查看topic
kafka-topics.sh --bootstrap-server 10.10.111.33:9092 --describe --topic ODSDataSync
docker exec -it k2 bash

注意:

ports 端口映射要与“environment”的端口保持一致

6、web监控管理

浏览器访问http://192.168.1.36:9000,输入用户名密码即可进入监控页面。

按照下图操作增加对kafka集群的监控

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1660588.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在CentOS 7服务器及Windows 10客户端间建立并配置NFS服务

在CentOS 7服务器及Windows 10客户端间建立并配置NFS服务 引言 网络文件系统(Network File System)&#xff0c;简称NFS&#xff0c;是一种分布式文件系统协议。它允许网络上的客户端机器像访问本地磁盘文件一样&#xff0c;通过网络访问服务器上的文件。在某些特定的业务场景中…

【Linux】模拟实现bash(简易版)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

未来相遇过去:博物馆藏品管理平台的科技革新之旅

引言&#xff1a; 尊重历史&#xff0c;意味着保护其实体的载体。在博物馆这个时间的容器中&#xff0c;每一件藏品都承载着人类文明的印记&#xff0c;它们是历史的低语&#xff0c;是过去对现在的细语。在这篇文章中&#xff0c;我将带您走进博物馆的幕后&#xff0c;探究藏品…

wireshark-cli工具Tshark工具使用教程

介绍 本文档基于wireshark-2.6.10/编写 tshark为wireshark工具的命令行版本呢&#xff0c; 在服务器版本服务器上&#xff0c;通过tshark工具可以实现和wireshark相同的功能。工具使用wireshark默认配置&#xff0c;对于wireshark一些常用的首选项&#xff0c;也可通过tshark…

文献速递:深度学习医学影像心脏疾病检测与诊断--基于迁移学习的生成对抗网络用于静态和动态心脏PET的衰减校正

Title 题目 Transfer learning‑based attenuation correction for static and dynamic cardiac PET using a generative adversarial network 基于迁移学习的生成对抗网络用于静态和动态心脏PET的衰减校正 01 文献速递介绍 心脏正电子发射断层扫描&#xff08;PET&#xf…

【ArcGIS Pro微课1000例】0059:计算地级城市之间的距离

一、加载数据并符号化 1. 加载实验数据 数据加载完毕。 2. 符号化设置 点击面状数据符号,在右侧的符号系统中选择黑色轮廓。 点击点状符号,选择以个样式。 3. 标注名称 选择地级市图层,打开标注选项卡,设置标注字段为name,设置字体属性,如下所示:

Screeps工程化之数量控制模块

前言 将Screeps的代码进行模块化后&#xff0c;可以将各个功能进行分离&#xff0c;互相不影响&#xff0c;本文将会介绍Screeps中如何进行creep的数量控制来维持房间资源的平衡和发展。本文仅为作者本人的游戏思路&#xff0c;并不是最佳实践&#xff0c;如有更好的实现方法可…

*args和**kwargs的使用

*args传入的是按照顺序的不定长度的参数列表 **kwargs传入的是不定长度的键值对

effective python学习笔记_类与接口

用组合类实现多层结构而不用内置类型 例子&#xff1a;成绩单&#xff0c;存储学生各科成绩多个然后加权重&#xff0c;如果用字典类型会导致字典有多层嵌套结构 思想 当用内置类型如字典元组等结构出现超过二层的多层嵌套结构时&#xff0c;读起来会比较难懂&#xff0c;此时…

顺序表经典算法OJ题-- 力扣27,88

题1&#xff1a; 移除元素 题2&#xff1a; 合并两个有序数组 一&#xff1a;题目链接&#xff1a;. - 力扣&#xff08;LetCode&#xff09; 思路&#xff1a;&#xff08;双指针法&#xff09; 创建两个变量src&#xff0c;dst 1&#xff09;若src指向的值为val&#xf…

《第一行代码》第二版学习笔记(11)——最佳的UI体验

文章目录 一、Toolbar二、滑动菜单1、DrawerLayout——抽屉2、NavigationView 三、悬浮按钮和可交互提示1、FloatingActionButton——悬浮按钮2、Snackbar——提示工具3、CoordinatorLayout 四、卡片式布局1、cardView2、AppBarLayout 五、下拉刷新——SwipeRefreshLayout六、可…

EDA(六)Modelsim

EDA&#xff08;六&#xff09;Modelsim ModelSim是一款由Mentor Graphics公司&#xff08;现为Siemens EDA的一部分&#xff09;开发的高性能、交互式和可扩展的HDL&#xff08;硬件描述语言&#xff09;仿真工具。它支持Verilog、SystemVerilog和VHDL等语言&#xff0c;被广泛…

如何在家轻松赚钱,分享五个在家赚钱的好点子

在家轻松赚钱可以考虑以下几种方式 1. 网络任务 网上可以做下百度的致米宝库&#xff0c;一个月有个一千多块钱&#xff0c;我感觉还行&#xff0c;比较适合新手小白的&#xff0c;自由操作即可。 2. 写作和翻译 如果你擅长写作或翻译&#xff0c;可以在各种写作平台或翻译平…

用户体验优化uxo指的是什么?

用户体验优化(User Experience Optimization&#xff0c;简称UXO)是一种专注于改善和提升用户在使用企业产品或服务时的整体感受和体验的过程。简单来说&#xff0c;它旨在通过改进产品或服务的设计和功能&#xff0c;使用户在使用过程中感到更加愉悦、满意和高效。用户体验优化…

java注解全网最细

引言 在java编程中&#xff0c;注解&#xff08;Annotation&#xff09;是一种元数据&#xff0c;它提供了关于程序代码的额外信息。注解不直接影响程序的执行&#xff0c;但可以在运行时提供有关程序的信息&#xff0c;或者让编译器执行额外的检查。 下面笔者通过循序渐进的…

马斯克首例脑机人体试验出现重大故障,真正的人脑智能梦想要破灭了? | 最新快讯

“科技狂人”马斯克&#xff08;Elon Musk&#xff09;在侵入式脑机接口技术的前沿探索中遭遇了重大挫折。 北京时间 5 月 9 日&#xff0c;马斯克成立的脑机接口公司 Neuralink 其官网上发布报告称&#xff0c;首位植入脑机接口设备的受试者体内一些电极出现问题&#xff0c;大…

docker 容器无法直接读取宿主机文件

最近一个需求, 要在后端直接使用代码直接生成 pdf 文档, 由于使用的 apache 的工具包, 该工具包无法直接解析中文字体, 需要导入外部 中文插件包, 相关代码如下: PDPage page new PDPage(PDRectangle.A4);document.addPage(page);PDFont fontFile PDType0Font.load(document…

Smma-net:一种基于音频线索的目标说话人提取网络,具有谱图匹配和相互关注功能

SMMA-NET: AN AUDIO CLUE-BASED TARGET SPEAKER EXTRACTION NETWORK WITH SPECTROGRAM MATCHING AND MUTUAL ATTENTION 第二章 目标说话人提取之《Smma-net:一种基于音频线索的目标说话人提取网络&#xff0c;具有谱图匹配和相互关注功能》 文章目录 SMMA-NET: AN AUDIO CLUE-…

越秀城投·星汇城 | 看得再多,都不如实景现房更安心

对于大多数家庭而言&#xff0c;买房是人生大事。经历了前几年房企暴雷、楼盘停工烂尾的风波&#xff0c;“现房”成为买房人心中最安心的代名词。无需再等待&#xff0c;所见即所得。 越秀城投星汇城位于平度南部新城核芯片区&#xff0c;不仅享受区域发展的利好&#xff0c;…

金融服务业94%都是被这4种方式攻击,如何避免被攻击影响

根据安全数字化体验智能边缘平台最新发布的《2019年互联网安全状况报告&#xff1a;针对金融服务业的攻击经济》数据显示&#xff0c;在所有受网络钓鱼域影响的企业中&#xff0c;有50%来自金融服务行业。 数据显示&#xff0c;除了独特的网络钓鱼尝试之外&#xff0c;攻击者还…