Kafka 压缩算法详细介绍
文章目录
- 一 、Kafka 压缩算法概述
- 二、Kafka 压缩的作用
- 2.1 降低网络带宽消耗
- 2.2 提高 Kafka 生产者和消费者吞吐量
- 2.3 减少 Kafka 磁盘存储占用
- 2.4 减少 Kafka Broker 负载
- 2.5 降低跨数据中心同步成本
- 三、Kafka 压缩的原理
- 3.1 Kafka 压缩的基本原理
- 3.2. Kafka 压缩的工作流程
- 3.3 Kafka 压缩的数据存储格式
- 四、Kafka 压缩方式配置
- 4.1 Kafka 生产者(Producer)端压缩配置
- 4.2 Kafka Broker 端压缩配置
- 4.3 Kafka 消费者(Consumer)端解压缩
- 五、不同压缩方式对比
- 5.1 Kafka 支持的四种压缩方式
- 5.2 Kafka 压缩方式对比分析
- 六、Kafka 压缩场景
- 6.1 日志收集与分析(ELK / Flink / Kafka)
- 6.2 实时流数据处理(Flink / Spark Streaming)
- 6.3 电商高并发订单系统
- 6.4. 跨数据中心(Multi-DC)Kafka 同步
- 6.5 数据存储优化(Kafka + HDFS)
一 、Kafka 压缩算法概述
Kafka 支持 GZIP、Snappy、LZ4 和 Zstd 四种压缩算法,以减少网络传输负担、降低存储成本,同时提高 Kafka 吞吐量。压缩的主要作用是优化 Kafka 的生产(Producer)、存储(Broker)和消费(Consumer) 过程,从而提高消息系统的整体效率。
二、Kafka 压缩的作用
Kafka 压缩的主要作用是 提高吞吐量、减少存储占用、降低网络带宽消耗,并优化整体性能。
2.1 降低网络带宽消耗
Kafka 作为分布式消息系统,数据在 生产者(Producer)、Broker、消费者(Consumer) 之间传输。未压缩的数据体积大,会导致:
- 网络流量增加,影响 Kafka 集群性能。
- 数据传输速度变慢,影响吞吐量。
Kafka 压缩的好处:
✅ 减少带宽占用 → 适用于跨数据中心同步。
✅ 提升吞吐量 → 生产者和消费者都能更快发送和接收消息。
✅ 降低网络成本 → 特别是在云环境或受限带宽的场景。
📌 示例:
- 未压缩消息:1000 条 JSON 消息 50MB
- 使用 Zstd 压缩:仅 10MB,减少 80% 的网络流量。
2.2 提高 Kafka 生产者和消费者吞吐量
Kafka 处理批量数据(batch processing),压缩后可以减少单个 batch 的大小,从而:
- 生产者(Producer)可以更快地发送消息
- Broker 可以更快地写入磁盘
- 消费者(Consumer)可以更快地消费数据
📌 示例:
- Producer 批量发送未压缩数据(每条 1KB,1000 条消息):
- 发送数据量 = 1MB
- Kafka 需要处理的 batch 很大,写入磁盘速度慢。
- Producer 采用 Snappy 压缩(50% 压缩率):
- 发送数据量 = 500KB
- Kafka 处理的数据减少一半,提升吞吐量。
✅ 适用于高并发写入场景,如电商订单流、日志数据流。
2.3 减少 Kafka 磁盘存储占用
Kafka 消息存储在 Broker 上,未压缩的数据会占用大量磁盘空间,导致:
- 磁盘利用率增加,需要更多存储。
- I/O 负载加大,影响 Kafka 读取性能。
📌 示例:
数据量 | 未压缩存储 (MB) | Snappy 压缩后 (MB) | GZIP 压缩后 (MB) |
---|---|---|---|
100 万条日志 | 500 MB | 250 MB | 100 MB |
Kafka 压缩带来的好处:
✅ 减少磁盘存储需求(压缩率通常在 30%-90%)。
✅ 降低存储成本(云存储或本地磁盘使用更少)。
✅ 适用于日志归档、数据存储优化等场景。
2.4 减少 Kafka Broker 负载
Kafka Broker 负责持久化消息和转发数据,如果数据未压缩:
- 磁盘 I/O 负担加重 → 影响写入和读取速度。
- 分区数据量过大 → Broker 压力大,影响副本同步。
- 网络传输慢 → 影响消费者消费速度。
📌 解决方案:
- 采用Zstd或Snappy压缩,在保证吞吐量的同时降低 Broker 负载。
- 适用于高并发日志流、事件流、实时数据传输等场景。
✅ 压缩后,Kafka 需要处理的 I/O 数据变少,性能更优。
2.5 降低跨数据中心同步成本
在跨数据中心部署 Kafka(如灾备中心或全球业务同步),数据需要在不同机房同步。如果数据未压缩:
- 带宽成本高,影响云服务费用(AWS/GCP)。
- 延迟增加,导致跨数据中心数据同步慢。
📌 示例:
未压缩: 10GB 日志/小时 → 需要大带宽传输。
Zstd 压缩(90%) → 仅 1GB,带宽节省 90%。
✅ 适用于跨地域业务、CDN 日志同步、全球电商架构。
作用 | 具体表现 |
---|---|
减少网络带宽 | 压缩 50%~90%,适用于跨数据中心 |
提升吞吐量 | Producer 发送更快,Consumer 消费更快 |
减少磁盘占用 | 存储节省 30%~90% |
降低 Broker 负载 | 减少磁盘 I/O,优化 Kafka 处理效率 |
降低跨数据中心成本 | 跨机房同步更快,节省流量费用 |
三、Kafka 压缩的原理
Kafka 通过批量(Batch)压缩的方式减少数据传输和存储的开销,从而提高吞吐量、降低网络带宽占用、减少磁盘存储成本。Kafka 的压缩主要在 Producer 端执行,并在 Consumer 端自动解压,而 Broker 仅存储和转发压缩数据。
3.1 Kafka 压缩的基本原理
Kafka 不会对单条消息进行压缩,而是采用批量(Batch)压缩:
- Producer 端:批量收集消息后,对整个 Batch 进行压缩,然后发送到 Kafka Broker。
- Broker 端:直接存储和转发压缩后的数据,而不会解压消息。
- Consumer 端:读取 Broker 发送的压缩 Batch,并在消费时解压。
📌 关键点
- Kafka 只压缩批量数据(Batch),不会压缩单条消息。
- Broker 不解压数据,仅存储 Producer 发送的压缩数据。
- Consumer 端必须支持相应的压缩算法,否则无法解压数据。
3.2. Kafka 压缩的工作流程
Kafka 压缩主要涉及 Producer(生产者)、Broker(消息代理)、Consumer(消费者),其工作流程如下:
📌 生产者端(Producer)压缩
Producer 批量收集消息,然后进行压缩
- Producer 端接收到多条待发送的消息。
- Producer 进行批量处理(Batching),将多条消息合并到一个 Batch 中。
- 选择指定的压缩算法(如 GZIP、Snappy、LZ4、Zstd)。
- 对整个 Batch 进行压缩,然后发送到 Kafka Broker。
示例:
假设 Producer 发送 5 条 JSON 消息:
[{"id":1, "name":"A"},{"id":2, "name":"B"},{"id":3, "name":"C"},{"id":4, "name":"D"},{"id":5, "name":"E"}
]
如果不压缩,发送的数据大小为 5KB
,但如果使用 GZIP 压缩,则大小可能只有 1KB
,节省 80%
网络带宽。
Producer 配置示例(producer.properties
):
compression.type=snappy # 可选 gzip, snappy, lz4, zstd
batch.size=65536 # 设定批次大小,提高吞吐量
linger.ms=10 # 允许 Kafka 等待 10ms 批量收集消息,提高压缩效果
📌 Broker 端(Kafka 存储与转发)
- Broker 直接存储 Producer 发送的压缩 Batch,不进行解压。
- Consumer 读取数据时才会解压,Kafka 仅作为存储和转发的角色。
示例:
Producer 发送压缩后的数据:
[Compressed Batch (Snappy)] -> Kafka Topic Partition
Kafka 不会解压,而是原样存储,并在 Consumer 端解压。
Broker 配置(server.properties
):
compression.type=producer # 继承 Producer 端的压缩方式
Kafka Broker 的 compression.type=producer
让 Kafka 直接存储 Producer 的压缩格式,而不会重新压缩数据。
📌 Consumer 端(解压数据)
- Consumer 读取 Kafka Broker 发送的压缩数据。
- Consumer 端会自动解压,然后消费单条消息。
示例:
Consumer 端读取 GZIP 压缩的 Batch,并进行解压:
[Compressed Batch (GZIP)] -> 解压 -> 单条消息处理
Consumer 配置(consumer.properties
):
fetch.min.bytes=1048576 # 限制最小 fetch 批次,提高吞吐量
fetch.max.wait.ms=500 # 适当增加等待时间,提高 batch 读取效率
Kafka Consumer 自动解压缩,不需要额外的配置。
3.3 Kafka 压缩的数据存储格式
Kafka 采用批量压缩,因此存储格式如下:
未压缩的 Kafka 消息存储格式
[Message1][Message2][Message3][Message4][Message5]
使用压缩后的 Kafka 消息存储格式
[Compressed Batch (Snappy)]
- 整个 Batch 作为一个数据块压缩,并存储在 Kafka 主题(Topic)中。
- Kafka 只存储和转发已压缩的 Batch,不会解压数据。
四、Kafka 压缩方式配置
4.1 Kafka 生产者(Producer)端压缩配置
Kafka Producer 端负责压缩数据,并发送给 Kafka Broker。
✅ 生产者配置参数
在 producer.properties
中,配置 compression.type
:
compression.type=snappy # 可选值:gzip, snappy, lz4, zstd
batch.size=65536 # 设定批次大小,提高吞吐量
linger.ms=10 # 允许 Kafka 等待 10ms 批量收集消息,提高压缩效果
✅ 代码示例
使用 Java 代码配置 Kafka Producer
import org.apache.kafka.clients.producer.*;import java.util.Properties;public class KafkaProducerCompressionExample {public static void main(String[] args) {Properties props = new Properties();props.put("bootstrap.servers", "localhost:9092");props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");// 配置压缩方式props.put("compression.type", "snappy"); // 可选 gzip, lz4, zstdprops.put("batch.size", 16384); // 16KB 批次大小props.put("linger.ms", 5); // 5ms 等待时间,提高批量压缩效果KafkaProducer<String, String> producer = new KafkaProducer<>(props);ProducerRecord<String, String> record = new ProducerRecord<>("test_topic", "key", "message with compression");producer.send(record);producer.close();}
}
4.2 Kafka Broker 端压缩配置
Kafka Broker 可以控制是否允许压缩消息传输,并决定是否改变 Producer 发送的压缩方式。
✅ Broker 配置参数
在 server.properties
中:
log.cleanup.policy=delete # Kafka 日志清理策略
compression.type=producer # 继承 Producer 端的压缩方式
log.segment.bytes=1073741824 # 每个分段日志文件最大 1GB
📌 compression.type=producer
让 Broker 直接存储 Producer 压缩的消息,而不会改变其压缩格式。
📌 Broker 端压缩策略
配置项 | 作用 |
---|---|
compression.type=none | Kafka 不进行任何压缩,存储 Producer 发送的原始数据 |
compression.type=producer | Broker 采用 Producer 发送的数据的压缩格式 |
compression.type=gzip | 强制所有数据存储为 GZIP 压缩 |
compression.type=snappy | 强制所有数据存储为 Snappy 压缩 |
4.3 Kafka 消费者(Consumer)端解压缩
Kafka Consumer 端会自动解压 Producer 发送的压缩数据,因此默认无需额外配置。
✅ Consumer 配置参数
在 consumer.properties
中:
fetch.min.bytes=1048576 # 限制最小 fetch 批次,提高吞吐量
fetch.max.wait.ms=500 # 增加等待时间,提高 batch 读取效率
✅ 代码示例
使用 Java 配置 Kafka Consumer
import org.apache.kafka.clients.consumer.*;import java.util.Collections;
import java.util.Properties;public class KafkaConsumerCompressionExample {public static void main(String[] args) {Properties props = new Properties();props.put("bootstrap.servers", "localhost:9092");props.put("group.id", "test-group");props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);consumer.subscribe(Collections.singletonList("test_topic"));while (true) {ConsumerRecords<String, String> records = consumer.poll(100);for (ConsumerRecord<String, String> record : records) {System.out.println("Received: " + record.value());}}}
}
📌 Consumer 端压缩行为
- Kafka Consumer 自动解压缩 Producer 端压缩的数据。
- 不需要额外配置,但如果批量消费,可以调整
fetch.min.bytes
和fetch.max.wait.ms
以提高吞吐量。
五、不同压缩方式对比
5.1 Kafka 支持的四种压缩方式
Kafka 主要支持以下压缩算法:
压缩方式 | 介绍 | 压缩率 | 压缩速度 | 解压速度 | CPU 占用 |
---|---|---|---|---|---|
GZIP | 经典的高压缩率算法 | 高 | 低 | 低 | 高 |
Snappy | Google 开发的快速压缩 | 低 | 高 | 很高 | 低 |
LZ4 | 适用于高吞吐的快速压缩 | 中 | 很高 | 极高 | 低 |
Zstd | Facebook 开发的新一代压缩 | 最高 | 中等 | 高 | 中等 |
5.2 Kafka 压缩方式对比分析
(1) 压缩率对比
压缩率决定了 Kafka 消息存储占用多少空间,压缩率越高,磁盘存储和网络传输占用越少。
压缩方式 | 压缩率 (%) | 示例数据 (100MB 日志文件压缩后大小) |
---|---|---|
GZIP | 85-90% | 10MB |
Snappy | 50-60% | 50MB |
LZ4 | 60-70% | 40MB |
Zstd | 90-95% | 5-8MB |
📌 结论:
- Zstd 和 GZIP 的压缩率最高,适用于存储优化和跨数据中心数据同步。
- Snappy 和 LZ4 压缩率较低,但速度快,适用于高吞吐场景。
(2) 压缩速度对比
压缩速度影响 Kafka Producer 端的吞吐量,速度越快,Kafka 生产端的效率越高。
压缩方式 | 压缩速度 (MB/s) |
---|---|
GZIP | 30-50MB/s |
Snappy | 150-250MB/s |
LZ4 | 200-400MB/s |
Zstd | 100-300MB/s |
📌 结论:
- LZ4 和 Snappy 压缩速度最快,适合高吞吐量、低延迟的实时数据流。
- GZIP 压缩速度最慢,适用于存储优化而不是高并发场景。
- Zstd 在不同压缩级别下可调节压缩速度,适用于平衡吞吐量和存储需求的场景。
(3) 解压速度对比
解压速度影响 Kafka Consumer 端的消费吞吐量。
压缩方式 | 解压速度 (MB/s) |
---|---|
GZIP | 50-100MB/s |
Snappy | 300-500MB/s |
LZ4 | 400-800MB/s |
Zstd | 200-600MB/s |
📌 结论:
- LZ4 和 Snappy 解压速度最快,适用于需要低延迟消费的应用,如日志流分析、流式计算。
- GZIP 解压速度最慢,会影响消费者消费吞吐量。
- Zstd 解压速度介于 GZIP 和 Snappy 之间,且压缩率更高。
(4) CPU 占用对比
CPU 占用影响 Kafka 生产者和消费者的性能,CPU 负载越低,Kafka 处理能力越强。
压缩方式 | CPU 占用率 |
---|---|
GZIP | 高 (占用 40-70%) |
Snappy | 低 (占用 5-15%) |
LZ4 | 低 (占用 5-15%) |
Zstd | 中等 (占用 10-30%) |
📌 结论:
- GZIP 消耗 CPU 最多,影响 Kafka 高吞吐应用。
- Snappy 和 LZ4 CPU 占用最低,适用于高并发场景。
- Zstd 占用适中,可调节压缩级别来平衡 CPU 负载。
六、Kafka 压缩场景
Kafka 的压缩适用于多个场景,不同业务需求决定了选择不同的压缩方式。
6.1 日志收集与分析(ELK / Flink / Kafka)
📌 场景描述
- 业务系统(微服务、Web 服务器)产生大量日志数据,需要采集并存储到 Kafka。
- 这些日志最终会被消费,并存入 Elasticsearch 或 HDFS 进行分析。
❌ 传统方式的痛点
- 日志量庞大,未压缩时数据传输慢,网络负载高。
- 生产者(如 Filebeat)发送未压缩数据,导致 Kafka 磁盘占用过多。
✅ 解决方案
- 使用 GZIP 或 Zstd 压缩:高压缩率,减少磁盘占用和网络流量。
- 示例:
- 未压缩:100 万条日志 500MB
- GZIP 压缩后:仅 80MB,节省 84% 存储
- Zstd 压缩后:仅 60MB,比 GZIP 还少 20%
🔧 Kafka 配置
compression.type=gzip # 也可以使用 zstd(更快更高效)
🎯 适用场景
✅ ELK 日志分析(Filebeat + Kafka + Logstash)
✅ Flink 处理 Kafka 日志流
✅ CDN 访问日志传输
6.2 实时流数据处理(Flink / Spark Streaming)
📌 场景描述
- 电商订单、用户行为数据、监控指标需要实时流式处理。
- 生产者每秒写入 几十万 条事件,消费者(Flink/Spark)进行计算。
❌ 传统方式的痛点
- 未压缩数据会导致 Kafka 传输延迟增加。
- 高吞吐数据增加 Kafka Broker 负载,影响集群稳定性。
✅ 解决方案
- 使用 Snappy 或 LZ4 压缩:保证低延迟,高吞吐,快速解压。
- 示例:
- 未压缩:1 秒 100 万条,每条 1KB → 总量 1GB/s
- LZ4 压缩后:仅 400MB/s,解压极快,适用于流式计算。
🔧 Kafka 配置
compression.type=snappy # 或 lz4,适用于高吞吐场景
🎯 适用场景
✅ 实时订单处理(Kafka + Flink)
✅ 用户行为分析(Spark Streaming)
✅ 监控系统数据流(Prometheus + Kafka)
6.3 电商高并发订单系统
📌 场景描述
- 订单系统需要将支付、库存变更等数据通过 Kafka 传输到多个消费者(结算、物流、推荐)。
- 订单数据量巨大,高并发时每秒处理数十万条消息。
❌ 传统方式的痛点
- 高并发导致 Kafka 负载飙升,影响延迟。
- 订单数据结构复杂,未压缩时数据量较大。
✅ 解决方案
- 使用 LZ4 或 Snappy 压缩:快速压缩解压,适应高吞吐写入。
- 示例:
- 未压缩:1 小时 500GB 订单数据
- LZ4 压缩后:仅 150GB,减少 70% 传输成本
- Snappy 压缩后:仅 200GB,解压更快
🔧 Kafka 配置
compression.type=lz4 # 适用于高吞吐订单流
🎯 适用场景
✅ 秒杀系统订单处理(Kafka + Redis)
✅ 库存变更消息流(Kafka + MySQL)
✅ 支付流水异步处理
6.4. 跨数据中心(Multi-DC)Kafka 同步
📌 场景描述
- 企业在多个地区部署 Kafka,需要跨数据中心同步日志或交易数据。
- 由于带宽有限,未压缩数据传输成本高,速度慢。
❌ 传统方式的痛点
- Kafka MirrorMaker 传输数据时,占用大量带宽,增加延迟。
- 存储数据量大,导致远程机房的存储成本上升。
✅ 解决方案
- 使用 Zstd 或 GZIP 压缩:降低带宽消耗,提高传输效率。
- 示例:
- 未压缩:每天跨数据中心传输 10TB 日志
- GZIP 压缩后:仅 2TB
- Zstd 压缩后:仅 1.5TB,节省 85% 带宽
🔧 Kafka 配置
compression.type=zstd # 推荐 Zstd,节省带宽 & 高效
🎯 适用场景
✅ 全球业务同步(美洲-欧洲-亚洲数据中心)
✅ 金融数据跨机房同步(Kafka MirrorMaker)
✅ AWS/GCP/Azure 云环境带宽优化
6.5 数据存储优化(Kafka + HDFS)
📌 场景描述
- Kafka 消息最终存储到 HDFS / S3 / ClickHouse,数据存储成本高。
- 需要降低 Kafka 存储和 HDFS 存储成本,同时保持查询性能。
❌ 传统方式的痛点
- Kafka 数据存储占用大量磁盘,导致 Broker 负载增加。
- HDFS 存储成本高,特别是数据湖存储。
✅ 解决方案
- 使用 GZIP 或 Zstd 压缩:最大限度减少存储空间。
- 示例:
- 未压缩:1 天 Kafka 消息 5TB
- GZIP 压缩后:仅 1TB
- Zstd 压缩后:800GB
🔧 Kafka 配置
compression.type=gzip # 或 zstd,存储优化
🎯 适用场景
✅ Kafka + HDFS(数据归档)
✅ Kafka + ClickHouse(大数据查询)
✅ Kafka + Presto(数据湖查询)
Kafka 压缩方式选择总结
场景 | 推荐压缩算法 | 目标 |
---|---|---|
日志收集(ELK、CDN) | GZIP / Zstd | 存储优化,减少磁盘占用 |
实时流处理(Flink、Spark) | Snappy / LZ4 | 低延迟,高吞吐 |
电商订单高并发 | LZ4 / Snappy | 快速压缩解压,减少 Kafka 负载 |
跨数据中心同步 | Zstd / GZIP | 降低带宽,提升传输效率 |
大数据存储(HDFS、ClickHouse) | GZIP / Zstd | 存储优化,减少磁盘开销 |
相关文章:
Kafka 压缩算法详细介绍
文章目录 一 、Kafka 压缩算法概述二、Kafka 压缩的作用2.1 降低网络带宽消耗2.2 提高 Kafka 生产者和消费者吞吐量2.3 减少 Kafka 磁盘存储占用2.4 减少 Kafka Broker 负载2.5 降低跨数据中心同步成本 三、Kafka 压缩的原理3.1 Kafka 压缩的基本原理3.2. Kafka 压缩的工作流程…...
启元世界(Inspir.ai)技术浅析(二):深度强化学习
深度强化学习(Deep Reinforcement Learning, DRL)是启元世界在人工智能领域的一项核心技术,广泛应用于游戏AI、智能决策等领域。 一、状态(State) 1.1 概念与作用 **状态(State)**是指智能体对环境的感知,是智能体进行决策的基础。在深度强化学习中,状态通常是一个高…...
在K8s中部署动态nfs存储provisioner
背景 之前,我已经在一台worker node上安装了local lvm 的provisioner来模拟需要本地高IOPS的数据库等stafeful应用的实现。 为了后续给虚拟机里的K8s集群安装可用的metrics和logs监控系统(metrics和logs的时序数据库需要永久存储)࿰…...
SQL注入漏洞之绕过[前端 服务端 waf]限制 以及 防御手法 一篇文章给你搞定
目录 绕过手法 前端代码绕过 后端代码绕过 各种字段进行验证 union 大小写绕过 双写逃过 强制类型判断 引号特殊编码处理。 内联注释绕过 注释符绕过 or/and绕过 空格绕过 防御SQL注入的方法 使用预编译语句 使用存储过程 检查数据类型 绕过手法 前端代码绕过…...
C++ 写一个简单的加减法计算器
************* C topic:结构 ************* Structure is a very intersting issue. I really dont like concepts as it is boring. I would like to cases instead. If I want to learn something, donot hesitate to make shits. Like building a house. Wh…...
Effective C++ 规则50:了解 new 和 delete 的合理替换时机
1、背景 在 C 中,new 和 delete 是动态分配内存的核心操作符。然而,直接使用它们有时会增加程序的复杂性,甚至导致内存泄漏和其他问题。因此,了解何时替换 new 和 delete 并选择更适合的内存管理策略,是编写高效、健壮…...
水果实体店品牌数字化:RWA + 智能体落地方案
一、方案背景 随着数字化技术的迅猛发展,实体零售行业正面临前所未有的挑战与机遇。传统的零售模式难以满足消费者对个性化、便捷化、智能化的需求,尤其是在水果等生鲜商品领域,如何通过技术手段提升运营效率、增强顾客体验、拓宽盈利模式&a…...
Docker小游戏 | 使用Docker部署FC-web游戏模拟器
Docker小游戏 | 使用Docker部署FC-web游戏模拟器 前言一、项目介绍项目简介项目预览二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署FC-web游戏模拟器下载镜像创建容器检查容器状态检查服务端口安全设置四、访问FC-web游戏模拟器试玩游戏FC游戏的操作方法…...
【视频+图文详解】HTML基础3-html常用标签
图文教程 html常用标签 常用标签 1. 文档结构 <!DOCTYPE html>:声明HTML文档类型。<html>:定义HTML文档的根元素。<head>:定义文档头部,包含元数据。<title>:设置网页标题,浏览…...
年化19.3%策略集|ctpbee_api替换成openctp整合backtrader实盘方案(代码+数据)
原创内容第782篇,专注量化投资、个人成长与财富自由。 昨天我们把backtraderctpbee的实盘整合代码跑通了,年化19.3%,回撤仅8%的实盘策略,以及backtrader整合CTPBee做实盘(附python代码和数据) 这两周我们加…...
谭浩强C语言程序设计(3) 7章
1、递归实现N的阶乘 c复制 #include <cstdio> // 包含标准输入输出库// 计算n的阶乘 int total 0; // 定义全局变量total用于存储阶乘结果// 递归函数计算阶乘 int fac(int a){// 如果输入的数小于0,输出错误信息if (a < 0){printf("%d < 0,err…...
国产SiC碳化硅功率器件技术成为服务器电源升级的核心引擎
在服务器电源应用中,国产650V碳化硅(SiC)MOSFET逐步取代传统超结(Super Junction, SJ)MOSFET,其核心驱动力源于SiC材料在效率、功率密度、可靠性和长期经济性上的显著优势,叠加产业链成熟与政策…...
深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据 一、服务器如何响应前端请求 前端与后端的交互主要通过 HTTP 协议实现。以下是详细步骤: 1. 前端发起 HTTP 请求 GET 请求:用于从服务器获取数据。POST 请求:用…...
深度学习指标可视化案例
TensorBoard 代码案例:from torch.utils.tensorboard import SummaryWriter import torch import torchvision from torchvision import datasets, transforms# 设置TensorBoard日志路径 writer SummaryWriter(runs/mnist)# 加载数据集 transform transforms.Comp…...
unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等
目录 1 场景数量 SceneManager.sceneCount 2 直接代码生成新场景 SceneManager.CreateScene 3 场景的加载 3.1 用代码加载场景,仍然build setting里先加入配置 3.2 卸载场景 SceneManager.UnloadSceneAsync(); 3.3 同步加载场景 SceneManager.LoadScene 3.3.…...
网易云音乐歌名可视化:词云生成与GitHub-Pages部署实践
引言 本文将基于前一篇爬取的网易云音乐数据, 利用Python的wordcloud、matplotlib等库, 对歌名数据进行深入的词云可视化分析. 我们将探索不同random_state对词云布局的影响, 并详细介绍如何将生成的词云图部署到GitHub Pages, 实现数据可视化的在线展示. 介绍了如何从原始数据…...
Web-3.0(Solidity)基础教程
Solidity 是 以太坊智能合约编程语言,用于编写 去中心化应用(DApp)。如果你想开发 Web3.0 应用,Solidity 是必学的。 Remix - Ethereum IDE(在线编写 Solidity) 特性Remix IDEHardhat适用场景适合 初学者 …...
android获取EditText内容,TextWatcher按条件触发
android获取EditText内容,TextWatcher按条件触发 背景:解决方案:效果: 背景: 最近在尝试用原生安卓实现仿element-ui表单校验功能,其中涉及到EditText组件内容的动态校验,初步实现功能后&#…...
题单:冒泡排序1
题目描述 给定 n 个元素的数组(下标从 1 开始计),请使用冒泡排序对其进行排序(升序)。 请输出每一次冒泡过程后数组的状态。 要求:每次从第一个元素开始,将最大的元素冒泡至最后。 输入格式…...
我的毕设之路:(2)系统类型的论文写法
一般先进行毕设的设计与实现,再在现成毕设基础上进行描述形成文档,那么论文也就成形了。 1 需求分析:毕业设计根据开题报告和要求进行需求分析和功能确定,区分贴合主题的主要功能和拓展功能能,删除偏离无关紧要的功能…...
JVM_类的加载、链接、初始化、卸载、主动使用、被动使用
①. 说说类加载分几步? ①. 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 第一过程的加载(loading)也称为装载验证、准备、解析3个部分统称为链接(Linking)在Java中数据类型分为基本数据类型和引用数据…...
数论问题79一一研究成果
(豆包智能搜索一一李扩继) 李扩继是一位在数学研究尤其是哥德巴赫猜想研究领域有一定成果的中学老师,以下是关于他的具体介绍: ①研究经历:2006年承担咸阳市教研室的立项课题《角谷猜想的研究》,虽未完成角谷猜想的证明ÿ…...
【DeepSeek-V3】AI Model Evaluation Framework and index schedule AI模型能力评价指标及对比
文章目录 AI 模型评估体系 | AI Model Evaluation Framework1. 模型架构信息 | Model Architecture Information2. 英语能力评估 | English Language Proficiency3. 编程能力评估 | Programming Capability Metrics4. 数学能力评估 | Mathematical Capability Assessment5. 中文…...
《程序人生》工作2年感悟
一些杂七杂八的感悟: 1.把事做好比什么都重要, 先树立量良好的形象,再横向发展。 2.职场就是人情世故,但也不要被人情世故绑架。 3.要常怀感恩的心,要记住帮助过你的人,愿意和你分享的人,有能力…...
Elasticsearch的开发工具(Dev Tools)
目录 说明1. **Console**2. **Search Profiler**3. **Grok Debugger**4. **Painless Lab**总结 说明 Elasticsearch的开发工具(Dev Tools)在Kibana中提供了多种功能强大的工具,用于调试、优化和测试Elasticsearch查询和脚本。以下是关于Cons…...
22_解析XML配置文件_List列表
解析XML文件 需要先 1.【加载XML文件】 而 【加载XML】文件有两种方式 【第一种 —— 使用Unity资源系统加载文件】 TextAsset xml Resources.Load<TextAsset>(filePath); XmlDocument doc new XmlDocument(); doc.LoadXml(xml.text); 【第二种 —— 在C#文件IO…...
智慧园区管理平台实现智能整合提升企业运营模式与管理效率
内容概要 在当今数字化的背景下,智慧园区管理平台正逐渐成为企业提升运营效率和管理模式的重要工具。这个平台汇聚了多种先进技术,旨在通过智能整合各类资源与信息,帮助企业实现全面的管理创新。 智慧园区管理平台不仅仅是一个数据处理工具…...
从规则到神经网络:机器翻译技术的演进与未来展望
从规则到神经网络:机器翻译技术的演进与未来展望 引言 还记得早些年用翻译软件翻译一句简单的英文句子,却发现翻译结果让人啼笑皆非的日子吗?从“我喜欢吃苹果”被翻译成“我喜欢吃苹果电脑”,到今天的神经网络机器翻译(Neural Machine Translation, NMT)能够生成语义流…...
[MySQL]事务的隔离级别原理与底层实现
目录 1.为什么要有隔离性 2.事务的隔离级别 读未提交 读提交 可重复读 串行化 3.演示事务隔离级别的操作 查看与设置事务的隔离级别 演示读提交操作 演示可重复读操作 1.为什么要有隔离性 在真正的业务场景下,MySQL服务在同一时间一定会有大量的客户端进程…...
hdfs:介绍三个脚本
1、jps-cluster.sh 如果我们想在Bigdata01 这台电脑上,查看整个集群的服务启动情况,可以使用这个脚本文件。 #!/bin/bash USAGE"使⽤⽅法:sh jps-cluster.sh" NODES("bigdata01" "bigdata02" "bigdata03…...
【Oracle篇】使用Hint对优化器的执行计划进行干预(含单表、多表、查询块、声明四大类Hint干预)
💫《博主介绍》:✨又是一天没白过,我是奈斯,从事IT领域✨ 💫《擅长领域》:✌️擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(…...
【Rust自学】15.7. 循环引用导致内存泄漏
说句题外话,这篇文章真心很难,有看不懂可以在评论区问,我会尽快作答的。 喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω…...
4.scala默认参数值
Scala具备给参数提供默认值的能力,这样调用者就可以忽略这些具有默认值的参数。 def log(message: String, level: String "INFO") println(s"$level: $message")log("System starting") // prints INFO: System starting log(&q…...
前端知识速记—JS篇:null 与 undefined
前端知识速记—JS篇:null 与 undefined 什么是 null 和 undefined? 1. undefined 的含义 undefined 是 JavaScript 中默认的值,表示某个变量已被声明但尚未被赋值。当尝试访问一个未初始化的变量、函数没有返回值时,都会得到 u…...
微信小程序中常见的 跳转方式 及其特点的表格总结(wx.navigateTo 适合需要返回上一页的场景)
文章目录 详细说明总结wx.navigateTo 的特点为什么 wx.navigateTo 最常用?其他跳转方式的使用频率总结 以下是微信小程序中常见的跳转方式及其特点的表格总结: 跳转方式API 方法特点适用场景wx.navigateTowx.navigateTo({ url: 路径 })保留当前页面&…...
【人工智能】基于Python的机器翻译系统,从RNN到Transformer的演进与实现
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 机器翻译(Machine Translation, MT)作为自然语言处理领域的重要应用之一,近年来受到了广泛的关注。在本篇文章中,我们将详细探讨如何使…...
蓝桥备赛指南(5)
queue队列 queue是一种先进先出的数据结构。它提供了一组函数来操作和访问元素,但它的功能相对较简单,queue函数的内部实现了底层容器来存储元素,并且只能通过特定的函数来访问和操作元素。 queue函数的常用函数 1.push()函数:…...
蓝桥云客 好数
0好数 - 蓝桥云课 问题描述 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位…)上的数字是奇数,偶数位(十位、千位、十万位…)上的数字是偶数,我们就称之为“好数”。 给定一个正…...
CF 764B.Timofey and cubes(Java实现)
题目分析 输入n个数字,首尾交换,奇数对换,偶数对不换 思路分析 存入数组,遍历时判断i%20时(数组下标0开始,所以题目分析没有错),对换 代码 import java.util.*;public class Main {public static void ma…...
四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)
四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用) 文章目录 四.3 Redis 五大数据类型/结构的详细说明/详细使用( hash 哈希表数据类型详解和使用)2.hash 哈希表常用指令(详细讲解说明)2.1 hset …...
AIGC(生成式AI)试用 20 -- deepseek 初识
>> 基本概念 Ollama -- 运行大模型,管理运行AI大模型的工具,用来安装布置DeepSeek https://ollama.com/ , Get up and running with large language models. AnythingLLM -- 大模型增强应用,GUI大模型交互程序 Download AnythingLLM …...
你好!这是我自己的CSDN博客!
写于2025年1月30日 我是一个普通的嵌入式软件程序员,喜欢研究Linux(应用层跟内核从都有粗浅的涉略),单片机,操作系统和计算机体系架构等内容,目前是一枚普通的本科生。 笔者是一个朴素的开源主义者…...
将pandas.core.series.Series类型的小数转化成百分数
大年初二,大家过年好,蛇年行大运! 今天在编写一个代码的时候,使用 import pandas as pd产生了pandas.core.series.Series类型的数据,里面有小数,样式如下: 目的:将这些小数转化为百…...
[EAI-027] RDT-1B,目前最大的用于机器人双臂操作的机器人基础模型
Paper Card 论文标题:RDT-1B: a Diffusion Foundation Model for Bimanual Manipulation 论文作者:Songming Liu, Lingxuan Wu, Bangguo Li, Hengkai Tan, Huayu Chen, Zhengyi Wang, Ke Xu, Hang Su, Jun Zhu 论文链接:https://arxiv.org/ab…...
oracle中使用in 和 not in 查询效率分析
在Oracle数据库中,IN和NOT IN的查询效率受多种因素影响,以下是关键点总结和优化建议: 1. IN 的效率 优化方式: IN 通常会被优化为 OR条件 或 半连接(Semi-Join),如果子查询关联到外部表&#x…...
【python】四帧差法实现运动目标检测
四帧差法是一种运动目标检测技术,它通过比较连续四帧图像之间的差异来检测运动物体。这种方法可以在一定的程度上提高检测的准确性。 目录 1 方案 2 实践 ① 代码 ② 效果图 1 方案 具体的步骤如下: ① 读取视频流:使用cv2.VideoCapture…...
指针的介绍4【回调函数、qsort函数的运用】
1.回调函数 1.1定义 回调函数就是通过函数指针而被调用的函数 把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数 回调函数不是由该函数的实现⽅直接调⽤࿰…...
Attention Free Transformer (AFT)-2020论文笔记
名称: Attention Free Transformer (AFT) 来源: [2105.14103] An Attention Free Transformer 相关工作: #Approximatingthedotproduct #Sparselocalattention #Contextcompression #Eliminatingdotproductattention #MLPsforvision 创…...
Pyside的QWebEngineProfile类
QWebEngineProfile 是 PySide/Qt 中用于管理浏览器引擎(WebEngine)配置的类,属于 QtWebEngineCore 模块。它主要用于控制网页的全局行为,例如缓存、Cookie、持久化存储、用户代理(User-Agent)、代理设置等。…...
Java继承中的静态方法隐藏与实例变量隐藏:深入解析与最佳实践
引言 在Java面向对象编程中,继承是实现代码复用的核心机制。然而,继承中的静态方法(static)和实例变量的行为常常让开发者感到困惑。许多初学者甚至经验丰富的程序员容易混淆方法覆盖(Override)、方法隐藏…...