# Kafka_深入探秘者(5):kafka 分区

Kafka_深入探秘者(5):kafka 分区

一、kafka 副本机制

1、Kafka 可以将主题划分为多个分区(Partition),会根据分区规则选择把消息存储到哪个分区中,只要如果分区规则设置的合理,那么所有的消息将会被均匀的分布到不同的分区中,这样就实现了负载均衡和水平扩展。另外,多个订阅者可以从一个或者多个分区中同时消费数据,以支撑海量数据处理能力。

2、由于 kafka 消息是以追加到分区中的,多个分区顺序写磁盘的总效率要比随机写内存还要高(引用 ApacheKafka-A High Throughput Distributed Messaging System 的观点),是 Kafka 高吞吐率的重要保证之一。

3、kafka 副本机制

  • 1)在由于 Producer 和 Consumer 都只会与 Leader 角色的分区副本相连,所以 kafka 需要以集群的组织形式提供主题下的消息高可用。kafka 支持主备复制,所以消息具备高可用和持久性。

  • 2)kafka 一个分区可以有多个副本,这些副本保存在不同的 broker 上。每个分区的副本中都会有一个作为 Leader。当一个 broker 失败时,Leader 在这台 broker 上的分区都会变得不可用,kafka 会自动移除 Leader,再其他副本中选一个作为新的 Leader。

  • 3)在通常情况下,增加分区可以提供 kafka 集群的吞吐量。然而,也应该意识到集群的总分区数或是单台服务器上的分区数过多,会增加不可用及延迟的风险。

kafka集群.png

二、kafka Leader 选举

1、Kafka 可以预见的是,如果某个分区的 Leader 挂了,那么其它跟随者将会进行选举产生一个新的 leader,之后所有的读写就会转移到这个新的 Leader 上,在 kafka 中,其不是采用常见的多数选举的方式进行副本的 Leader 选举,而是会在 Zookeeper 上针对每个 Topic 维护一个称为 ISR(in-syncreplica,已同步的副本)的集合,显然还有一些副本没有来得及同步。只有这个 ISR 列表里面的才有资格成为 leader (先使用ISR里面的第一个,如果不行依次类推,因为 ISR 里面的是同步副本,消息是最完整且各个节点都是一样的)。

2、kafka 通过 ISR,kafka 需要的冗余度较低,可以容忍的失败数比较高。假设某个 topic 有 f+1 个副本,kafka 可以容忍 f 个不可用,当然,如果全部 ISR 里面的副本都不可用,也可以选择其他可用的副本,只是存在数据的不一致。

3、Leader 选举随机示例图:

Leader选举随机示例图.png

三、kafka 分区重新分配 001

1、部署好的 Kafka 集群里面添加机器是最正常不过的需求,而且添加起来非常地方便,从已经部署好的 Kafka 节点中复制相应的配置文件,然后把里面的 brokerid 修改成全局唯一的,最后启动这个节点即可将它加入到现有 Kafka 集群中。

2、新添加的 Kafka 节点并不会自动地分配数据,所以无法分担集群的负载,除非我们新建一个 topic。 手动将部分分区移到新添加的 Kafka 节点上,Kafka 内部提供了相关的工具来重新分布某个 topic 的分区。

3、kafka 集群搭建:

3.1 拷贝三份 kafka_2.12-2.8.0 分别命名为:kafka-01, kafka-02, kafka-03

# 切换目录
cd /usr/local/kafka/# 拷贝三份 kafka_2.12-2.8.0 分别命名为:kafka-01, kafka-02, kafka-03
cp -rf kafka_2.12-2.8.0 ./kafka-01 
cp -rf kafka_2.12-2.8.0 ./kafka-02
cp -rf kafka_2.12-2.8.0 ./kafka-03
3.2 修改 kafka-01 的配置文件 kafka/kafka-01/config/server.properties

broker.id=0, log.dirs=/usr/local/kafka/kafka-01/logs, port=9092


# 切换目录
cd /usr/local/kafka/# 修改 kafka-01 的配置文件 kafka-01/config/server.properties
vim kafka-01/config/server.properties# 修改以下几个配置:broker.id=0 
log.dirs=/usr/local/kafka/kafka-01/logs 
# listeners=PLAINTEXT://localhost:9092
# host.name=localhost
# port=9092# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
listeners=PLAINTEXT://172.18.30.110:9092
3.3 修改 kafka-02 的配置文件 kafka/kafka-02/config/server.properties

broker.id=1, log.dirs=/usr/local/kafka/kafka-02/logs, port=9093


# 切换目录
cd /usr/local/kafka/# 修改 kafka-02 的配置文件 kafka-02/config/server.properties
vim kafka-02/config/server.properties# 修改以下几个配置:broker.id=1 
log.dirs=/usr/local/kafka/kafka-02/logs 
# listeners=PLAINTEXT://localhost:9093
# host.name=localhost
# port=9093# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
listeners=PLAINTEXT://172.18.30.110:9093
3.4 修改 kafka-03 的配置文件 kafka/kafka-03/config/server.properties

broker.id=2, log.dirs=/usr/local/kafka/kafka-03/logs, port=9094


# 切换目录
cd /usr/local/kafka/# 修改 kafka-03 的配置文件 kafka-03/config/server.properties
vim kafka-03/config/server.properties# 修改以下几个配置:broker.id=2 
log.dirs=/usr/local/kafka/kafka-03/logs 
# listeners=PLAINTEXT://localhost:9094
# host.name=localhost
# port=9094# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
listeners=PLAINTEXT://172.18.30.110:9094
3.5 删除 kafka 三个节点 kafka-01, kafka-02, kafka-03 以前的日志文件。

删除命令:rm -rf logs/*


# 切换目录
cd /usr/local/kafka/# 删除 节点1:kafka-01 以前的日志文件
rm -rf kafka-01/logs/* # 删除 节点2:kafka-02 以前的日志文件
rm -rf kafka-02/logs/* # 删除 节点3:kafka-03 以前的日志文件
rm -rf kafka-03/logs/* 
3.6 启动 kafka 三个节点 kafka-01, kafka-02, kafka-03

启动命令:bin/kafka-server-start.sh config/server.properties


# 切换目录
cd /usr/local/kafka/# 启动 节点1:kafka-01
kafka-01/bin/kafka-server-start.sh kafka-01/config/server.properties# 启动 节点2:kafka-02 
kafka-02/bin/kafka-server-start.sh kafka-02/config/server.properties# 启动 节点3:kafka-03 
kafka-03/bin/kafka-server-start.sh kafka-03/config/server.properties

四、kafka 分区重新分配 002

1、Kafka 创建一个有3个节点的集群(3个分区,3个副本)

创建命令:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic heima-par --partitions 3 --replication-factor 3


# 切换目录
cd /usr/local/kafka/# 创建集群
kafka-01/bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic heima-par --partitions 3 --replication-factor 3# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-topics.sh --create --zookeeper 172.18.30.110:2181 --topic heima-par --partitions 3 --replication-factor 3# 查看新创建的主题 heima-par 的详细信息
kafka-01/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic heima-par

在这里插入图片描述

2、为新创建的主题 heima-par 添加一个分区

添加分区命令:
bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic heima-par --partitions 4


# 切换目录
cd /usr/local/kafka/# 创建集群
kafka-01/bin/kafka-topics.sh --alter --zookeeper localhost:2181 --topic heima-par --partitions 4# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-topics.sh --alter --zookeeper 172.18.30.110:2181 --topic heima-par --partitions 4# 查看新创建的主题 heima-par 的详细信息
kafka-01/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic heima-par# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-topics.sh --describe --zookeeper 172.18.30.110:2181 --topic heima-par

在这里插入图片描述

3、添加一个 brokder 节点

添加 brokder 节点 命令:
cp -rf kafka-01 ./kafka-04


# 切换目录
cd /usr/local/kafka/# 添加 brokder 节点
cp -rf kafka-01 ./kafka-04

在这里插入图片描述

4、修改 节点 kafka-04 的配置文件 kafka/kafka-04/config/server.properties

broker.id=3, log.dirs=/usr/local/kafka/kafka-04/logs, port=9095


# 切换目录
cd /usr/local/kafka/# 修改 kafka-04 的配置文件 kafka-04/config/server.properties
vim kafka-04/config/server.properties# 修改以下几个配置:broker.id=3 
log.dirs=/usr/local/kafka/kafka-04/logs 
# listeners=PLAINTEXT://localhost:9095
# host.name=localhost
# port=9095# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
listeners=PLAINTEXT://172.18.30.110:9095

在这里插入图片描述

5、删除 kafka 4个节点 kafka-01, kafka-02, kafka-03, kafka-04 以前的日志文件。

删除命令:rm -rf logs/*


# 切换目录
cd /usr/local/kafka/# 删除 节点1:kafka-01 以前的日志文件
rm -rf kafka-01/logs/* # 删除 节点2:kafka-02 以前的日志文件
rm -rf kafka-02/logs/* # 删除 节点3:kafka-03 以前的日志文件
rm -rf kafka-03/logs/* # 删除 节点4:kafka-04 以前的日志文件
rm -rf kafka-04/logs/* 
6 启动 kafka 4个节点 kafka-01, kafka-02, kafka-03, kafka-04

启动命令:bin/kafka-server-start.sh config/server.properties


# 切换目录
cd /usr/local/kafka/# 启动 节点1:kafka-01
kafka-01/bin/kafka-server-start.sh kafka-01/config/server.properties# 启动 节点2:kafka-02 
kafka-02/bin/kafka-server-start.sh kafka-02/config/server.properties# 启动 节点3:kafka-03 
kafka-03/bin/kafka-server-start.sh kafka-03/config/server.properties# 启动 节点4:kafka-04 
kafka-04/bin/kafka-server-start.sh kafka-04/config/server.properties

7、再次查看新创建的主题 heima-par 的详细信息,发现输出信息中新添加的节点4并没有分配之前主题的分区。


# 切换目录
cd /usr/local/kafka/# 查看新创建的主题 heima-par 的详细信息
kafka-01/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic heima-par# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-topics.sh --describe --zookeeper 172.18.30.110:2181 --topic heima-par

在这里插入图片描述

五、kafka 分区重新分配 003

将原先分布在 broker 1-3 节点上的分区重新分布到 broker 1-4 节点上,需要借助 kafka-reassign-partitions.sh 工具生成 reassign plan ,

1、定义一个 reassign.json 文件,说明哪些 topic 需要重新分区,文件内容如下:


# 切换目录
cd /usr/local/kafka/# 定义一个 reassign.json 文件
vim kafka-01/reassign.json# 文件内容如下{"topics":[{"topic":"heima-par"}],
"version":1
}

2、使用 kafka-reassign-partitions.sh 工具生成 reassign plan

命令:
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file reassign.json --broker-list “0,1,2,3” --generate

命令参数说明:
-generate :表示指定类型参数。
–topics-to-move-json-file : 指定分区重份配对应的主题清单路径。


# 切换目录
cd /usr/local/kafka/# 使用 kafka-reassign-partitions.sh 工具生成 reassign plan
kafka-01/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --topics-to-move-json-file kafka-01/reassign.json --broker-list "0,1,2,3" --generate# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-reassign-partitions.sh --zookeeper 172.18.30.110:2181 --topics-to-move-json-file kafka-01/reassign.json --broker-list "0,1,2,3" --generate# 执行完命令会生成2个字符串。
Current partition replica assignment
{"version":1,"partitions":[{"topic":"heima-par","partition":0,"replicas":[0,2,1],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":1,"replicas":[1,0,2],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":2,"replicas":[2,1,0],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":3,"replicas":[0,2,1],"log_dirs":["any","any","any"]}]}Proposed partition reassignment configuration
{"version":1,"partitions":[{"topic":"heima-par","partition":0,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":1,"replicas":[0,2,3],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":2,"replicas":[1,3,0],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":3,"replicas":[2,0,1],"log_dirs":["any","any","any"]}]}

在这里插入图片描述

3、重新分配 JSON 文件,创建 result.json 文件,保存 JSON 内容。

注意:第二步命令输出两个 json 字符串,第一个 JSON 内容为当前的分区副本分配情况,第二个为重新分配的候选方案,注意这里只是生成一份可行性的方案,并没有真正执行重分配的动作。

我们将第二个 JSON 内容保存到名为 result.json 文件里面(文件名不重要,文件格式也不一定要以json为结尾,只要保证内容是 json 即可),然后执行这些 reassign plan:

# 切换目录
cd /usr/local/kafka/# 创建并编辑 result.json 文件。
vim kafka-01/result.json## 粘贴以下内容:{"version":1,"partitions":[{"topic":"heima-par","partition":0,"replicas":[3,1,2],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":1,"replicas":[0,2,3],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":2,"replicas":[1,3,0],"log_dirs":["any","any","any"]},{"topic":"heima-par","partition":3,"replicas":[2,0,1],"log_dirs":["any","any","any"]}]}

4、执行分配策略,并查看执行进度。

命令:
bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file result.json --execute

命令参数说明:
–execute :执行命令。
–reassignment-json-file : 指定分区重分配 json 文件。


# 切换目录
cd /usr/local/kafka/# 使用 kafka-reassign-partitions.sh 工具生成 reassign plan
kafka-01/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file kafka-01/result.json --execute# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-reassign-partitions.sh --zookeeper 172.18.30.110:2181 --reassignment-json-file kafka-01/result.json --execute# 查看执行进度
kafka-01/bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file kafka-01/result.json --verify# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-reassign-partitions.sh --zookeeper 172.18.30.110:2181 --reassignment-json-file kafka-01/result.json --verify# 查看新创建的主题 heima-par 的详细信息
kafka-01/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic heima-par# 或者把 localhost 换成 填写你的 虚拟机 IP 地址(如:172.18.30.110):
kafka-01/bin/kafka-topics.sh --describe --zookeeper 172.18.30.110:2181 --topic heima-par

在这里插入图片描述

六、kafka 分区分配策略

1、### 1、按照 Kafka 默认的消费逻辑设定,一个分区只能被同一个消费组 (ConsumerGroup) 内的一个消费者消费。假设目前某消费组内只有一个消费者 C0,订阅了一个 topic,这个 topic 包含 7 个分区,也就是说这个消费者 C0 订阅了 7 个分区,参考下图1

2、此时消费组内又加入了一个新的消费者 C1,按照既定的逻辑需要将原来消费者 C0 的部分分区分配给消费者 C1 消费,情形如图(2),消费者 C0 和 C1 各自负责消费所分配到的分区,相互之间并无实质性的干扰。

kafka分区分配策略1.png

3、RangeAssignor 策略的原理

RangeAssignor 策略的原理是按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将分区按照跨度进行平均分配,以保证分区尽可能均匀地分配给所有的消费者。对于每一个 topic,RangeAssignor 策略会将消费组内所有订阅这个 topic 的消费者按照名称的字典序排序,然后为每个消费者划分固定的分区范围,如果不够平均分配,那么字典序靠前的消费者会被多分配一个分区。

4、RoundRobinAssignor 策略的原理

RoundRobinAssignor 策略的原理是将消费组内所有消费者以及消费者所订阅的所有 topic 的 partition 按照字典序排序,然后通过轮询方式逐个将分区以此分配给每个消费者。RoundRobinAssignor 策略对应的 partition.assignment.strategy 参数值为: org.apache.kafka.clients.consumer.RoundRobinAssignor。

上一节关联链接请点击

# Kafka_深入探秘者(4):kafka 主题 topic

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

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

相关文章

FastDFS部署

版本介绍 安装fastdfs共需要俩个安装包 fastdfs-5.05.tar.gz libfastcommon-1.0.7.tar.gz编译安装 libfastcommon tar -xvf libfastcommon-1.0.7.tar.gz cd libfastcommon-1.0.7 make.sh make.sh install 3. 设置软链接 libfastcommon.so默认安装到了/usr/lib64/libfastcommon.…

笔记-Python文件: .py、.ipynb、.pyi、.pyc、​.pyd

.py 最常见的Python代码文件后缀名,官方称Python源代码文件。 不用过多解释了~ .ipynb 这个还是比较常见的,.ipynb是Jupyter Notebook文件的扩展名,它代表"IPython Notebook"。 学过数据分析,机器学习,深度…

暑假假期规划 离不开宝藏待办计划管理工具

暑假来临,两个月的自由时间,如何过得充实而有意义,成了我最近思考的问题。毕竟,一个合理的假期规划,不仅能让我的假期生活更加丰富多彩,还能为新学期的到来做好充分的准备。 我幻想着在这个暑假里&#xf…

CSS|04 复合选择器伪类选择器属性选择器美化超链接

基本选择器:见上篇基本选择器 复合选择器选择器1,选择器2{属性:值;} 多元素选择器,同时匹配选择器1和选择器2,多个选择器之间用逗号分隔举例: p,h1,h2{margin:0px;}E F{属性:值;} 后代元素选择器,匹配所有属于E元素后…

塑造卓越企业家IP:多维度视角下的策略解析

在构建和塑造企业家IP的过程中,我们需要从多个维度进行考量,以确保个人品牌能够全面、立体地展现企业家的独特魅力和价值。以下是从不同角度探讨如何做好一个企业家IP的策略。 一、从个人特质出发 深入了解自我:企业家需要清晰地认识到自己的…

Laravel 谨慎使用Storage::append()

在 driver 为 local 时,Storage::append()在高并发下,会存在丢失数据问题,文件被覆写,而非尾部添加,如果明确是本地文件操作,像日志写入,建议使用 Illuminate\Filesystem\Filesystem或者php原生…

Rust: duckdb和polars读csv文件比较

duckdb在数据分析上,有非常多不错的特质。1、快;2、客户体验好,特别是可以同时批量读csv(在一个目录下的csv等文件)。polars的性能比pandas有非常多的超越。但背后的一些基于arrow的技术栈有很多相同之类。今天想比较一…

Python 算法交易实验75 QTV200后续想法梳理

说明 在第一步获取数据源,然后进入Mongo(第一个数据节点)开始,QTV200的数据流体系就开始动了。后续用多少时间完成不太好确定,短则数周,长则数月。毕竟有过第一版实验的基础,应该还是可以做到的。 下面就是天马行空&…

浅谈人工智能发展趋势

第三次浪潮 人类科技发展的主线正沿着“能源”和“新型”展开。AI的尽头是光伏和储能。 如今我们正在经历第三次浪潮——信息文明。 社会生产力 劳动对象 劳动工具 劳动者 生产要素 农业文明铜器铁器 材料 人力工具 农民 土地人力 工业文明机车电力 材料动力 动力…

如何使用命令提示符查询电脑相关序列号等信息的操作方法

如何使用命令提示符查询硬盘的序列号? 如果出于保修或其他目的,你想知道硬盘驱动器的序列号,你不想使用第三方应用程序,或者如果你更喜欢命令行方法,则可以使用带有命令提示符的命令来显示硬盘驱动器的序列号。 1. 按…

# 音频处理4_傅里叶变换

1.离散傅里叶变换 对于离散时域信号 x[n]使用离散傅里叶变换(Discrete Fourier Transform, DFT)进行频域分析。 DFT 将离散信号 x[n] 变换为其频谱表示 X[k],定义如下: X [ k ] ∑ n 0 N − 1 x [ n ] e − j 2 π k n N X[k]…

【QT】输入类控件

目录 Line Edit 核心属性 核心信号 正则表达式 示例:使用正则表达式验证输入框内容 示例:切换输入框密码模式下的显示状态 Text Edit 核心属性 核心信号 示例:获取多行输入框的内容同步显示到label 示例:获取文本的选…

Windows 安装docker详细步骤说明

文章目录 1. 检查系统要求2. 启用硬件虚拟化3. 启用Hyper-V和容器功能4. 下载并安装Docker Desktop5. 配置Docker Desktop6. 安装WSL 27. 验证Docker安装8. 常见问题排查9. 重点说明参考资源 在Windows上安装Docker的详细步骤如下: 1. 检查系统要求 确保您的Window…

WPF----自定义滚动条ScrollViewer

滚动条是项目当中经常用到的一个控件&#xff0c;大部分对外项目都有外观的需求&#xff0c;因此需要自定义&#xff0c;文中主要是针对一段动态的状态数据进行展示&#xff0c;并保证数据始终在最新一条&#xff0c;就是需要滚动条滚动到底部。 1&#xff0c;xaml中引入 <…

提升写作效率:探索AI在现代办公自动化中的应用

工欲善其事&#xff0c;必先利其器。 随着AI技术与各个行业或细分场景的深度融合&#xff0c;日常工作可使用的AI工具呈现出井喷式发展的趋势&#xff0c;AI工具的类别也从最初的AI文本生成、AI绘画工具&#xff0c;逐渐扩展到AI思维导图工具、AI流程图工具、AI生成PPT工具、AI…

【爱上C++】详解string类2:模拟实现、深浅拷贝

在上一篇文章中我们介绍了string类的基本使用&#xff0c;本篇文章我们将讲解string类一些常用的模拟实现&#xff0c;其中有很多细小的知识点值得我们深入学习。Let’s go&#xff01; 文章目录 类声明默认成员函数构造函数析构函数拷贝构造函数深浅拷贝问题传统写法现代写法…

外接电容选择不当会对晶振电路造成什么影响?

在电子设备中&#xff0c;晶振电路负责提供稳定的时钟信号&#xff0c;这对于电路的同步和正确操作至关重要。外接电容在晶振电路中发挥着关键作用&#xff0c;其选择是否得当直接影响到晶振的性能。以下是不当选择外接电容可能带来的问题&#xff1a; 频率稳定性下降&#xf…

商场配电新思维:智能网关驱动的自动化管理系统

在商场配电室监控系统中&#xff0c;主要是以无线网络为载体&#xff0c;目的就是便于对变电站等实时监测与控制。其中&#xff0c;4G配电网关非常关键&#xff0c;可以将配电室系统终端上的信息数据及时上传到服务器&#xff0c;再由服务器下达控制指令到各模块中&#xff0c;…

电脑技巧:告别卡顿,迎接流畅——Wintune系统优化软件功能详解

目录 一、Wintune介绍 二、Wintune核心功能介绍 2.1 系统优化 2.2 隐私功能 2.3 文件管理模块 2.4 可选选项 2.5 UWP app服务 2.6 startup Manager 2.7、主机编辑 三、总结 电脑是大家目前日常办公娱乐必不可小的工具&#xff0c;软件市场上的系统优化软件层出不穷&a…

泛型的使用(<T>)

文章目录 前言一、泛型是什么&#xff1f;二、泛型的使用 1.定义泛型类2.泛型的常规用法总结 前言 强制类型转换存在一定隐患&#xff0c;如数据丢失、内存溢出、运行时错误、程序逻辑错误等。所以提供了泛型机制&#xff0c;使程序员可以定义安全的数据类型进行操作。通俗的理…