kafka进阶核心原理详解:案例解析(第11天)

系列文章目录

kafka高级(重点)

  1. kafka核心概念汇总

  2. kafka的数据位移offset

  3. Kafka的基准/压力测试

  4. Kafka的分片副本机制

  5. kafka如何保证数据不丢失

  6. kafka的消息存储及查询机制

  7. 生产者数据分发策略

  8. 消费者负载均衡机制

  9. kafka的监控工具:kafka-eagle

  10. Kafka中数据积压问题

  11. Kafka配额限速机制

文章目录

  • 系列文章目录
  • 前言
  • 一、kafka高级(重点)
    • 1. kafka进阶核心原理
    • 2. 核心概念整理
    • 3. Kafka的数据位移offset
    • 4. Kafka的基准/压力测试
      • 4.1 测试生产的效率
      • 4.2 测试消费的效率
  • 二、Kafka的分片与副本机制
  • 三、kafka如何保证数据不丢失
    • 1. 生产者端
    • 2. Broker端
    • 3.消费者端
    • 4. 相关参数
  • 四、Kafka的数据存储和查询
    • 1. 数据存储
    • 2. 查询机制
  • 五、生产者的分发策略
    • 1. 分发策略:
    • 2. 指定分区或者key
    • 3. 内置的分区器
  • 六、消费者的负载均衡
    • 1. 负载均衡机制
    • 2. 消费者组与分区
      • 2.1 查看当前消费者组列表
      • 2.2 查看消费者组详情信息
        • 场景一:三个分区,一个消费者组里有一个消费者
        • 场景二:三个分区,一个消费者组里有四个消费者
        • 场景三:三个分区,两个消费者组分别有四个消费者
  • 七、监控工具:kafka-eagle
    • 1. 基本介绍
    • 2. 启动服务:
    • 3. 连接页面:
  • 八、Kafka中数据积压问题
  • 九、Kafka配额限速机制
    • 1. 生产者
    • 2. 消费者


前言

本文主要通过案例的方式详解kafka进阶核心原理
这篇难度有点高,内容多,不过看完,收获也大。


一、kafka高级(重点)

1. kafka进阶核心原理

  • kafka核心概念汇总

  • kafka的数据位移offset

  • Kafka的基准/压力测试

  • Kafka的分片副本机制

  • kafka如何保证数据不丢失

  • kafka的消息存储及查询机制

  • 生产者数据分发策略

  • 消费者负载均衡机制

  • kafka的监控工具:kafka-eagle

  • Kafka中数据积压问题

  • Kafka配额限速机制

2. 核心概念整理

- 生产者-producer: 负责生产消息(谁往Kafka中生产消息谁就是生产者)
- 消费者-consumer: 负责消费消息(谁从Kafka中消费消息谁就是消费者)

- 运行实例-broker:  Kafka实际工作的服务器进程,broker之间是没有主从之分

- 主题-topic: 一类消息的集合,消息往哪放从哪取相当于数据库中的表   
- 分区-partition: 数据的分区,分区数量可以大于broker节点数量,分区初始设置后,只能增大不能减小
- 副本-replica: 数据的副本,副本数量不能大于broker节点数量,副本初始设置后,不能更改!
- 主副本-leader replica: 实际负责数据读写的副本,生产者和消费者都与这个副本进行交互的
- 从副本-follower replica: 负责从主副本上同步数据,实现数据备份,保证数据可靠性

- 消费者组-consumer group: 多个消费者的集合

- AR: All Replica 所有副本的集合,等于 AR = ISR+OSR
- ISR: In Sync Replica 数据同步成功的副本(实际可用的副本)
- OSR: Out of Sync Replica 数据同步不成功的副本(不可用的副本)

3. Kafka的数据位移offset

  • 分区在保存数据时,会对数据从1开始进行编号,用来记录数据的顺序,该编号称为偏移量offset
    • 各自分区内的偏移量是独立的,互不影响,所有每个分区的内的数据是有序的,但是多个分区的数据之间无法保障有序
  • 在Kafka0.8以前的kafka,消费的进度(offset)是写在zk中的,所以consumer需要知道zk的地址。这个方案有性能问题,Kafka 0.9版本之后 的时候整体大改了一次,brokers 接管了消费进度,数据位移直接保存在Kafka内部主题__consumer_offsets中, consumer 不再需要和 zookeeper 通信了,这也是为什么后来使用bootstrap-server了。bootstrap-servers 会自动发现其他 broker

不同的消费者可以同时消费同一个主题,但是同一个消费者会不会重复消费呢?

  • 生产者在生产数据的时候会生成对应的offset
  • 消费者在消费数据的时候会记录当前已消费数据的offset

4. Kafka的基准/压力测试

​ Kafka的基准测试, 又叫压力测试, 主要是用于测试Kafka集群的吞吐量, 每秒钟最大可以生产多少条数据, 以及每秒钟最大可以消费多少条数据

如何测试,创建多个topic,依次运行然后对比每秒发送的消息数,每秒发送的数据量以及平均延迟等指标?

topic1: 1分区 1副本

topic2: 3分区 1副本 相对topic1加了分区,理论上效率会提升

topic3: 1分区 3副本 相对topic1加了副本,理论上效率会降低

多分区通常可以提高 Kafka 系统的整体性能和吞吐量,特别是在大规模数据处理和高并发场景下。然而,对于一些特定的应用场景,如需要严格顺序性或资源受限的情况下,单分区可能会更为适合。因此,在设计和执行 Kafka 基准测试时,需要结合具体的使用需求和场景来选择最合适的分区策略。

多副本会带来一些额外的开销,特别是在数据复制、同步和存储方面。然而,在大多数情况下,这种开销是可以接受的,因为它提高了系统的容错性和可靠性,对于大多数企业级应用来说,这是非常重要的考虑因素。

​ 因此,在进行 Kafka 基准测试时,通常需要权衡分区数量和副本数量对性能、可靠性和成本的影响,以找到最适合特定需求的配置。

  • 测试前提先要创建Topic
/export/server/kafka/bin/kafka-topics.sh --create --bootstrap-server node1:9092,node2:9092,node3:9092 --partitions 3 --replication-factor 2 --topic benchmark

4.1 测试生产的效率

  • 1- 执行生产测试命令: 测试后,会增加4GB磁盘占用
/export/server/kafka/bin/kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1

在这里插入图片描述

  • 2- 测试结果

    kafka-producer-perf-test.sh 是 Apache Kafka 自带的性能测试脚本,用以测量 Kafka 生产者的性能指标。测试结果通常包含以下几个关键项:

    1. Records sent: 发送的消息总数。
    2. Records/sec: 每秒发送的消息数。这是一个衡量吞吐量的关键指标。
    3. MB/sec: 每秒发送的数据量,以兆字节为单位。 这是一个重点指标
    4. Avg. Latency (ms): 平均延迟,以毫秒为单位。这是衡量延迟的关键指标。
    5. Max Latency (ms): 最大延迟。
    6. p50 Latency (ms): 50th百分位延迟。
    7. p95 Latency (ms): 95th百分位延迟。
    8. p99 Latency (ms): 99th百分位延迟。
    9. p99.9 Latency (ms): 99.9th百分位延迟。

在这里插入图片描述

4.2 测试消费的效率

kafka-consumer-perf-test.sh 是 Apache Kafka 自带的消费者性能测试脚本,它能够评估 Kafka 消费者的吞吐量和其他性能指标。
  • 1- 执行消费测试命令
/export/server/kafka/bin/kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic benchmark --fetch-size 1048576 --messages 5000000

在这里插入图片描述

  • 2- 测试结果:

在这里插入图片描述

二、Kafka的分片与副本机制

  • 分片:对于分布式的系统,可以将大规模的数据分开存储,比如hdfs上会把数据分成不同的block分别存储在不同的datanode上,即提高了存储能力又降低了复杂度,同时可以提高数据处理的并发能力
  • 副本:对于分布式的系统,数据分散保存出现风险的机率高,有一个节点出现问题,数据就不完整了,所以可以利用副本的机制提高容错
  • 在Kafka中一个主题可以有多个分区,分区的数量建议是不要超过broker数量的3倍,可以更好的利用硬件资源,提高并行效率
  • 一个分区可以设置多个副本,建议副本数不超过3个,即可以满足数据的容错,又不会太过影响性能
  • 副本在broker数量满足的情况下会尽量分布在不同的broker上
  • 副本之间会通过内部机制选举一个Leader副本,剩下的是follow副本,数据会首先写入,然后Leader会自动同步数据给follow副本
  • 一般情况下Kafka集群也就是3、5、7台就够了,如果数据量特别大的,还可以搭建多个Kafka集群

分区有什么用呢?

作用:
1- 避免单台服务器容量的限制: 每台服务器的磁盘存储空间是有上限。Topic分成多个Partition分区,可以避免单个Partition的数据大小过大,导致服务器无法存储。利用多台服务器的存储能力,提升Topic的数据存储效率。

2- 提升Topic的吞吐量(数据读写速度): 利用多台服务器的数据读写能力、网络等资源


分区的数量有没有限制?

没有限制,分区数量和Kafka集群中的broker节点个数没有任何关系。在实际工作推荐Topic的分区数量不要超过Kafka集群中的broker节点个数的3倍,这只是一个推荐/经验值。

副本有什么用呢?

作用: 通过多副本的机制,提升数据安全性。但是副本过多,会导致冗余(重复)的数据过多


副本的数量有没有限制?
有限制,副本数量最大不能够超过Kafka集群中的broker节点个数。在实际工作中,推荐的分区的副本数量是1-3个。具体设置多少个,根据企业的数据重要程度进行选择。如果数据重要,可以将副本数设置大一些;如果数据不太重要,可以将副本数设置小一些。

三、kafka如何保证数据不丢失

1. 生产者端

生产者端是如何保证数据不丢失的呢?
答:生产者端将消息发送给到Kafka集群以后,broker要给生产者响应信息。最关键就是ACK机制
ACK机制当中有3个参数配置值,分别是:0  1  -1(all)
0:生产者生产消息给到Kafka集群,生产者不等待(不接收)broker返回的响应信息
1:生产者生产消息给到Kafka集群,Kafka集群中的分区对应的Leader主副本所在的broker给生产者返回响应信息
-1(all):生产者生产消息给到Kafka集群,Kafka集群中的分区对应的所有副本给生产者返回响应信息

消息的生产效率排序(由高到低):0 > 1 > -1
消息的安全级别排序(由高到低):-1 > 1 > 0


在实际工作中如何选择ACK参数配置?
答:根据数据的重要程度进行选择。如果数据重要,优先保证数据的安全性,再考虑生产效率;如果数据不重要,优先考虑生产效率,再尽可能提升安全级别。

数据写入:

  • 数据成功写入leader
  • follow成功从leader同步数据

写入的模式:

  • 同步:顺序执行,写入一条等待反馈,再写下一条
  • 异步:先将数据写入缓冲区,批量写入Kafka等待反馈

数据复制的过程,通过HW机制保证消费数据可靠性(只考虑ISR队列):

2. Broker端

在这里插入图片描述

3.消费者端

在这里插入图片描述

在Kafka0.8以前的kafka,消费的进度(offset)是写在zk中的,所以consumer需要知道zk的地址。这个方案有性能问题,Kafka 0.9版本之后 的时候整体大改了一次,brokers 接管了消费进度,数据位移直接保存在Kafka内部主题__consumer_offsets中, consumer 不再需要和 zookeeper 通信了,这也是为什么后来使用bootstrap-server了。bootstrap-servers 会自动发现其他 broker

消费靠提交offset,记录消费数据的位置

  • 如果消费数据成功后再提交offset,可能会重复消费数据
  • 如果先提交offset再消费数据,可能会少消费数据

4. 相关参数

1- acks  broker节点确认机制
    默认值:1;数据类型:string

2- buffer.memory 缓存大小
    默认值:33554432(32MB)

3- retries 失败后重试次数
    默认值:2147483647,该值没有意义,一般是使用delivery.timeout.ms参数进行控制

4- delivery.timeout.ms 消息传输超时时间
    默认值:120000(120秒)

5- batch.size 每一批次的消息数据的大小
    默认值:16384(16KB)

6- linger.ms 每一批次的间隔时间
    默认值:0

四、Kafka的数据存储和查询

1. 数据存储

为什么存储是要拆分成多个文件?
	如果所有的数据都写入一个文件的话,文件的数量会越来越多,当查询读取数据时,就需要打开一个非常大的文件,文件的打开速度会变得越来越慢,影响数据的读取速度

	kafka将数据文件进行了拆分,当前数据超过1G就会创建一个新的文件,文件的名字会使用第一条数据的偏移量作为文件名。偏移量作为文件改名也方便数据的查找, 1036000偏移量的数据

	查找是会先根据查找的偏移量会文件的名称进行比对,确认数据在哪个文件中,然后再读取对应的文件数据,可以读取所有文件
	
	1-Topic的数据存放路径是:/export/server/kafka/data。在该目录下,还有其他的目录。而且是以Topic进行划分,具体目录的命名规则是:Topic名称-分区编号

	2- Topic目录下,存放的是消息的数据文件。并且是成对出现,也就是xx.log和xx.index文件

1-xx.log和xx.index它们的作用是什么?
答:
xx.log: 称之为segment片段文件,也就是一个Partition分区的数据,会被分成多个segment(log)片段文件进行存储。
xx.index: 称之为索引文件,该文件的作用是用来加快对xx.log文件内容检索的速度


2-xx.log和xx.index文件名称的意义?
答: 这个数字是xx.log文件中第一条消息的offset(偏移量)。offset偏移量从0开始编号。


3-为什么一个Partition分区的数据要分成多个xx.log(segment片段文件)文件进行存储?
答:
  1- 如果一个文件的数据量过大,打开和关闭文件都非常消耗资源
  2- 在一个大的文件中,检索内容也会非常消耗资源
  3- Kafka只是用来临时存储消息数据。会定时将过期数据删除。如果数据放在一个文件中,删除的效率低;如果数据分成了多个segment片段文件进行存储,删除的时候只需要判断segment文件最后修改时间,如果超过了保留时间,就直接将整个segment文件删除。该保留时间是通过server.properties文件中的log.retention.hours=168进行设置,默认保留168小时(7天)
# 具体配置在哪?以及怎么配置
# 在config/server.properties内
# 默认保留168小时(7天)
log.retention.hours=168

# 指定Kafka数据的位置
log.dirs=/export/server/kafka/data

image-20221022105138930

2. 查询机制

在这里插入图片描述

查询步骤:
1- 首先先确定要读取哪个xx.log(segment片段)文件。368776该offset的消息在368769.log文件中
2- 查询xx.log对应的xx.index,查询该条消息的物理偏移量范围
3- 根据消息的物理偏移量范围去读取xx.log文件(底层是基于磁盘的顺序读取)
4- 最终就获取到了具体的消息内容
扩展内容: 磁盘的读写中,有两种方案:随机读写   和   顺序读写。顺序读写的速度会更快
参考连接: https://www.cnblogs.com/yangqing/archive/2012/11/13/2767453.html

Kafka为什么有非常高的吞吐能力/读写性能:
https://baijiahao.baidu.com/s?id=1710624455165799096&wfr=spider&for=pc

连续索引和稀疏索引

image-20221022111645992

五、生产者的分发策略

何为生产者的数据分发策略呢?

指的就是生产者生产的消息,是如何保存到具体分区上

1. 分发策略:

  • 1- 随机分发策略:将消息发到到随机的某个分区上,还是发送到Leader主副本上。Python支持,Java不支持

  • 2- 指定分区策略:将消息发到指定的分区上面。Python支持,Java支持

  • 3- Hash取模策略:对消息的key先取Hash值,再和分区数取模。Python支持,Java支持

  • 4- 轮询策略:在Kafka的2.4及以上版本,已经更名成粘性分发策略。Python不支持,Java支持

  • 5- 自定义分发策略:Python支持,Java支持

2. 指定分区或者key

通过send方法指定分区转发

furture = producer.send(
        topic='test',
        value=f"binge is handsome{i}".encode("utf-8"),
        partition=1  # 指定分区发送
    )
furture = producer.send(
        topic='test',
        value=f"binge is handsome{i}".encode("utf-8"),
        key="kafka_key" # 指定key发送
    )

指定分区的优先级大于指定key

注意: 当在发送数据的时候, 如果只传递了topic 和 value没有指定partition和key的时候, 那么此时就采用随机策略,

3. 内置的分区器

分区器负责决定当数据来时,这个数据被分发至哪个分区

在这里插入图片描述

在这里插入图片描述

六、消费者的负载均衡

1. 负载均衡机制

在这里插入图片描述

Kafka集群中每分钟新产生400条数据,下游的一个消费者每分钟能够处理400条数据。

随着业务发展,Kafka集群中每分钟新产生1200条数据,下游的一个消费者每分钟能够处理400条数据。
答:会导致broker中积压的消息条数越来越多,造成消息处理不及时。可以增加消费者数量,并且将这些消费者放到同一个消费组当中

随着业务发展,Kafka集群中每分钟新产生1600条数据,下游的一个消费者每分钟能够处理400条数据。
答:会导致broker中积压的消息条数越来越多,造成消息处理不及时。再增加消费组中消费者的个数已经无法解决问题。


如何解决:
    1- 增加消费组中消费者的个数
    2- 提高下游消费者对消息的处理效率
Kafka消费者的负载均衡机制
1- 在同一个消费组中,一个Topic中一个分区的数据,只能被同个消费组中的一个消费者所消费,不能被同个消费组中多个消费者所消费。但是一个消费组内的一个消费者可以消费多个分区的数据。也就是分区和消费者的对应关系,多对一
2- 在同一个消费组中,消费者的个数最多不能超过Topic的分区数。如果超过了,就会有一些消费者处于闲置状态,消费不到任何数据。
3- 不同的消费组中的消费者,可以对一个Topic的数据同时消费,也就是不同消费组间没有任何关系。也就是Topic的数据能够被多个消费组中的消费者重复消费。

2. 消费者组与分区

  • 2.1 查看当前消费者组列表

/export/server/kafka/bin/kafka-consumer-groups.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --list
  • 2.2 查看消费者组详情信息

/export/server/kafka/bin/kafka-consumer-groups.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --group g_1 --describe
场景一:三个分区,一个消费者组里有一个消费者

1- 在同一个消费组中,一个Topic中一个分区的数据,只能被同个消费组中的一个消费者所消费,不能被同个消费组中多个消费者所消费。但是一个消费组内的一个消费者可以消费多个分区的数据。也就是分区和消费者的对应关系,多对一

在这里插入图片描述

所有的分区都由这个一个消费进行消费

image-20221022113440902

场景二:三个分区,一个消费者组里有四个消费者

2- 在同一个消费组中,消费者的个数最多不能超过Topic的分区数。如果超过了,就会有一些消费者处于闲置状态,消费不到任何数据。

在这里插入图片描述

  • 规则:同一个分区只能分配给一个消费者组内的一个消费者消费
  • 划分分区时最好保证消费者的数量与分区相等
  • 当消费者数据大于分区数量时,肯定有消费者空闲

在这里插入图片描述

场景三:三个分区,两个消费者组分别有四个消费者

3- 不同的消费组中的消费者,可以对一个Topic的数据同时消费,也就是不同消费组间没有任何关系。也就是Topic的数据能够被多个消费组中的消费者重复消费。

在这里插入图片描述

七、监控工具:kafka-eagle

1. 基本介绍

Kafka Eagle是一个用于监控和管理kafka的开源组件,可以同时监控多个kafka集群,

通过Kafka Eagle可以看到当前的消费者组,对于每个组,他们正在使用的主题以及该组在每个主题中的偏移量,消费积压等等

JMX(Java Management Extensions,即 Java 管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。kafka 中已经集成该框架

它提供了对Java应用程序和JVM的监控和管理功能。通过JMX,我们可以监控服务器中的各种资源的使用情况,CPU、内存,JVM内存的使用情况.

安装kafka-eagle 参考安装文件,只需要在一台服务器上安装即可,版本是1.4.6

2. 启动服务:

/export/server/kafka-eagle-bin-1.4.6/kafka-eagle-web-1.4.6/bin/ke.sh start

3. 连接页面:

http://node1.itcast.cn:8048/ke

默认用户为admin,密码为:123456

在这里插入图片描述

八、Kafka中数据积压问题

出现积压的原因:

  • 因为数据写入目的容器失败,从而导致消费失败
  • 因为网络延迟消息消费失败
  • 消费逻辑过于复杂, 导致消费过慢,出现积压问题

解决方案:

  • 对于第一种, 我们常规解决方案, 处理目的容器,保证目的容器是一直可用状态
  • 对于第二种, 如果之前一直没问题, 只是某一天出现, 可以调整消费的超时时间。并且同时解决网络延迟问题
  • 对于第三种, 一般解决方案,调整消费代码, 消费更快即可, 利于消费者的负载均衡策略,提升消费者数量

页面查看:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

九、Kafka配额限速机制

生产者和消费者以极高的速度生产/消费大量数据或产生请求,从而占用broker上的全部资源,造成网络IO饱和。有了配额(Quotas)就可以避免这些问题。Kafka支持配额管理,从而可以对Producer和Consumer的produce&fetch操作进行流量限制,防止个别业务压爆服务器。

1. 生产者

  • 限流 程序设置其TPS不超过1MB/s,即1048576/s 单位是byte
    • –producer_byte_rate=1048576 限制生产者写入数据的速度
    • –entity-type clients --entity-default 指定对所有生成者都生效
/export/server/kafka/bin/kafka-configs.sh --zookeeper node1:2181 --alter --add-config 'producer_byte_rate=1048576' --entity-type clients --entity-default
  • 测试
    • –num-records 数据量
    • –throughput 吞吐量
    • –record-size 数据字节大小 1000kb
    • –acks 模式
/export/server/kafka/bin/kafka-producer-perf-test.sh --topic benchmark --num-records 5000000 --throughput -1 --record-size 1000 --producer-props bootstrap.servers=node1:9092,node2:9092,node3:9092 acks=1

2. 消费者

  • 限流 程序设置其TPS不超过1MB/s,即1048576/s 单位是byte
    • –consumer_byte_rate=1048576 限制消费者消费数据的速度
    • –entity-type clients --entity-default 指定对所有生成者都生效
/export/server/kafka/bin/kafka-configs.sh --zookeeper node1:2181 --alter --add-config 'consumer_byte_rate=1048576' --entity-type clients --entity-default
  • 测试
    • –num-records 数据量
    • –throughput 吞吐量
    • –record-size 数据字节大小 1000kb
    • –acks 模式
/export/server/kafka/bin/kafka-consumer-perf-test.sh --broker-list node1:9092,node2:9092,node3:9092 --topic benchmark --fetch-size 1048576 --messages 500000

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

集智书童 | 深度学习与先验方法在遥感与无人机影像去雾中的应用与挑战!

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。 原文链接:深度学习与先验方法在遥感与无人机影像去雾中的应用与挑战! 论文链接:[2405.07520] Dehazing Remote Sensing and UAV Imagery: A…

解决企业微信内嵌H5页面导航栏返回上一级是空白页面问题

在项目中,产品要求返回上一级不能空白页,可以是工作台,所以要引入企业微信的返回按钮的用法,以下是详细步骤: 1.引入企业微信的版本内容 <script src"https://res.wx.qq.com/wwopen/js/jsapi/jweixin-1.0.0.js"></script> 在public底下的index.html底…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验6 生成树协议STP的功能

一、实验目的 1.验证以太网交换机生成树协议的功能&#xff1b; 2.理解网络环路对网络的负面效应&#xff1b; 3.理解生成树协议的作用。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&#xff0c;完成对应实验。 三、实…

【机器学习】基于Softmax松弛技术的离散数据采样

1.引言 1.1.离散数据采样的意义 离散数据采样在深度学习中起着至关重要的作用&#xff0c;它直接影响到模型的性能、泛化能力、训练效率、鲁棒性和解释性。 首先&#xff0c;采样方法能够有效地平衡数据集中不同类别的样本数量&#xff0c;使得模型在训练时能够更均衡地学习…

spring源码环境的搭建

为什么要编译spring源码 为了高效调试Spring源码、验证个人猜想&#xff0c;并从开发者的视角深化理解&#xff0c;编译自定义的Spring源码版本显得尤为重要。这样可以避免因缺乏预编译版本而带来的不便&#xff0c;并允许直接在源码上进行注释或修改&#xff0c;以记录学习心…

Matlab基础篇:绘图与可视化

目录 前言 一、二维绘图 二、图形属性设置 三、多图绘制 四、三维绘图 五、绘图技巧 六、绘图的高级技巧 七、实例示范&#xff1a;绘制多功能图形 八、总结 前言 在数据分析和数学建模中&#xff0c;可视化是一个非常关键的步骤。Matlab 提供了丰富的绘图和可视化工…

【Mysql】SQL约束、主键约束、非空、唯一、外键约束

SQL约束 什么是约束: 对表中的数据进行进一步的限制&#xff0c;从而保证数据的正确性、有效性、完整性. 违反约束的不正确数据,将无法插入到表中。 常见的约束 约束名 约束关键字 主键 primary key 唯一 unique 非空 not null 外键 foreign key 2.1 主键约束 什么是主键约束&a…

OpenXlab应用部署踩坑记录

参考博客&#xff1a; OpenXlab应用部署经验_xlabdemo-web-CSDN博客 书生浦语大模型实战营Day04OpenXLab 部署_openxlab.org.cn上传模型-CSDN博客 应用创建流程 | OpenXLab浦源 - 文档中心 1、已经在OpenXlab上上传好了模型 在上传好的模型查看一下如何使用模型 2、github…

github-chinese,跟英文GitHub说拜拜

背景 对于我们程序员来说,Github是一个常逛的web网站,里面学习资源众多,不管是查问题还是查资料都离不开他。 但是Github作为一个国际化的网站,语言主要是英语,所以对于一些英语似懂非懂的同学来说还是有一些难处。 想过找一个国内中文的Github作为一个平替网站,但是资…

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些&#xff0c;相比文科说理工科的院校也更多&#xff0c;如何选择适合自己的专业&#xff0c;这是一个比较重要的课题&#xff0c;毕竟大学专业直接关系到职业&#xff0c;是一辈子的大事。 那么理科究竟如何选择专业呢&#xff1f;需要从什么地方…

贪心算法—

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。这种算法并不总是能找到全局最优解&#xff0c;但在某些问题上能提供足够好的解决方案。贪心算法的关键特性包括&#…

【TB作品】MSP430G2553单片机,转速测量系统,转速测量仪,霍尔传感器

文章目录 题目器件原理霍尔传感器测速原理&#xff1a;电机如何调节速度程序设计 实验报告实验题目实验目的实验器材实验原理霍尔传感器测速原理电机调速原理定时器中断原理 硬件连接软件设计定时器配置主程序中断处理程序 实验结果实验总结 题目 设计基于MSP430的转速测量仪的…

动手学深度学习(Pytorch版)代码实践 -深度学习基础-10权重衰减

10权重衰减 """ 正则化是处理过拟合的常用方法&#xff1a;在训练集的损失函数中加入惩罚项&#xff0c;以降低学习到的模型的复杂度。 保持模型简单的一个特别的选择是使用L2惩罚的权重衰减。这会导致学习算法更新步骤中的权重衰减。 """impor…

Python基础教程(三十):math模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

AudioSep:从音频中分离出特定声音(人声、笑声、噪音、乐器等)本地一键整合包下载

AudioSep是一种 AI 模型&#xff0c;可以使用自然语言查询进行声音分离。这一创新性的模型由Audio-AGI开发&#xff0c;使用户能够通过简单的语言描述来分离各种声音源。 比如在嘈杂的人流车流中说话的录音中&#xff0c;可以分别提取干净的人声说话声音和嘈杂的人流车流噪声。…

对于初学者,该如何选择大模型框架 LlamaIndex 与 LangChain ?

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

任务3.8.4 利用RDD实现分组排行榜

文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述&#xff1a;使用Spark RDD实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell4. 读取数据生成RDD5. 数据处理6. 计算TopN7. 输出结果8…

「动态规划」如何求最长湍流子数组的长度?

78. 最长湍流子数组https://leetcode.cn/problems/longest-turbulent-subarray/description/ 给定一个整数数组arr&#xff0c;返回arr的最长湍流子数组的长度。如果比较符号在子数组中的每个相邻元素对之间翻转&#xff0c;则该子数组是湍流子数组。更正式地来说&#xff0c;…

算法期末整理

目录 一 算法概述 二 递归与分治策略 三 动态规划 四 贪心算法 五 回溯法 六 分支限界法 七 随机化算法 八 线性规划与网络流 一 算法概述 算法的概念 通俗地讲&#xff0c;算法是指解决问题的一种方法或一个过程。更严格地讲&#xff0c;算法是由若干条指令组成的有穷…

设计模式——职责链模式

职责链模式(Chain of Responsibility) 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这个对象连接成一条链&#xff0c;并沿着这条链传递请求&#xff0c;直到有一个对象处理它为止。   发出请求的客户端并不知道职责链中哪一个对象…