记录一下Docker部署单节点Kafka与部署可视化界面KafkaMap容器

目录

一、Kafka早已经弃用了ZooKeeper

二、Docker部署单机版Kafka

1、--name kafka-server

2、--network kafka-stand

3、--restart unless-stopped

4、-p 9092:9092

5、-p 9093:9093

6、-e ALLOW_PLAINTEXT_LISTENER=yes

7、-e KAFKA_CFG_PROCESS_ROLES=broker,controller

8、-e KAFKA_CFG_NODE_ID=1

9、-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT

10、  -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER

11、  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093

12、-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.10.10.10:9092

13、-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka-server:9093

14、-e KAFKA_CLUSTER_ID=$(uuidgen)

15、  -e KAFKA_HEAP_OPTS="-Xms512m -Xmx512m"

16、  -v /home/username/kafka-data:/bitnami/kafka/data

17、  bitnami/kafka:3.8.0

三、Docker部署单机版kafak-map可视化UI

四、完结,撒花  任何问题私信或评论,我随时修改博文。


一、Kafka早已经弃用了ZooKeeper

这个是Kafka的官网:Apache Kafka     

Kafka 是从 2.8 版本开始引入 KRaft 作为实验性特性的。在 3.3 版本时 KRaft 可用于生产环境。到 3.5 版本 Zookeeper 模式被标记为弃用。Kafka 4.0 版本则彻底移除 Zookeeper。

KRaft是有Raft协议演变而来,它的性能和稳定性比ZooKeeper更高,降低了维护成本。并且,ZooKeeper的运行需要JAVA环境的支持,主要是JDK。

当前,还有大量的博文,记录使用ZooKeeper作为Kafka的数据存储,这非常离谱,Kafka3.3版本发布于2022年9月,即:2022年9月Kafka已经第一次可以在生成环境移除ZooKeeper。就像JAVA一样,当前已经来到了JAVA22,你还在说新项目要使用JAVA8,这简直是。。。  无言以对

二、Docker部署单机版Kafka

直接粘贴Docker命令:

注意:复制命令以后,你要修改一下 -v 目录挂载的本地位置,即:/home/username/kafka-data         username改为自己的用户名。容器名字可以不用改,这个测试环境可以随意。

这里我使用的是  bitnami公司提供的镜像。不同来源的镜像,在参数设定上可能略有差异,这些参数设定的名称都是各个镜像打包人自己定义的,会被设定进容器的配置文件中去。比如说下面的 第13 配置项(环境变量):

docker run -d --name kafka-server \--network kafka-stand \--restart unless-stopped \-p 9092:9092 \-p 9093:9093 \-e ALLOW_PLAINTEXT_LISTENER=yes \-e KAFKA_CFG_PROCESS_ROLES=broker,controller \-e KAFKA_CFG_NODE_ID=1 \-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT \-e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.213.22.207:9092 \-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka-server:9093 \-e KAFKA_CLUSTER_ID=$(uuidgen) \-e KAFKA_HEAP_OPTS="-Xms512m -Xmx512m" \-v /home/username/kafka-data:/bitnami/kafka/data \bitnami/kafka:3.8.0

完全复制命令即可。Docker这种将命令分为多行,每一行的结尾都有  \  ,并且它前面还有一个空格,它的后面不能有空格,否则执行命令报错!!

下面逐行解释命令:

-p表示端口映射,-e表示设置Kafka环境变量。

1、--name kafka-server

表示容器的名称是  kafak-server,可以按照具体情况做更改

2、--network kafka-stand

表示该Kafka容器处于名字叫做  kafka-stand网络下。Docker 中的 “网络” 是一种虚拟网络环境,用于实现容器之间、容器与主机之间的网络通信隔离与管理。处于同一网络的容器可以通过容器名(或别名)直接通信,无需依赖主机的 IP 地址。例如,若容器名 A 和容器名 B 都加入了my-network网络,则 A 可以直接通过 ping B 或访问 B:端口 与 B 通信,无需手动配置端口映射或 IP 地址。不同网络中的容器默认无法通信,实现了网络层面的隔离。默认网络模式是:容器连接到 Docker 默认的桥接网络。

3、--restart unless-stopped

表示容器意外停止后,自动重启,不包含使用docker stop命令手动停止容器。比较常用的一个配置。

还有以下其它三种重启策略(即使容器已经运行起来了,我们也可以停止容器-》更新停止后的重启方式进行修改这一策略):

假如你的Linux关机,然后重启以后,你使用docker ps查看运行起来的容器,如果有一些容器没有自动跑起来,需要手动使用 docker run <容器名称> 来启动容器,它很有可能就是没有配置  --restart unless-stopped 这一个配置项。

4、-p 9092:9092

表示将Linux主机的9092端口与kafka-server容器的9092端口做映射。前者表示宿主机端口,后者表示容器接口。(容器其实就是一个阉割版的Linux)    9092端口是Kafka开放给消息的默认端口。在项目中的消费者和生产者,都需要配置   kafka的IP+9092端口。

如下图所示:(红色部分表示宿主机IP地址,因为已经做了端口映射,9092其实指的是宿主机映射容器9092的对应端口)

5、-p 9093:9093

同上。9093端口通常用于内部 broker 间通信(或安全连接)

6、-e ALLOW_PLAINTEXT_LISTENER=yes

指允许监听器明文传输。我们这里是测试搭建单机版Kafka,非生产环境,并且使用的是轻量级Bitnami公司提供的镜像,因此使用明文。生产环境,为了保证消息不被窃听,会使用SSL作为加密认证方式。   kafka镜像的来源主要有三个公司,适用于不同的场景需求,详细可以阅读下面的博客:

docker镜像wurstmeister/kafka、confluentinc/cp-kafka 和 bitnami/kafka_bitnami wurstmeister kafka-CSDN博客

7、-e KAFKA_CFG_PROCESS_ROLES=broker,controller

这一配置主要与 Kafka 2.8.0 及以上版本引入的KRaft 模式(无 ZooKeeper 模式)相关。

8、-e KAFKA_CFG_NODE_ID=1

主要用于 KRaft 模式(无 ZooKeeper 模式) 中标识当前节点的唯一 ID。这个 ID 在整个 Kafka 集群中必须唯一,用于标识节点身份。此ID必须设置,一经设置不建议更改。核心作用可以概括如下:

9、-e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT

上面这个是KRaft模式中必须的配置。用于定义监听器(listener)与安全协议的映射关系。

首先是Kafka中监听器的概念:

此配置的核心作用如下:

这个配置与下面的   10  是必须对应的,因为下面的  10号配置,定义了监听器的名称。

10、  -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER

用于指定Kafka控制器使用的监听器名称。这个名称需要在上面的 配置9 中使用到。

11、  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093

定义Kafka服务监听的网络端口,协议,及对应的监听器名称。

配置值的格式是:<监听器名称>://<绑定地址>:<端口>

有多个配置值的,使用英文逗号分隔。上面的两个配置值省略了绑定地址,9092端口那个说明:“绑定当前容器的所有网络接口”(即允许来自容器外部的连接)。项目的消费者和生产者都需要使用9092端口作为消息的发送和拉取。

9093端口的配置:绑定容器所有网络接口,监听 9093 端口(专门用于内部控制器通信的端口,与客户端端口分开)。

做一个总结

9092端口其实应该设置IP地址的,在生产环境中,不能让任意的项目都可以向该Kafka发消息及拉取消息。

12、-e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://10.10.10.10:9092

这个是必须配置的,否则客户端无法生产消息到Kafka,消费者无法拉取到消息。

用于告知客户端(消息的消费者和生产者)如何正确的连接到Kafka服务,解决容器内外网络地址不一致的问题。

直译为中文:Kafka配置的广告监听器。

后面的配置值格式是:   <客户端监听器名称>://<Kafka容器实际可访问的IP地址,通常是宿主机IP>:<客户端监听器监听的端口>

这里使用到了客户端监听器的名称,与  上面的  配置9,配置10,配置11  是对应的,都使用到了监听器的名称和各自对应的端口。

13、-e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka-server:9093

用于指定集群在KRaft模式下的 控制器仲裁投票者列表。

是Kafka集群在KRaft模式下的必须配置,否则集群无法启动。ZooKeeper模式下绝对不能有此配置

具体解释该配置值的格式与意义:

这里的  kafka-server就是我们在  配置项1  配置的容器名。

下面解释一下控制器仲裁组以及控制器的作用

14、-e KAFKA_CLUSTER_ID=$(uuidgen)

设定Kafka集群的唯一ID。 $(uuidgen)表示使用UUID产生一个全球唯一ID。

在KRaft模式下必须配置,同一个集群下的多个节点,该配置的集群ID必须保持一致。

作用如下:

15、  -e KAFKA_HEAP_OPTS="-Xms512m -Xmx512m"

Kafka是由JAVA开发的程序,依赖于JAVA环境。

上面的配置中包含两个参数,分别表示:堆内存的初始大小和最大大小,都是512兆字节。

下面是AI给出的Kafka对JAVA堆内存大小的配置经验:

16、  -v /home/username/kafka-data:/bitnami/kafka/data

这个是进行宿主机文件夹和容器文件夹进行映射的命令。

强烈建议:所有的容器都要直接进行文件夹映射,尽量不使用数据卷挂载。

前者是宿主机目录路径,后者是容器内部路径。

(1)、要保证前者的宿主机目录存在,并且容器有写入读取权限。

(2)、后者的容器数据存储目录,在不同的镜像下可能不同。这需要具体查一下。

17、  bitnami/kafka:3.8.0

这个就是容器的来源,名字和版本

三、Docker部署单机版kafak-map可视化UI

开源地址:kafka-map: 一个美观简洁且强大的kafka web管理工具。

也是JAVA开发的程序。

这是一个两年前国人开发的一个开源项目。可以可视化查看Kafka集群的主题,分区等。

下面是官方提供的Docker容器安装方式:

然后直接访问  http://宿主机IP地址:8080   即可。

注意输入  admin用户名和 密码admin,这个是在docker  命令里面配置好的。

登录成功以后,需要配置一下可视化界面显示的Kafka地址,官方给出了如下步骤(因为这是一个单独的容器,没有加入到Kafka网络,不可能说启动容器以后,自动就监控所在网络中的Kafka集群):

个可视化界面有个缺点:它上面的数字是可以点击的,根本就不像是一个功能按钮!!

如下所示,图中划红线的数字,是可以点击进去查看具体的主题名字的:

四、完结,撒花  任何问题私信或评论,我随时修改博文。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch面试精讲 Day 2:索引、文档与映射机制

【Elasticsearch面试精讲 Day 2】索引、文档与映射机制 在“Elasticsearch面试精讲”系列的第二天&#xff0c;我们将深入探讨索引&#xff08;Index&#xff09;、文档&#xff08;Document&#xff09;与映射&#xff08;Mapping&#xff09;机制。这是Elasticsearch中最基础…

Vue2 与 Vue3 路由钩子的区别及用法详解

Vue2 与 Vue3 路由钩子的区别及用法详解 一、核心区别概览特性Vue2 (选项式API)Vue3 (组合式API)定义方式组件选项形式在setup()中调用函数形式钩子名称beforeRouteEnter/Update/LeaveonBeforeRouteUpdate/Leavethis访问beforeRouteEnter不能访问this无this概念&#xff0c;直接…

STM32的内存分配与堆栈

使用过cortex-M4内核单片机的朋友对下面这张图一定不会感到陌生&#xff0c;它是ST原厂手册里面的memory map&#xff0c;里面的信息量其实非常多&#xff0c;今天简单说明一部分。我们在编写stm32代码的时候最长使用的地址有两块&#xff0c;第一块是0x0000 0000~0x3FFF FFFF,…

OpenStack 03:创建实例

修改默认安全组 管理规则 添加规则 添加端口22规则 添加ping 规则 下载镜像文件 Get images — Virtual Machine Image Guide documentation https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/42/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-42-1.1.x86_64.qcow2 …

企业级架构师综合能力项目案例一(各种组件集群搭建+SpringBoot整合)

架构图 用户请求 → Nginx → Spring Cloud Gateway → 微服务集群↓MySQL集群主从复制(ShardingSphere) Redis集群主从复制(Sentinel)ES集群 MongoDB集群(分片)RocketMQ集群 Seata分布式事务搭建集群 Nginx集群和配置┌─────────…

学习stm32 窗口看门狗

窗口看门狗1.WWDG简介窗口看门狗用于监测单片机程序运行时效是否精准&#xff0c;主要检测软件异常&#xff0c;一般用于需要精准检测程序运行时间的场合。不仅防止程序 “卡死不喂狗”&#xff0c;还能避免程序 “异常早喂狗”&#xff08;如死循环中误执行喂狗指令&#xff0…

Selenium 等待机制:编写稳定可靠的自动化脚本

一、为什么需要等待机制&#xff1f;网页是动态加载的&#xff0c;元素出现的时间不确定。如果脚本在元素还没加载完成时就尝试操作它&#xff0c;就会抛出 NoSuchElementException 异常。三种等待方式&#xff1a;强制等待&#xff1a;time.sleep() - 简单但低效隐式等待&…

蓓韵安禧活性叶酸独立包装防漏贴心设计

蓓韵安禧叶酸新升级 近期&#xff0c;蓓韵安禧在叶酸产品上进行了重要的优化升级。这次升级的核心在于产品形态和使用体验的显著提升&#xff0c;尤其体现在其包装设计上。新版本采用了独立密封的小包装形式&#xff0c;每一份都精准包含每日所需的叶酸量。这种设计不仅有效避免…

8针脚的1.8寸IIC接口的TFT彩屏的八个引脚都需要使用吗?

核心结论 不需要全部使用8个引脚。实际仅需连接 4根核心线&#xff08;GND, VCC, SCL, SDA&#xff09; 即可基本工作&#xff0c;其余引脚为功能增强或备用设计。具体需根据屏幕型号确认&#xff0c;但通用规则如下&#xff1a;8针脚功能分解引脚标号典型名称是否必需作用不连…

刷题日记0831

今日计划5道早上起来不困&#xff0c;吃好早饭开始困了&#xff0c;感觉刷不动题&#xff0c;就先做别的事&#xff0c;不困。现在别的事做好了&#xff0c;感觉能刷动题了。开始开始。7/5134. 加油站 中等超时了。看下题解。不是&#xff0c;怎么上数学了&#xff1f;假设从 x…

【2025.8.31】自学Java三个月,谈谈心路历程顺便给自己灌点鸡汤

自学Java三个月&#xff0c;谈谈心得顺便给自己灌点鸡汤 6月1开始上班&#xff0c;到今天刚好三个月。从上班第一天决定开始自学java&#xff0c;到今天也是正好3个月整&#xff0c;想借这个机会简单记录一下学习java的契机和进度&#xff0c;α一些碎碎念。&#xff08;括号恐…

linux内核trace_begin和trace_end使用分析

1,strace/ftrace的实现和使用 echo 1 > /sys/kernel/debug/tracing/tracing_on echo function > /sys/kernel/debug/tracing/current_tracer 2, 手动插入追踪点 在内核代码中,可以使用trace_printk函数手动插入追踪点,标记代码段的开始和结束: trace_printk(&…

Linux-驱动积累

Linux 设备驱动概述​Linux 设备驱动是内核与硬件交互的核心桥梁&#xff0c;负责屏蔽硬件细节、提供统一操作接口。其以内核模块为主要存在形式&#xff0c;支持动态加载 / 卸载&#xff0c;核心功能涵盖硬件初始化、中断处理、电源管理及数据传输&#xff0c;是嵌入式 Linux …

软考-系统架构设计师 决策支持系统(DSS)详细讲解

个人博客&#xff1a;blogs.wurp.top 一、DSS的核心概念与定位 1. 什么是DSS&#xff1f; DSS是一个交互式的、计算机化的系统&#xff0c;旨在帮助决策者利用数据和模型来解决半结构化&#xff08;Semi-structured&#xff09; 或非结构化&#xff08;Non-structured&#…

《Python 实战:构建一个可扩展的订单管理系统,从基础操作到架构思维》

《Python 实战:构建一个可扩展的订单管理系统,从基础操作到架构思维》 一、引言:用代码管理商业的脉搏 在数字化浪潮席卷各行各业的今天,订单管理系统已成为电商、物流、零售等领域的核心支撑。它不仅承载着交易数据,更是企业运营效率的体现。而 Python,以其简洁优雅的…

【计算机网络】生产问题排查:如何使用Wireshark抓包/读取抓包文件进行网络分析

1 缘起 有一次,公司同事A让同事B看一次请求日志, 同事B说先抓一次包看看请求是否进入服务器-某个服务, 我知道这个事情后,也“参观”了抓包过程, 上面的事件只是一个小插曲,紧接着的第二件事才是写本篇文章的真正动机: 同一天,同事C让同事D配置个服务代理(某种上网方…

网格dp|

lc3665class Solution {public:int uniquePaths(vector<vector<int>>& grid) {const int MOD 1000000007;int m grid.size(), n grid[0].size();vector memo(m, vector(n, array<int, 2>{-1, -1})); // -1 表示没有计算过auto dfs [&](this auto…

烦人的Nano 编辑器,如何退出呢?

对于不熟悉 nano 编辑器的人来说&#xff0c;它的退出方式确实有点反直觉。别担心&#xff0c;这是几乎所有新手都会遇到的困惑。 退出 Nano 编辑器的正确方法 记住这个黄金法则&#xff1a;ctrl键是你的朋友&#xff01; 1. 正常保存并退出&#xff08;最常用&#xff09; 按 …

IDM(Internet Download Managerv 6.38)破除解版下载!IDM 下载器永久免费版!提升下载速度达5倍!安装及使用

软件介绍 IDM&#xff08;Internet Download Manager&#xff09;是一款功能强大的 Windows 平台专业下载加速工具&#xff0c;可加速下载速度、调度任务、续传下载、管理文件。可使下载速度提升至普通浏览器的 5 倍以上&#xff0c;最高可加速 8 倍。IDM 支持 HTTP、FTP、HTTP…

学习Java29天(tcp多发多收)但是无解决客户端启动多个问题

180/189今天看了一些ip的东西WLAN的ip是路由器随机分配的&#xff08;DHCP&#xff09;