保姆级教程Docker部署KRaft模式的Kafka官方镜像
目录
一、安装Docker及可视化工具
二、单节点部署
1、创建挂载目录
2、运行Kafka容器
3、Compose运行Kafka容器
4、查看Kafka运行状态
三、集群部署
四、部署可视化工具
1、创建挂载目录
2、运行Kafka-ui容器
3、Compose运行Kafka-ui容器
4、查看Kafka-ui运行状态
在Kafka2.8版本之前,Kafka是强依赖于Zookeeper中间件的,这本身就很不合理,中间件依赖另一个中间件,搭建起来实在麻烦。所幸Kafka2.8之后推出了KRaft模式,即抛弃Zookeeper,由Kafka节点自己做Controller来选举Leader。本篇文章内容就是介绍如何在Docker中搭建Kafka KRaft环境。
一、安装Docker及可视化工具
Docker及可视化工具的安装可参考:Ubuntu上安装 Docker及可视化管理工具
二、单节点部署
在进行单节点部署并以KRaft模式运行时,该节点通常是混合节点的类型
1、创建挂载目录
# 创建宿主机kafka挂载目录
sudo mkdir -p /data/docker/kafka
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 LANG=C.UTF-8 \
-e KAFKA_NODE_ID=1 \
-e CLUSTER_ID=kafka-cluster \
-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://192.168.3.9:9092 \
-e KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \
apache/kafka:3.9.0
参数解析如下:
| 参数 | 参数说明 |
| docker run | 运行 Docker 容器 |
| -d | 容器将在后台运行,而不是占用当前的终端会话 |
| --privileged=true | Docker会赋予容器几乎与宿主机相同的权限 |
| --net=bridge | 网络模式配置,默认是bridge,bridge表示使用容器内部配置网络 |
| --name kafka | 给容器命名为 kafka,以便于管理和引用该容器 |
| -p 9092:9092 -p 9093:9093 | 映射 kafka 的客户端通信端口和控制器端口 |
| -e KAFKA_NODE_ID=1 | 节点ID,用于标识每个集群中的节点,需要是不小于1的整数,同一个集群中的节点ID不可重复 |
| -e CLUSTER_ID=kafka-cluster | 集群ID,可以自定义任何字符串作为集群ID,同一个集群中所有节点的集群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://192.168.3.9:9092 | 配置Kafka的外网地址,需要是PLAINTEXT://外网地址:端口的形式,当客户端连接Kafka服务端时,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:- LANG=C.UTF-8- KAFKA_NODE_ID=1- CLUSTER_ID=kafka-cluster- 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://192.168.3.9: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集群,这是推荐的生产环境的集群部署方式,集群中不存在混合节点,每个节点要么是Broker类型,要么是Controller类型。
通过下列命令在服务器上部署:
# 定义域名
# 这是fish shell的变量定义语法
# 使用bash请替换为:kafka_host="192.168.3.9"
set kafka_host "192.168.3.9"# 节点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=kafka-cluster \-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=kafka-cluster \-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=kafka-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=kafka-cluster \-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节点构成的集群,需要注意的是:
- Broker节点无需暴露9093端口,Controller节点无需暴露9092端口
- Broker节点需指定KAFKA_PROCESS_ROLES为broker,同样的Controller需要指定为controller
- KAFKA_CONTROLLER_QUORUM_VOTERS配置只需要写集群中所有的Controller节点的地址端口列表
- 对于KAFKA_LISTENERS配置项:Broker节点需要配置为PLAINTEXT://:9092,表示本节点作为Broker节点;Controller节点需要配置为CONTROLLER://:9093,表示本节点作为Controller节点
- 对于KAFKA_ADVERTISED_LISTENERS配置项:Controller节点不能指定该配置;Broker节点需要指定为自己的外网地址和端口
四、部署可视化工具
在早期使用Kafka时,通常会选择Kafka Tool或Kafka Eagle进行管理。Kafka Tool是一款桌面应用程序,而Kafka Eagle则基于浏览器运行。尽管这两款工具在用户体验上表现平平,但它们基本能满足日常需求。
然而,自Kafka 3.3.1版本起,Kafka正式弃用了Zookeeper,转而采用自有的仲裁机制,即kraft模式。遗憾的是,上述两款工具似乎未能及时跟进这一更新,仍然要求用户输入Zookeeper地址才能连接,导致它们在新版本Kafka中无法正常使用。为了解决这一问题,我发现了一款轻量且易于使用的替代工具——kafka-ui,它能够更好地适配新版Kafka。
1、创建挂载目录
# 创建宿主机kafka-ui挂载目录
sudo mkdir -p /data/docker/kafka-ui/config# 创建挂载的配置文件
sudo touch /data/docker/kafka-ui/config/dynamic_config.yaml
2、运行Kafka-ui容器
# 拉取镜像
sudo docker pull provectuslabs/kafka-ui:v0.7.2# 运行容器
sudo docker run --privileged=true \
--net=bridge \
-d --name=kafka-ui \
-p 18080:8080 \
-v /data/docker/kafka-ui/config/dynamic_config.yaml:/etc/kafkaui/dynamic_config.yaml
-e KAFKA_CLUSTERS_0_NAME=kafka-cluster \
-e KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS=192.168.3.9:9092 \
-e SERVER_SERVLET_CONTEXT_PATH=/ \
-e AUTH_TYPE=LOGIN_FORM \
-e SPRING_SECURITY_USER_NAME=admin \
-e SPRING_SECURITY_USER_PASSWORD=admin \
-e TZ=Asia/Shanghai \
-e LANG=C.UTF-8 \
provectuslabs/kafka-ui:v0.7.2
参数解析如下:
| 参数 | 参数说明 |
| docker run | 运行 Docker 容器 |
| -d | 容器将在后台运行,而不是占用当前的终端会话 |
| --privileged=true | Docker会赋予容器几乎与宿主机相同的权限 |
| --net=bridge | 网络模式配置,默认是bridge,bridge表示使用容器内部配置网络 |
| --name kafka-ui | 给容器命名为 kafka-ui,以便于管理和引用该容器 |
| -p 18080:8080 | 映射 kafka-ui 的web端口 |
| -v /data/docker/kafka-ui/config/dynamic_config.yaml: /etc/kafkaui/dynamic_config.yaml | 挂载配置文件,确保config/dynamic_config.yaml文件存在 |
| -e SERVER_SERVLET_CONTEXT_PATH=/ | 默认kafka-ui是免登录的,为了防止所有人都可以登录产生误操作问题,在docker部署的时候可以添加如下四个环境变量配置用户的登录密码。 |
| -e AUTH_TYPE=LOGIN_FORM | |
| -e SPRING_SECURITY_USER_NAME=admin | |
| -e SPRING_SECURITY_USER_PASSWORD=admin | |
| -e KAFKA_CLUSTERS_0_NAME=kafka-cluster | 自定义集群名称 |
| -e KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS= 192.168.3.9:9092 | 集群地址,如有多个地址逗号分隔;需要修改为对应的Kafka的外网地址。 |
3、Compose运行Kafka-ui容器
创建docker-compose.yml文件
sudo touch /data/docker/kafka-ui/docker-compose.yml
文件内容如下:
version: '3'services:kafka:image: provectuslabs/kafka-ui:v0.7.2container_name: kafka-uiports:- "18080:8080"environment:- TZ=Asia/Shanghai- LANG=C.UTF-8- DYNAMIC_CONFIG_ENABLED=true- KAFKA_CLUSTERS_0_NAME=kafka-cluster- KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS=192.168.3.9:9092- SERVER_SERVLET_CONTEXT_PATH=/- AUTH_TYPE=LOGIN_FORM- SPRING_SECURITY_USER_NAME=admin- SPRING_SECURITY_USER_PASSWORD=adminvolumes:- /data/docker/kafka-ui/config/dynamic_config.yaml:/etc/kafkaui/dynamic_config.yamlprivileged: truenetwork_mode: "bridge"
运行容器
#-f:调用文件,-d:开启守护进程
sudo docker compose -f /data/docker/kafka-ui/docker-compose.yml up -d
4、查看Kafka-ui运行状态
http://192.168.3.9:18080/auth
账号和密码 都是admin

相关文章:
保姆级教程Docker部署KRaft模式的Kafka官方镜像
目录 一、安装Docker及可视化工具 二、单节点部署 1、创建挂载目录 2、运行Kafka容器 3、Compose运行Kafka容器 4、查看Kafka运行状态 三、集群部署 四、部署可视化工具 1、创建挂载目录 2、运行Kafka-ui容器 3、Compose运行Kafka-ui容器 4、查看Kafka-ui运行状态 …...
ChatGPT提问技巧:行业热门应用提示词案例--咨询法律知识
ChatGPT除了可以协助办公,写作文案和生成短视频脚本外,和还可以做为一个法律工具,当用户面临一些法律知识盲点时,可以向ChatGPT咨询获得解答。赋予ChatGPT专家的身份,用户能够得到较为满意的解答。 1.咨询法律知识 举…...
openRv1126 AI算法部署实战之——Tensorflow模型部署实战
在RV1126开发板上部署Tensorflow算法,实时目标检测RTSP传输。视频演示地址 rv1126 yolov5 实时目标检测 rtsp传输_哔哩哔哩_bilibili 一、准备工作 从官网下载tensorflow模型和数据集 手动在线下载: https://github.com/tensorflow/models/b…...
STM32 TIM定时器配置
TIM简介 TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能ÿ…...
51单片机 05 矩阵键盘
嘻嘻,LCD在RC板子上可以勉强装上,会有一点歪。 一、矩阵键盘 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式;采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。…...
SSRF 漏洞利用 Redis 实战全解析:原理、攻击与防范
目录 前言 SSRF 漏洞深度剖析 Redis:强大的内存数据库 Redis 产生漏洞的原因 SSRF 漏洞利用 Redis 实战步骤 准备环境 下载安装 Redis 配置漏洞环境 启动 Redis 攻击机远程连接 Redis 利用 Redis 写 Webshell 防范措施 前言 在网络安全领域࿰…...
kubernetes学习-配置管理(九)
一、ConfigMap (1)通过指定目录,创建configmap # 创建一个config目录 [rootk8s-master k8s]# mkdir config[rootk8s-master k8s]# cd config/ [rootk8s-master config]# mkdir test [rootk8s-master config]# cd test [rootk8s-master test…...
python 语音识别
目录 一、语音识别 二、代码实践 2.1 使用vosk三方库 2.2 使用SpeechRecognition 2.3 使用Whisper 一、语音识别 今天识别了别人做的这个app,觉得虽然是个日记app 但是用来学英语也挺好的,能进行语音识别,然后矫正语法,自己说的时候 ,实在不知道怎么说可以先乱说,然…...
一文速览DeepSeek-R1的本地部署——可联网、可实现本地知识库问答:包括671B满血版和各个蒸馏版的部署
前言 自从deepseek R1发布之后「详见《一文速览DeepSeek R1:如何通过纯RL训练大模型的推理能力以比肩甚至超越OpenAI o1(含Kimi K1.5的解读)》」,deepseek便爆火 爆火以后便应了“人红是非多”那句话,不但遭受各种大规模攻击,即便…...
[mmdetection]fast-rcnn模型训练自己的数据集的详细教程
本篇博客是由本人亲自调试成功后的学习笔记。使用了mmdetection项目包进行fast-rcnn模型的训练,数据集是自制图像数据。废话不多说,下面进入训练步骤教程。 注:本人使用linux服务器进行展示,Windows环境大差不差。另外࿰…...
1. Kubernetes组成及常用命令
Pods(k8s最小操作单元)ReplicaSet & Label(k8s副本集和标签)Deployments(声明式配置)Services(服务)k8s常用命令Kubernetes(简称K8s)是一个开源的容器编排系统,用于自动化应用程序的部署、扩展和管理。自2014年发布以来,K8s迅速成为容器编排领域的行业标准,被…...
linux下ollama更换模型路径
Linux下更换Ollama模型下载路径指南 在使用Ollama进行AI模型管理时,有时需要根据实际需求更改模型文件的存储路径。本文将详细介绍如何在Linux系统中更改Ollama模型的下载路径。 一、关闭Ollama服务 在更改模型路径之前,需要先停止Ollama服务。…...
本地Ollama部署DeepSeek R1模型接入Word
目录 1.本地部署DeepSeek-R1模型 2.接入Word 3.效果演示 4.问题反馈 上一篇文章办公新利器:DeepSeekWord,让你的工作更高效-CSDN博客https://blog.csdn.net/qq_63708623/article/details/145418457?spm1001.2014.3001.5501https://blog.csdn.net/qq…...
【自学笔记】Git的重点知识点-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Git基础知识Git高级操作与概念Git常用命令 总结 Git基础知识 Git简介 Git是一种分布式版本控制系统,用于记录文件内容的改动,便于开发者追踪…...
[EAI-028] Diffusion-VLA,能够进行多模态推理和机器人动作预测的VLA模型
Paper Card 论文标题:Diffusion-VLA: Scaling Robot Foundation Models via Unified Diffusion and Autoregression 论文作者:Junjie Wen, Minjie Zhu, Yichen Zhu, Zhibin Tang, Jinming Li, Zhongyi Zhou, Chengmeng Li, Xiaoyu Liu, Yaxin Peng, Chao…...
实现数组的扁平化
文章目录 1 实现数组的扁平化1.1 递归1.2 reduce1.3 扩展运算符1.4 split和toString1.5 flat1.6 正则表达式和JSON 1 实现数组的扁平化 1.1 递归 通过循环递归的方式,遍历数组的每一项,如果该项还是一个数组,那么就继续递归遍历,…...
登录认证(5):过滤器:Filter
统一拦截 上文我们提到(登录认证(4):令牌技术),现在大部分项目都使用JWT令牌来进行会话跟踪,来完成登录功能。有了JWT令牌可以标识用户的登录状态,但是完整的登录逻辑如图所示&…...
pytorch实现门控循环单元 (GRU)
人工智能例子汇总:AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快,参数更少相对较慢,参数更多结构复杂度只有两个门(更新门和重置门)三个门(输入门、遗忘门、输出门)处理长时依赖一般适…...
Word List 2
词汇颜色标识解释 词汇表中的生词 词汇表中的词组成的搭配、派生词 例句中的生词 我自己写的生词(用于区分易混淆的词,无颜色标识) 不认识的单词或句式 单词的主要汉语意思 不太理解的句子语法和结构 Word List 2 英文音标中文regi…...
机器学习常用包numpy篇(四)函数运算
目录 前言 一、三角函数 二、双曲函数 三、数值修约 四、 求和、求积与差分 五、 指数与对数 六、算术运算 七、 矩阵与向量运算 八、代数运算 九、 其他数学工具 总结 前言 Python 的原生运算符可实现基础数学运算(加减乘除、取余、取整、幂运算&#…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
