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

保姆级教程Docker部署Kafka官方镜像

目录

一、安装Docker及可视化工具

二、单节点部署

1、创建挂载目录

2、运行Kafka容器

3、Compose运行Kafka容器

4、查看Kafka运行状态

三、集群部署


在Kafka2.8版本之前,Kafka是强依赖于Zookeeper中间件的,这本身就很不合理,中间件依赖另一个中间件,搭建起来实在麻烦,所幸Kafka2.8之后推出了KRaft模式,即抛弃Zookeeper由Kafka节点自己做Controller来选举Leader,本篇文章内容就是介绍如何在Docke中搭建Kafka KRaft环境。

一、安装Docker及可视化工具

Docker及可视化工具的安装可参考:Ubuntu上安装 Docker及可视化管理工具

二、单节点部署

在进行单节点部署并以KRaft模式运行时,该节点通常是混合节点的类型

1、创建挂载目录

# 创建宿主机kafka挂载目录
sudo mkdir -p /data/docker/kafka/data# 修改data目录权限
sudo chmod 777 /data/docker/kafka/data

2、运行Kafka容器

# 拉取镜像
sudo docker pull apache/kafka:3.9.0# 运行容器
sudo docker run --privileged=true \
--net=bridge \
-d --name=kafka \
-v /data/docker/kafka/data:/var/lib/kafka/data \
-v /data/docker/kafka/config:/mnt/shared/config \
-v /data/docker/kafka/secrets:/etc/kafka/secrets \
-p 9092:9092 -p 9093:9093 \
-e KAFKA_NODE_ID=1 \
-e KAFKA_PROCESS_ROLES=broker,controller \
-e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT \
-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \
-e KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
-e KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \
apache/kafka:3.9.0

参数解析如下:

参数参数说明
docker run运行 Docker 容器
-d容器将在后台运行,而不是占用当前的终端会话
--privileged=trueDocker会赋予容器几乎与宿主机相同的权限
--net=bridge网络模式配置,默认是bridge,bridge表示使用容器内部配置网络
--name broker给容器命名为 broker,以便于管理和引用该容器
-p 9092:9092 -p 9093:9093映射 kafka 的客户端通信端口和控制器端口
-e KAFKA_NODE_ID=1节点ID,用于标识每个集群中的节点,需要是不小于1的整数,同一个集群中的节点ID不可重复
-e KAFKA_PROCESS_ROLES=broker,controller节点类型,broker,controller表示该节点是混合节点,通常单机部署时需要配置为混合节点

-e KAFKA_INTER_BROKER_LISTENER_NAME=

PLAINTEXT

Kafka的Broker地址前缀名称,固定为PLAINTEXT即可

-e KAFKA_CONTROLLER_LISTENER_NAMES=

CONTROLLER

Kafka的Controller地址前缀名称,固定为CONTROLLER即可

-e KAFKA_LISTENERS=

PLAINTEXT://:9092,CONTROLLER://:9093

表示Kafka要监听哪些端口,PLAINTEXT://:9092,CONTROLLER://:9093表示本节点作为混合节点,监听本机所有可用网卡的9092和9093端口,其中9092作为客户端通信端口,9093作为控制器端口

-e KAFKA_ADVERTISED_LISTENERS=

PLAINTEXT://localhost:9092

配置Kafka的外网地址,需要是PLAINTEXT://外网地址:端口的形式,当客户端连接Kafka服务端时,Kafka会将这个外网地址广播给客户端,然后客户端再通过这个外网地址连接,除此之外集群之间交换数据时也是通过这个配置项得到集群中每个节点的地址的,这样集群中节点才能进行交互

-e KAFKA_CONTROLLER_QUORUM_VOTERS=

1@localhost:9093

投票节点列表,通常配置为集群中所有的Controller节点,格式为节点id@节点外网地址:节点Controller端口,多个节点使用逗号,隔开,由于是混合节点,因此配置自己就行了
-v /data/docker/kafka/data:/var/lib/kafka/data持久化数据文件夹,如果运行出现问题可以清空该数据卷文件重启再试
-v /data/docker/kafka/config:/mnt/shared/config持久化配置文件目录
-v /data/docker/kafka/secrets:/etc/kafka/secrets持久化秘钥相关文件夹

容器运行参数详解参考:Docker容器运行常用参数详解-CSDN博客 

3、Compose运行Kafka容器

创建docker-compose.yml文件

sudo touch /data/docker/kafka/docker-compose.yml

文件内容如下:

version: '3'services:kafka:image: apache/kafka:3.9.0container_name: kafkaports:- "9092:9092"- "9093:9093"environment:- KAFKA_NODE_ID=1- KAFKA_PROCESS_ROLES=broker,controller- KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT- KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER- KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092- KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093volumes:- /data/docker/kafka/data:/var/lib/kafka/data- /data/docker/kafka/config:/mnt/shared/config- /data/docker/kafka/secrets:/etc/kafka/secretsprivileged: truenetwork_mode: "bridge"

运行容器

#-f:调用文件,-d:开启守护进程
sudo docker compose -f /data/docker/kafka/docker-compose.yml up -d

4、查看Kafka运行状态

三、集群部署

这是推荐的生产环境的集群部署方式,集群中不存在混合节点,每个节点要么是Broker类型,要么是Controller类型。

通过下列命令在服务器上部署:

# 定义域名
# 这是fish shell的变量定义语法
# 使用bash请替换为:kafka_host="gitdoc.swsk33-mcs.top"
set kafka_host "gitdoc.swsk33-mcs.top"# 节点1-Controller
sudo docker run -id --privileged=true \--net=bridge --name=kafka-1 \-p 10001:9093 \-v /data/docker/kafka-1/config:/mnt/shared/config \-v /data/docker/kafka-1/data:/var/lib/kafka/data \-v /data/docker/kafka-1/secrets:/etc/kafka/secrets \-e LANG=C.UTF-8 \-e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT \-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \-e CLUSTER_ID=the-custom-id \-e KAFKA_NODE_ID=1 \-e KAFKA_PROCESS_ROLES=controller \-e KAFKA_CONTROLLER_QUORUM_VOTERS="1@$kafka_host:10001" \-e KAFKA_LISTENERS="CONTROLLER://:9093" \apache/kafka:3.9.0# 节点2-Broker
sudo docker run -id --privileged=true \--net=bridge --name=kafka-2 \-p 9002:9092 \-v /data/docker/kafka-2/config:/mnt/shared/config \-v /data/docker/kafka-2/data:/var/lib/kafka/data \-v /data/docker/kafka-2/secrets:/etc/kafka/secrets \-e LANG=C.UTF-8 \-e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT \-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \-e CLUSTER_ID=the-custom-id \-e KAFKA_NODE_ID=2 \-e KAFKA_PROCESS_ROLES=broker \-e KAFKA_CONTROLLER_QUORUM_VOTERS="1@$kafka_host:10001" \-e KAFKA_LISTENERS="PLAINTEXT://:9092" \-e KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://$kafka_host:9002" \apache/kafka:3.9.0# 节点3-Broker
sudo docker run -id --privileged=true \--net=bridge --name=broker-3 \-p 9003:9092 \-v /data/docker/kafka-3/config:/mnt/shared/config \-v /data/docker/kafka-3/data:/var/lib/kafka/data \-v /data/docker/kafka-3/secrets:/etc/kafka/secrets \-e LANG=C.UTF-8 \-e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT \-e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \-e CLUSTER_ID=the-custom-id \-e KAFKA_NODE_ID=3 \-e KAFKA_PROCESS_ROLES=broker \-e KAFKA_CONTROLLER_QUORUM_VOTERS="1@$kafka_host:10001" \-e KAFKA_LISTENERS="PLAINTEXT://:9092" \-e KAFKA_ADVERTISED_LISTENERS="PLAINTEXT://$kafka_host:9003" \apache/kafka:3.9.0

这样,我们就部署了一个由1个Controller节点和2个Broker节点构成的集群

相关文章:

保姆级教程Docker部署Kafka官方镜像

目录 一、安装Docker及可视化工具 二、单节点部署 1、创建挂载目录 2、运行Kafka容器 3、Compose运行Kafka容器 4、查看Kafka运行状态 三、集群部署 在Kafka2.8版本之前,Kafka是强依赖于Zookeeper中间件的,这本身就很不合理,中间件依赖…...

解析PHP文件路径相关常量

PHP文件路径相关常量包括以下几个常量: __FILE__:表示当前文件的绝对路径,包括文件名。 __DIR__:表示当前文件所在的目录的绝对路径,不包括文件名。 dirname(__FILE__):等同于__DIR__,表示当前…...

WPS计算机二级•幻灯片的配色、美化与动画

听说这是目录哦 配色基础颜色语言❤️使用配色方案🩷更改PPT的颜色🧡PPT动画添加的原则💛PPT绘图工具💚自定义设置动画💙使用动画刷复制动画效果🩵制作文字打字机效果💜能量站😚 配色…...

C#,shell32 + 调用控制面板项(.Cpl)实现“新建快捷方式对话框”(全网首发)

Made By 于子轩,2025.2.2 不管是使用System.IO命名空间下的File类来创建快捷方式文件,或是使用Windows Script Host对象创建快捷方式,亦或是使用Shell32对象创建快捷方式,都对用户很不友好,今天小编为大家带来一种全新…...

单纯信息展示的站点是否可以用UML建模

凌钦亮 More options Aug 7 2010, 10:36 am 现在社会上大量的网站需求都还只是用于单纯的企业信息展示,那此种网站是否有必要用UML 建模呢?业务用例图的一个个用例是用来卖的,但是他只有信息展示这个需 求,我是否在划分业务用例…...

FinRobot:一个使用大型语言模型的金融应用开源AI代理平台

“FinRobot: An Open-Source AI Agent Platform for Financial Applications using Large Language Models” 论文地址:https://arxiv.org/pdf/2405.14767 Github地址:https://github.com/AI4Finance-Foundation/FinRobot 摘要 在金融领域与AI社区间&a…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.19 线性代数核武器:BLAS/LAPACK深度集成

2.19 线性代数核武器:BLAS/LAPACK深度集成 目录 #mermaid-svg-yVixkwXWUEZuu02L {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yVixkwXWUEZuu02L .error-icon{fill:#552222;}#mermaid-svg-yVixkwXWUEZ…...

开发板目录 /usr/lib/fonts/ 中的字体文件 msyh.ttc 的介绍【微软雅黑(Microsoft YaHei)】

本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 本文是博文 https://blog.csdn.net/wenhao_ir/article/details/145433648 的延伸扩展。 问:运行 ls /usr/lib/fonts/ 发现有一个名叫 msyh.ttc 的字体文件,能介绍…...

Love Tester:探索爱情的深度与维度

爱情是什么?是相互帮助、耐心、理解、鼓励、保护、可靠和牺牲。Love Tester 通过先进的算法,分析名字的兼容性和关系的潜力,帮助你计算爱情匹配的准确性。 相互帮助:在伴侣遇到困难时伸出援手,这是爱情的体现。耐心&a…...

BFS(广度优先搜索)——搜索算法

BFS,也就是广度(宽度)优先搜索,二叉树的层序遍历就是一个BFS的过程。而前、中、后序遍历则是DFS(深度优先搜索)。从字面意思也很好理解,DFS就是一条路走到黑,BFS则是一层一层地展开。…...

JVM 四虚拟机栈

虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多…...

【R语言】获取数据

R语言自带2种数据存储格式:*.RData和*.rds。 这两者的区别是:前者既可以存储数据,也可以存储当前工作空间中的所有变量,属于非标准化存储;后者仅用于存储单个R对象,且存储时可以创建标准化档案&#xff0c…...

Java BIO详解

一、简介 1.1 BIO概述 BIO(Blocking I/O),即同步阻塞IO(传统IO)。 BIO 全称是 Blocking IO,同步阻塞式IO,是JDK1.4之前的传统IO模型,就是传统的 java.io 包下面的代码实现。 服务…...

统计满足条件的4位数(信息学奥赛一本通-1077)

【题目描述】 给定若干个四位数,求出其中满足以下条件的数的个数:个位数上的数字减去千位数上的数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零。 【输入】 输入为两行,第一行为四位数的个数n&#xff0…...

北京门头沟区房屋轮廓shp的arcgis数据建筑物轮廓无偏移坐标测评

在IT行业中,地理信息系统(GIS)是用于处理、分析和展示地理空间数据的重要工具,而ArcGIS则是GIS领域中的一款知名软件。本文将详细解析标题和描述中提及的知识点,并结合“门头沟区建筑物数据”这一标签,深入…...

Spring 面试题【每日20道】【其三】

1、Spring 中的 Profile 注解的作用是什么? 中等 Profile 注解在Spring框架中用于根据不同的环境配置文件(profiles)来激活或忽略某些Bean的注册。它允许开发者定义逻辑以区分不同环境下的bean定义,例如开发、测试和生产环境。 …...

FFmpeg(7.1版本)在Ubuntu18.04上的编译

一、从官网上下载FFmpeg源码 官网地址:Download FFmpeg 点击Download Source Code 下载源码到本地电脑上 二、解压包 tar -xvf ffmpeg-7.1.tar.xz 三、配置configure 1.准备工作 安装编译支持的软件 ① sudo apt-get install nasm //常用的汇编器,用于编译某些需要汇编…...

Apache Hudi数据湖技术应用在网络打车系统中的系统架构设计、软硬件配置、软件技术栈、具体实现流程和关键代码

网络打车系统利用Hudi数据湖技术成功地解决了其大规模数据处理和分析的难题,提高了数据处理效率和准确性,为公司的业务发展提供了有力的支持。 Apache Hudi数据湖技术的一个典型应用案例是网络打车系统的数据处理场景,具体如下: 大…...

安全策略配置

需求: 1、VLAN 2属于办公区;VLAN 3属于生产区 2、办公区PC在工作日时间(周一至周五,早8到晚6)可以正常访问0A Server,其他时间不允许 3、办公区PC可以在任意时刻访问web server 4、生产区PC可以在任意时刻访问0A Server,但是不能访问Web serv…...

c++ stl 遍历算法和查找算法

概述&#xff1a; 算法主要由头文件<algorithm> <functional> <numeric> 提供 <algorithm> 是所有 STL 头文件中最大的一个&#xff0c;提供了超过 90 个支持各种各样算法的函数&#xff0c;包括排序、合并、搜索、去重、分解、遍历、数值交换、拷贝和…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...