Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
Kafka:分布式消息系统的核心原理与安装部署-CSDN博客
自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客
Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客
Kafka 生产者优化与数据处理经验-CSDN博客
Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化-CSDN博客
Kafka 消费者全面解析:原理、消费者 API 与Offset 位移-CSDN博客
Kafka 分区分配及再平衡策略深度解析与消费者事务和数据积压的简单介绍-CSDN博客
Kafka 数据倾斜:原因、影响与解决方案-CSDN博客
Kafka 核心要点解析_kafka mirrok-CSDN博客
Kafka 核心问题深度解析:全面理解分布式消息队列的关键要点_kafka队列日志-CSDN博客
目录
一、Kafka Broker 工作流程
(一)Zookeeper 存储的 Kafka 信息
(二)Kafka Broker 总体工作流程
注册与选举
数据处理
二、生产经验 —— 节点服役和退役
(一)服役新节点
新节点准备
执行负载均衡操作
(二)退役旧节点
执行负载均衡操作
执行停止命令
三、Kafka 副本
(一)副本基本信息
(二)Leader 选举流程
(三)Leader 和 Follower 故障处理细节
(四)分区副本分配
(五)生产经验 —— 手动调整分区副本的存储
(六)生产经验 ——Leader Partition 负载平衡
(七)生产经验 —— 增加副本因子
四、文件存储
(一)文件存储机制
Topic 数据存储
数据位置查找
(二)文件清理策略
delete 日志删除
compact 日志压缩
五、高效读写数据
分区技术与并行度
稀疏索引与快速定位
顺序写磁盘
页缓存 + 零拷贝技术
六、总结
在大数据处理领域,Kafka 作为一款高性能的分布式消息队列系统,扮演着至关重要的角色。它能够高效地处理大规模的实时数据,为众多大数据应用提供了可靠的数据传输和存储基础。本文将深入探讨 Kafka 的核心组件 ——Kafka Broker,包括其工作流程、副本机制、文件存储以及高效读写数据的原理,并分享一些生产环境中的实用经验。
一、Kafka Broker 工作流程
(一)Zookeeper 存储的 Kafka 信息
Kafka 与 Zookeeper 紧密协作,Zookeeper 存储了许多关键的 Kafka 信息。启动 Zookeeper 客户端后,通过ls /kafka
命令可以查看相关信息。其中,consumers
节点在老版本(0.9 版本之前)存放消费者的偏移量,而在新版本中,偏移量直接存储在集群中。我们还可以借助工具如 “漂亮的 zoo” 通过图形化界面更直观地查看 Zookeeper 中的信息。
通过网盘分享的文件:prettyZoo-win.msi
(二)Kafka Broker 总体工作流程
注册与选举
每一个 Broker 上线时,会在 Zookeeper 中进行注册。每个 Broker 中都有一个 Controller,它们会争先抢占 Zookeeper 中controller
节点的注册权,率先抢到的 Broker 中的 Controller 将在选举等事务中拥有决策权。
选举规则以在 ISR(与 Leader 保持同步的 Follower 集合)中存活为前提,按照 AR(分区中的所有副本集合)中排在前面的优先。例如,对于ar[1,0,2]
,isr[1,0,2]
,Leader 会按照1,0,2
的顺序进行轮询选举。选举出来的新节点会注册到 Zookeeper 中,并将信息记录下来,其他 Controller 则同步 Zookeeper 中的信息,假定broker中的leader挂掉了,会进行重新的选举。
数据处理
客户端发送消息给 Leader,Leader 负责记录数据并落盘形成 Log。Log 底层采用 Segment 机制,每一个 Segment 大小为 1G,为了实现数据的快速查找,在 1G 内的数据又分成了log
和index
两个文件。
二、生产经验 —— 节点服役和退役
(一)服役新节点
新节点准备
(1)关闭 bigdata03,进行一个快照,并右键执行克隆操作。
(2)开启 bigdata04,并修改 IP 地址。
vi /etc/sysconfig/network-scripts/ifcfg-ens33修改完记得重启网卡:
systemctl restart network
(3)在 bigdata04 上,修改主机名称为 bigdata04。
hostname bigdata04 # 临时修改
[root@bigdata04 ~]# vim /etc/hostname
bigdata04
还要记得修改 /etc/hosts文件,并进行同步
修改bigdata01的hosts 文件,修改完之后,记得同步一下192.168.52.11 bigdata01
192.168.52.12 bigdata03
192.168.52.13 bigdata02
192.168.52.14 bigdata04xsync.sh /etc/hosts
scp -r /etc/hosts root@bigdata04:/etc/
(4)重新启动 bigdata03、bigdata04。
(5)修改 bigdata04 中 kafka 的 broker.id 为 3。
进入bigdata04的kafka中,修改里面的配置文件 config/server.properties
(6)删除 bigdata04 中 kafka 下的 datas 和 logs。
rm -rf datas/* logs/*
(7)启动 bigdata01、bigdata02、bigdata03 上的 kafka 集群。
先启动zk集群
xcall.sh zkServer.sh stop
xcall.sh zkServer.sh start
启动kafka集群(只能启动三台)
kf.sh start
(8)单独启动 bigdata04 中的 kafka。
bin/kafka-server-start.sh -daemon ./config/server.properties
查看kafka集群first主题的详情:
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --topic first --describe
发现副本数并没有增加。
由于我之前创建first这个主题的时候只有一个副本,不是三个副本,所以呢,演示效果不佳。
kafka-topics.sh --bootstrap-server bigdata01:9092 --topic third --create --partitions 3 --replication-factor 3
执行负载均衡操作
(1)在kafka下创建一个要均衡的主题
创建一个文件:vi topics-to-move.json
写上如下代码,如果多个topic 可以使用,分隔
{"topics": [{"topic": "third"}],"version": 1
}
(2)生成一个负载均衡的计划
在创建的时候,记得启动bigdata04节点,否则计划中还是没有bigdata04
bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2,3" --generate
未来的分区策略拷贝一份:
{"version":1,"partitions":[{"topic":"abc","partition":0,"replicas":[2,0,1],"log_dirs":["any","any","any"]},{"topic":"abc","partition":1,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"abc","partition":2,"replicas":[0,2,3],"log_dirs":["any","any","any"]}]}
(3)创建副本存储计划(所有副本存储在 broker0、broker1、broker2、broker3 中)。
vi increase-replication-factor.json
{"version":1,"partitions":[{"topic":"first","partition":0,"replicas":[3,2,0],"log_dirs":["any","any","any"]},{"topic":"first","partition":1,"replicas":[0,3,1],"log_dirs":["any","any","any"]},{"topic":"first","partition":2,"replicas":[1,0,2],"log_dirs":["any","any","any"]}]}
以上这个内容来自于第二步的执行计划。
(4)执行副本存储计划。
bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --reassignment-json-file increase-replication-factor.json --execute
(5)验证副本存储计划。
bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --reassignment-json-file increase-replication-factor.json --verify
如果不相信添加成功,可以查看first节点的详情:
(二)退役旧节点
执行负载均衡操作
先按照退役一台节点,生成执行计划,然后按照服役时操作流程执行负载均衡。
(1)创建一个要均衡的主题
kafka下添加文件:vim topics-to-move.json
添加如下内容:
{"topics": [{"topic": "abc"}],"version": 1
}
(2)创建执行计划。
bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --topics-to-move-json-file topics-to-move.json --broker-list "0,1,2" --generate
(3)创建副本存储计划(所有副本存储在 broker0、broker1、broker2 中)。
添加文件: vi increase-replication-factor.json
添加如下代码:
{"version":1,"partitions":[{"topic":"first","partition":0,"replicas":[0,2,1],"log_dirs":["any","any","any"]},{"topic":"first","partition":1,"replicas":[1,0,2],"log_dirs":["any","any","any"]},{"topic":"first","partition":2,"replicas":[2,1,0],"log_dirs":["any","any","any"]}]}
(4)执行副本存储计划
bin/kafka-reassign-partitions.sh --bootstrap-server hadoop11:9092 --reassignment-json-file increase-replication-factor.json --execute
(5)验证副本存储计划。
bin/kafka-reassign-partitions.sh --bootstrap-server hadoop11:9092 --reassignment-json-file increase-replication-factor.json --verify
执行停止命令
在要退役的节点(如bigdata04
)上执行bin/kafka-server-stop.sh
命令停止 Kafka 服务。
三、Kafka 副本
(一)副本基本信息
(1)Kafka 副本作用:提高数据可靠性。
(2)Kafka 默认副本 1 个,生产环境一般配置为 2 个,保证数据可靠性;太多副本会增加磁盘存储空间,增加网络上数据传输,降低效率。
(3)Kafka 中副本分为:Leader 和 Follower。Kafka 生产者只会把数据发往 Leader, 然后 Follower 找 Leader 进行同步数据。
(4)Kafka 分区中的所有副本(包含Leader)统称为 AR(Assigned Repllicas)。
AR = ISR + OSR
ISR,表示和 Leader 保持同步的 Follower 集合。如果 Follower 长时间未向 Leader 发送通信请求或同步数据,则该 Follower 将被踢出 ISR。该时间阈值由 replica.lag.time.max.ms 参数设定,默认 30s。Leader 发生故障之后,就会从 ISR 中选举新的 Leader。
OSR,表示 Follower 与 Leader 副本同步时,延迟过多的副本.
(二)Leader 选举流程
Kafka 集群中有一个 Broker 的 Controller 会被选举为 Controller Leader,负责管理集群 Broker 的上下线、所有 topic 的分区副本分配和 Leader 选举等工作,其信息同步依赖于 Zookeeper。例如,创建一个新的 topic(如bigdata2401
),设置 4 个分区和 4 个副本,通过停止某些节点上的 Kafka 进程,可以观察到 Leader 的选举是按照 AR 进行的,而不是 ISR。
(1)创建一个新的 topic,4 个分区,4 个副本
bin/kafka-topics.sh --bootstrap-server hadoop11:9092 --create --topic bigdata2401 --partitions 4 --replication-factor 4
(2)查看 Leader 分布情况
(3)停止掉 hadoop13 的 kafka 进程,并查看 Leader 分区情况
bin/kafka-server-stop.shbin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe
--topic bigdata2305
(4)停止掉 hadoop14 的 kafka 进程,并查看 Leader 分区情况
通过以上演示,大家可以发现,选举是按照AR(跟Replicas一样)进行的,而不是ISR
(三)Leader 和 Follower 故障处理细节
LEO演示-- 每一个副本最后的偏移量offset + 1
HW(高水位线 High Water) 演示:所有副本中,最小的LEO
由于数据同步的时候先进入Leader,随后同步给Follower,假如Follower挂掉了,Leader和其他的Follower 继续往前存储数据,挂掉的节点从ISR集合中剔除,此时挂掉的Follower又重启了,它会先从上一次挂掉的节点的HW开始同步数据,直到追上最后一个Follower为止,此时会重新回归ISR。
(四)分区副本分配
如果 Kafka 服务器只有有限的节点数,在创建 topic 时,分区数和副本数的设置需要合理。例如,创建 16 分区、3 个副本的second
主题,Kafka 在初始化时会按照特定算法选举第一 Leader,保障 Leader 不在一个 Broker 里面。
1)创建 16 分区,3 个副本
(1)创建一个新的 topic,名称为 second。
bin/kafka-topics.sh --bootstrap-server hadoop11:9092 --create --partitions 16 --replication-factor 3 --topic second
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --topic bigdata230801 --partitions 3 --replication-factor 4
假如你有3个broker ,却创建4个副本,报错!!Error while executing topic command : Replication factor: 4 larger than available brokers: 3.
[2023-09-13 18:43:47,458] ERRORorg.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 4 larger than available brokers: 3
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --topic bigdata23 --partitions 4 --replication-factor 2
假如你有3个broker ,却创建4个分区,是可以的。
以上错误的意思是,目前只有2台服务器,却要创建3个副本,创建不了。
(2)查看分区和副本情况
bin/kafka-topics.sh --bootstrap-server hadoop102:9092 --describe --topic second
kafka在进行初始化的时候,选举谁当第一Leader,是有一定的算法的。算法保障了Leader不在一个broker里面。
(五)生产经验 —— 手动调整分区副本的存储
在生产环境中,由于服务器配置和性能差异,可能需要手动调整分区副本的存储。例如,创建three
主题,4 个分区、2 个副本,并将其所有副本存储到broker0
和broker1
两台服务器上。通过创建副本存储计划并执行kafka-reassign-partitions.sh
命令来实现。
(1)创建一个新的 topic,名称为 three。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --partitions 4 --replication-factor 2 --topic three
(2)查看分区副本存储情况。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe --topic three
(3)创建副本存储计划(所有副本都指定存储在 broker0、broker1 中)。
vi increase-replication-factor.json
输入如下内容:
{ "version":1, "partitions":[{"topic":"three","partition":0,"replicas":[0,1]}, {"topic":"three","partition":1,"replicas":[0,1]}, {"topic":"three","partition":2,"replicas":[1,0]}, {"topic":"three","partition":3,"replicas":[1,0]}]
}
(4)执行副本存储计划。
bin/kafka-reassign-partitions.sh --bootstrap-server bigdata01:9092 --reassignment-json-file increase-replication-factor.json --execute
(5)验证副本存储计划。
bin/kafka-reassign-partitions.sh -- bootstrap-server bigdata01:9092 --reassignment-json-file increase-replication-factor.json --verify
(6)查看分区副本存储情况
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --describe --topic three
(六)生产经验 ——Leader Partition 负载平衡
Kafka 通常会自动将 Leader Partition 均匀分散在各个机器上,但在某些 Broker 宕机后可能导致负载不均衡。相关参数如auto.leader.rebalance.enable
(默认是true
)、leader.imbalance.per.broker.percentage
(默认是 10%)和leader.imbalance.check.interval.seconds
(默认值 300 秒)控制着 Leader Partition 的平衡机制。在生产环境中,auto.leader.rebalance.enable
常被修改为false
以避免资源浪费。
(七)生产经验 —— 增加副本因子
在生产环境中,若某个主题重要性提升,可能需要增加副本。例如创建four
主题,初始副本数为 1,之后通过手动创建副本存储计划并执行kafka-reassign-partitions.sh
命令来增加副本。需要注意的是,副本创建后不能直接通过命令修改,只能通过这种手动计划的方式增加。
1)创建 topic
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --create --partitions 3 --replication-factor 1 --topic four
通过命令行修改副本是否成功?
分区是可以通过语句修改的,只能改多,不能改少,副本创建以后就不能直接修改了。
bin/kafka-topics.sh --bootstrap-server bigdata01:9092 --alter --partitions 3 --replication-factor 3 --topic four
没办法使用命令修改的。
2)手动增加副本存储
通过命令查看副本情况
(1)创建副本存储计划(所有副本都指定存储在 broker0、broker1、broker2 中)。
vi increase-replication-factor.json
添加如下内容:
{"version":1,"partitions":[{"topic":"four","partition":0,"replicas":[0,1,2]},{"topic":"four","partition":1,"replicas":[0,1,2]},{"topic":"four","partition":2,"replicas":[0,1,2]}]}
(2)执行副本存储计划。
bin/kafka-reassign-partitions.sh --bootstrap-server hadoop11:9092 --reassignment-json-file increase-replication-factor.json --execute
查看副本情况:
四、文件存储
(一)文件存储机制
Topic 数据存储
Topic 是逻辑概念,partition 是物理概念,每个 partition 对应一个log
文件,Producer 生产的数据追加到log
文件末端。为防止log
文件过大导致数据定位效率低下,Kafka 采用分片和索引机制,将每个 partition 分为多个 segment,每个 segment 包括.index
文件、.log
文件和.timeindex
等文件,这些文件位于以topic名称+分区序号
命名的文件夹下,如first - 0
。
数据位置查找
启动生产者发送消息后,可以在/opt/installs/kafka3/datas/
下对应主题分区文件夹中查看相关文件。直接查看log
日志可能是乱码,可通过kafka-run-class.sh kafka.tools.DumpLogSegments
命令查看index
和log
信息。Kafka 使用稀疏索引,这使得数据读取速度较快。
(二)文件清理策略
delete 日志删除
Kafka 中默认的日志(即 Segment)保存时间为 7 天,可通过log.retention.hours
(最低优先级小时,默认 7 天)、log.retention.minutes
(分钟,设置后小时设置不起作用)、log.retention.ms
(最高优先级毫秒,设置后分钟设置不起作用)等参数修改保存时间。log.retention.check.interval.ms
负责设置检查周期,默认 5 分钟。
delete 日志删除策略有基于时间(默认打开,以 segment 中所有记录中的最大时间戳作为该文件时间戳)和基于大小(默认关闭,超过设置的所有日志总大小,删除最早的 segment,log.retention.bytes
默认等于 - 1,表示无穷大)两种方式。若一个 segment 中有部分数据过期,部分未过期,基于时间的删除策略会根据最大时间戳判断整个 segment 是否过期。
compact 日志压缩
log.cleanup.policy = compact
启用压缩策略,对于相同 key 的不同 value 值,只保留最后一个版本。压缩后的 offset 可能不连续,这种策略适用于特殊场景,如消息的 key 是用户 ID,value 是用户资料等。
五、高效读写数据
分区技术与并行度
Kafka 本身是分布式集群,采用分区技术,提高了并行度,能够同时处理多个分区的数据,从而提升整体性能。
稀疏索引与快速定位
读数据采用稀疏索引,可以快速定位要消费的数据。与 MySQL 中索引过多会影响写入速度不同,Kafka 的稀疏索引在保证快速定位数据的同时,不会对写入性能造成过大影响。
顺序写磁盘
Kafka 的 Producer 生产数据时,写入log
文件的过程是顺序写,即一直追加到文件末端。由于磁盘的机械结构特点,顺序写能大幅提高写入速度,官网数据表明,同样的磁盘,顺序写能达到 600M/s,而随机写只有 100K/s。
页缓存 + 零拷贝技术
零拷贝技术使得 Kafka 的数据加工处理操作交由生产者和消费者处理,Kafka Broker 应用层不关心存储的数据,无需经过应用层,提高了传输效率。
PageCache 页缓存功能被 Kafka 重度依赖。当有写操作时,操作系统将数据写入 PageCache;读操作时,先从 PageCache 中查找,找不到再从磁盘读取。这相当于将空闲内存作为磁盘缓存使用,进一步提升了读写性能。
六、总结
本文全面深入地探讨了 Kafka Broker 的各个方面,包括其工作流程、节点管理、副本机制、文件存储以及高效读写数据的原理和生产环境中的应用经验。理解这些知识对于在大数据项目中正确使用和优化 Kafka 具有极为重要的意义。无论是在构建实时数据处理管道还是大规模数据存储系统时,Kafka 的这些特性都能为我们提供可靠、高效的解决方案。在实际应用中,我们需要根据具体的业务需求和硬件环境,合理配置 Kafka 的各项参数,以充分发挥其优势,应对复杂的数据处理挑战。
相关文章:
Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
Kafka:分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析:…...
基于 Flink 的车辆超速监测与数据存储的小实战
基于 Flink 的车辆超速监测与数据存储的小实战 一、实战背景与目标 在智能交通管理领域,实时监控车辆行驶速度并精准识别超速行为对于保障道路交通安全和维护交通秩序具有至关重要的意义。本项目旨在构建一个高效的数据处理系统,能够从 Kafka 的 topic…...
Shell 脚本基础(7):重定向详解
内容预览 ≧∀≦ゞ Shell 脚本基础(7):重定向详解声明1. 重定向基础概念1.1 输出重定向(> 和 >>)覆盖写入(>)追加写入(>>)输出到终端和文件࿰…...
04. 流程控制
一、流程控制 流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为:顺序结构,分支结构(或称选择结构),循环结构。 顺序结构:程序自上到下执行,中间没有任何判断和跳转&…...
基于卡尔曼滤波器的 PID 控制
基于卡尔曼滤波器的PID控制算法结合了经典控制理论和现代信号处理技术。卡尔曼滤波器(Kalman Filter, KF)可以对噪声数据进行平滑处理,从而改善PID控制器的性能,特别是在处理具有噪声和不确定性的系统时。以下是详细的设计过程&am…...
基于信创环境的信息化系统运行监控及运维需求及策略
随着信息技术的快速发展和国家对信息安全的日益重视,信创环境(信息技术应用创新环境)的建设已成为行业发展的重要趋势。本指南旨在为运维团队在基于信创环境的系统建设及运维过程中提供参考,确保项目顺利实施并满足各项技术指标和…...
leetCode 283.移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出:…...
Kali Linux语言设置成中文
要将Kali Linux设置成中国地区(简体中文),可以按照以下步骤进行操作: 一、更新软件包列表 打开Kali Linux的终端。 输入以下命令来更新软件包列表: sudo apt-get update 二、安装语言包(如果有就不用安装了…...
c#窗体列表框(combobox)应用——省市区列表选择实例
效果如下: designer.cs代码如下: using System.Collections.Generic;namespace 删除 {public partial class 省市区选择{private Dictionary<string, List<string>> provinceCityDictionary;private Dictionary<string,List<string&…...
kali中信息收集的一些常用工具
这里只是代表个人所见,所以肯定会有其他的没提到,希望大家体谅 前言 信息收集分为主动和被动的 主动就是通过自己的机器去和对方比如通信后获得的数据 被动是指不是在自己这里获取的,可以是第三方平台获取到的,与目标没有通信 …...
【CS61A 2024秋】Python入门课,全过程记录P2(Week3开始,更新中2024/11/24)
文章目录 关于基本介绍👋Week 3Mon Environments阅读材料Lab 02: Higher-Order Functions, Lambda ExpressionsQ1: WWPD: The Truth Will PrevailQ2: WWPD: Higher-Order FunctionsQ3: WWPD: Lambda 关于 个人博客,里面偶尔更新,最近比较忙。…...
python学习笔记(8)算法(1)数组
一、数组 数组是存储于一个连续空间且具有相同数据类型的元素集合。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号…...
C++(进阶) 第1章 继承
C(进阶) 第1章 继承 文章目录 前言一、继承1.什么是继承2.继承的使用 二、继承方式1.private成员变量的(3种继承方式)继承2. private继承方式3.继承基类成员访问⽅式的变化 三、基类和派生类间的转换1.切片 四、 继承中的作⽤域1.隐藏规则&am…...
【Linux | 计网】TCP协议详解:从定义到连接管理机制
目录 1.TCP协议的定义: 2.TCP 协议段格式 3.TCP两种通信方式 4.确认应答(ACK)机制 解决“后发先至”问题 5.超时重传机制 那么, 超时的时间如何确定? 6.连接管理机制: 6.1.三次握手: 为什么需要3次握手,一次两次不行吗…...
SElinux学习
一、SElinux简介 SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux,传统的访问控制在我们开启权限后,系统进程可以直接访问.当我们对权限设置不严谨时,这种访问方式就是系统的安全漏洞。 所以在开启SElinux后 会…...
Spark核心组件解析:Executor、RDD与缓存优化
Spark核心组件解析:Executor、RDD与缓存优化 Spark Executor Executor 是 Spark 中用于执行任务(task)的执行单元,运行在 worker 上,但并不等同于 worker。实际上,Executor 是一组计算资源(如…...
阿里云cdn配置记录和nodejs手动安装
cdn 登录阿里云 域名解析权限 开启cdn,接引导流程, 源可以设置 域名或者ip等 配置好域名解析 上传https证书 图片不显示,后端开发需要配置 回源配置的回源协议 ,配置跟随客服端【如果浏览器多次重定向错误,客服或者改…...
【实战】基于urllib和BeautifulSoup爬取jsp网站的数据
文章目录 前言目标网站分析目标网页爬取数据解析导出数据其他问题处理分页检索及多关键字搜索去重cookie问题工具封装经验总结前言 网络数据爬取大致分为两类: 静态爬取:该种方式针对那种架构比较老的网站,使用模版方式,通过浏览器F12只能找到静态页面,找不到返回json数…...
cpp-httplib 框架
cpp-httplib 概述 主要特点 单文件库:cpp-httplib 是一个单文件头文件库,易于集成到现有项目中。你只需将 httplib.h 包含到项目中即可开始使用支持 HTTP 客户端和服务器:它不仅支持作为 HTTP 客户端发送请求,也支持构建 HTTP 服…...
GEE 案例——TVDI(Temperature Vegetation Dryness Index)指数
目录 简介 方法论 代码解释 函数 案例代码 单景影像的TVDI 影像集合批量计算TVDI 引用 结果 简介 本文中代码包含两个可用于计算 TVDI 的主要函数。其中一个函数用于仅根据一幅 NDVI 和一幅 LST 图像生成 TVDI(singleTVDI),另一个函数用于为多幅 NDVI 和多幅 LST …...
Java语言程序设计 选填题知识点总结
第一章 javac.exe是JDK提供的编译器public static void main (String args[])是Java应用程序主类中正确的main方法Java源文件是由若干个书写形式互相独立的类组成的Java语言的名字是印度尼西亚一个盛产咖啡的岛名Java源文件中可以有一个或多个类Java源文件的扩展名是.java如果…...
基于Springboot+Vue社区养老服务管理系统(源码+lw+讲解部署+PPT)
前言 详细视频演示 论文参考 系统介绍 系统概述 核心功能 用户角色与功能 具体实现截图 1. 服务信息查看功能 主要代码实现 截图: 2. 服务申请功能 主要代码实现 截图: 3. 公告信息查看功能 主要代码实现 截图: 4. 服务信息…...
Linux基本指令的使用
当然可以!以下是一些常用的Linux指令及其示例: 1. ls 列出目录内容。 ls 显示当前目录下的文件和文件夹。 ls -l 以详细格式列出文件和文件夹的信息(如权限、拥有者、大小等)。 2. cd 改变当前目录。 cd /path/to/dire…...
Momenta C++面试题及参考答案
vtable 的创建时机 在 C 中,vtable(虚函数表)是在编译阶段创建的。当一个类包含虚函数时,编译器会为这个类生成一个 vtable。vtable 本质上是一个函数指针数组,其中每个元素指向一个虚函数的实现。这个表的布局是由编译…...
AI 在软件开发流程中的优势、挑战及应对策略
AI 在软件开发流程中的优势、挑战及应对策略 随着人工智能技术的飞速发展,AI大模型正在逐步渗透到软件开发的各个环节,从代码自动生成到智能测试,AI的应用正在重塑传统的软件开发流程。本篇文章将分析AI在软件开发流程中带来的优势࿰…...
langchain runnable
LangChain 文档详细解析 LangChain 是一个用于构建与语言模型(如GPT-4)交互的框架。本文档介绍了LangChain v0.1版本中的Runnable接口及其相关功能。 目录 Runnable接口输入和输出模式使用示例异步方法事件流并行处理 1. Runnable接口 为了简化自定义…...
nginx配置不缓存资源
方法1 location / {index index.html index.htm;add_header Cache-Control no-cache,no-store;try_files $uri $uri/ /index.html;#include mime.types;if ($request_filename ~* .*\.(htm|html)$) {add_header Cache-Control "private, no-store, no-cache, must-revali…...
Linux系统程序设计--4.进程
程序与进程 内核中的进程结构 task_struct(进程表项和进程控制块) 位于/usr/src/linux-headers-4.15.0-213-generic/include/linux/sched.h C程序启动过程 进程终止方式 进程终止函数 atexit 小案例 #include<stdio.h> #include<string.h> #include<stdlib…...
springboot/ssm网购平台管理系统Java在线购物商城管理平台web电商源码
springboot/ssm网购平台管理系统Java在线购物商城管理平台web电商源码 基于springboot(可改ssm)vue项目 开发语言:Java 框架:springboot/可改ssm vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库&…...
2024年Android面试总结
2024年Android面试总结 1.动画类型有哪些?插值器原理? 2.StringBuffer和StringBuilder区别? 3.jvm内存模型? 4.线程池7大核心参数及原理? 5.Android多进程通信方式有哪些?各自的优缺点? 6…...
UE5 slate BlankProgram独立程序系列
源码版Engine\Source\Programs\中copy BlankProgram文件夹,重命名为ASlateLearning,修改所有文件命名及内部名称。 ASlateLearning.Target.cs // Copyright Epic Games, Inc. All Rights Reserved.using UnrealBuildTool; using System.Collections.Ge…...
小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你
说在前面 之前我们体验过妙享中心,里面就有互联互通的全部能力,现在有了小米电脑管家,老款的笔记本竟然用不了,也可以理解,毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁,至于其他品牌的winPC小米…...
家庭智慧工程师:如何通过科技提升家居生活质量
在今天的数字化时代,家居生活已经不再只是简单的“住”的地方。随着物联网(IoT)、人工智能(AI)以及自动化技术的快速发展,越来越多的家庭开始拥抱智慧家居技术,将他们的家变得更加智能化、便捷和…...
云计算-华为HCIA-学习笔记
笔者今年7月底考取了华为云计算方向的HCIE认证,回顾从IA到IE的学习和项目实战,想整合和分享自己的学习历程,欢迎志同道合的朋友们一起讨论! 第二章:服务器基础 服务器是什么? 服务器本质上就是个性能超强的…...
webgl threejs 云渲染(服务器渲染、后端渲染)解决方案
云渲染和流式传输共享三维模型场景 1、本地无需高端GPU设备即可提供三维项目渲染 云渲染和云流化媒体都可以让3D模型共享变得简单便捷。配备强大GPU的远程服务器早就可以处理密集的处理工作,而专有应用程序,用户也可以从任何个人设备查看全保真模型并与…...
【中间件】Redis
一、什么是Redis Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。内置…...
请结合给定资料中的具体事例,谈谈你对“海洋的污染将毁灭鱼儿的家园,但让人类不寒而栗的毁灭绝非仅此而已!”这句话的理解。(10分)
题目 【2010年国考省级以上(含副省级)申论真题】2.请结合给定资料中的具体事例,谈谈你对“海洋的污染将毁灭鱼儿的家园,但让人类不寒而栗的毁灭绝非仅此而已!”这句话的理解。(10分)…...
Java SE 与 Java EE:基础与进阶的探索之旅
在编程世界中,Java语言以其跨平台、面向对象、丰富的类库等特点,成为了众多开发者和企业的首选编程语言。而Java SE与Java EE,作为Java平台的两个重要组成部分,各自承载着不同的使命,同时又紧密相连,共同构…...
PH热榜 | 2024-11-24
DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. AutoFlow Studio 标语:借助简化的AI质检,更快发布产品,更聪明地进行测试。 介绍&…...
LLM 系列学习教程
LLM101 检查 Tokenizer 词表大小与 LLM 的 Embedding 和 LM_head 输入大小是否匹配对 SBert 进行训练、预测、评估使其进行相似度计算对 BERT 进行训练、预测、评估使其进行文本分类使用 CLIP 模型进行文本图像匹配对 JoinBERT 进行训练、预测使其进行对话意图和槽位联合识别对…...
基于yolov8、yolov5的茶叶等级检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
摘要:茶叶等级检测在茶叶生产、质量控制和市场销售中起着至关重要的作用,不仅能帮助相关部门实时监测茶叶质量,还为智能化检测系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的茶叶等级检测模型,该模…...
Excel求和如何过滤错误值
一、问题的提出 平时,我们在使用Excel时,最常用的功能就是求和了,一说到求和你可能想到用sum函数,但是如果sum的求和区域有#value #Div等错误值怎么办?如下图,记算C列中工资的总和。 直接用肯定会报错&…...
头文件包含
大家好,今天我们来聊聊头文件包含这方面的知识,并且在这里提出几个问题,头文件多次包含有什么影响吗?“”和〈〉这两种方式都能包含标准头文件吗? 一.文件包含 #include指令可以使另外一个文件被编译。就像它实际出现…...
37_U-Net网络详解
1.U-Net 网络概述 U-Net 是一种深度学习模型,广泛用于图像的语义分割任务。U-Net 网络的结构特别适合医学影像分割,尤其在少量训练数据的情况下表现优异。该网络由一个编码器-解码器架构组成,具有对称的“U”形结构,因此得名为 U…...
fastapi入门
好的,我将为您生成一个更详细、易于理解的 FastAPI 入门学习文档,特别是对复杂概念(如依赖注入)进行深入解释,帮助您在没有太多基础的情况下也能顺利学习和掌握 FastAPI。 FastAPI 入门学习文档 目录 简介环境搭建 2…...
RabbitMQ 之 死信队列
一、死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到 queue 里了,consumer 从 queue 取出消息进行…...
Android-如何实现Apng动画播放
01 Apng是什么 Apng(Animated Portable Network Graphics)顾名思义是基于 PNG 格式扩展的一种动画格式,增加了对动画图像的支持,同时加入了 24 位图像和8位 Alpha 透明度的支持,并且向下兼容 PNG。 Google封面图 02 A…...
微服务系统架构图
微服务架构是一种将单一应用程序开发为一组小型服务的架构风格。每个服务都在自己的进程中运行,它们之间采用轻量级的通信机制(如 HTTP/REST 或消息队列)进行相互协作。以下是关于微服务系统架构的简要介绍:一、核心特点独立部署 …...
04 —— Webpack打包CSS代码
加载器css-loader :解析css代码 webpack 中文文档 | webpack中文文档 | webpack中文网 加载器style-loader:把解析后的css代码插入到DOM style-loader | webpack 中文文档 | webpack中文文档 | webpack中文网 准备css代码,放到src/login目…...
【数据结构专栏】二叉搜索树(Binary Search Tree)的剖析?
文章目录 🧨前言1、二叉搜索树的基本概念?2、二叉搜索树的节点结构组成?3、二叉搜索树的插入操作?4、二叉搜索树的删除操作?5、二叉搜索树的遍历? 6、二叉搜索树的性能分析? 🎉完整代…...