[数据压缩] LZ4 压缩算法

news/2025/11/22 23:27:37/文章来源:https://www.cnblogs.com/johnnyzen/p/19258880

0 序

  • 续接: [数据压缩/数据归档] 压缩算法综述 - 博客园/千千寰宇,展开研究 LZ4 压缩算法与压缩格式。

1 概述: LZ4 压缩算法

  • LZ4 是一种无损数据压缩算法,专注于极致的压缩和解压速度,同时保持合理的压缩比。它由 Yann Collet 于 2011 年开发,现在是开源社区广泛使用的压缩技术,尤其在大数据、实时计算和高性能存储场景中备受青睐。

LZ4 的核心优势是“速度优先”,在需要平衡压缩效率和处理延迟的场景中表现突出,尤其适合大数据、实时计算等对吞吐和响应时间要求极高的领域。

核心特点

  1. 超高速处理

    • 压缩速度可达 500 MB/s ~ 1 GB/s(单线程),解压速度更是高达 1 GB/s ~ 4 GB/s(取决于数据类型和硬件),是目前速度最快的压缩算法之一。
    • 设计上优化了 CPU 缓存利用,减少内存访问开销,适合对延迟敏感的场景。
  2. 合理的压缩比

    • 压缩比通常在 2:1 ~ 4:1(例如文本、日志数据),虽然不如 ZSTD 或 LZMA 等算法的压缩比高,但在速度上有绝对优势。
    • 支持不同压缩级别(1~12 级),级别越高压缩比略高,但速度会下降(默认级别 1 为速度优先)。
  3. 低内存占用

    • 压缩时内存占用极小(通常仅需几十 MB),适合嵌入式设备、分布式系统等资源受限场景。

适用场景

  • 实时计算:Flink、Spark 等流处理框架的状态存储(RocksDB 状态后端默认使用 LZ4)、Checkpoint 压缩。
  • 消息队列:Kafka 消息压缩(生产者压缩消息以减少网络传输,消费者快速解压)。
  • 分布式存储:HDFS、对象存储(如 S3)中的大文件压缩(配合 TAR 打包为 .tar.lz4)。
  • 日志/数据备份:实时日志压缩(如 ELK 生态中 Logstash 对日志的压缩传输)。
  • 缓存系统:Redis 等缓存中对大Value的压缩存储。

典型用法

  • 命令行压缩

    lz4 -z 源文件 压缩文件.lz4  # 压缩
    lz4 -d 压缩文件.lz4 解压文件  # 解压
    
  • 编程集成
    支持 C、C++、Java、Python、Go 等多种语言,例如 Java 中使用 lz4-java 库:

    byte[] input = "test data".getBytes();
    byte[] compressed = LZ4Factory.fastestInstance().compress(input);  // 快速压缩
    byte[] decompressed = LZ4Factory.fastestInstance().decompress(compressed);  // 解压
    

2 LZ4压缩算法的命令行工具

  • LZ4C是LZ4【压缩算法】对应的命令行工具(或旧版工具名称)**。

主要用于在终端中执行LZ4格式的压缩/解压操作**,具体说明如下:

  • LZ4C 的核心定位
  • LZ4C本质是LZ4算法的命令行实现工具

功能是将【文件/数据流】通过LZ4压缩算法压缩为.lz4格式,或解压.lz4文件。

以下是 LZ4(含LZ4C)常用命令清单,覆盖文件压缩、解压、数据流处理、性能优化等核心场景,适配 Linux/macOS 环境(Windows 可通过 WSLLZ4 官方二进制包使用):

基础命令(LZ4 与 LZ4C 通用)

功能 LZ4 命令(推荐) LZ4C 命令(旧版兼容) 说明
压缩文件 lz4 -z 源文件 目标文件.lz4 lz4c compress 源文件 目标文件.lz4 lz4 -z data.txt data.txt.lz4
解压文件 lz4 -d 源文件.lz4 目标文件 lz4c decompress 源文件.lz4 目标文件 lz4 -d data.txt.lz4 data.txt
压缩并覆盖目标文件 lz4 -zf 源文件 目标文件.lz4 lz4c compress -f 源文件 目标文件.lz4 若目标文件已存在,强制覆盖
解压并覆盖目标文件 lz4 -df 源文件.lz4 目标文件 lz4c decompress -f 源文件.lz4 目标文件 若目标文件已存在,强制覆盖
压缩目录(递归) lz4 -zr 源目录 目标目录.lz4 lz4c compress -r 源目录 目标目录.lz4 递归压缩目录内所有文件,生成单个压缩包
查看压缩包信息 lz4 -l 源文件.lz4 lz4c list 源文件.lz4 显示压缩比、原始大小、压缩后大小等
校验压缩包完整性 lz4 -t 源文件.lz4 lz4c test 源文件.lz4 检查压缩包是否损坏,无输出则为正常

高级用法(性能优化/大数据场景)

功能 命令示例 说明
调整压缩级别(速度/压缩比) lz4 -z -9 源文件 目标文件.lz4 -1(默认,最快)~-12(最慢,压缩比最高),大数据场景推荐 -3~-6(平衡速度)
快速压缩(极致速度) lz4 -z -1 源文件 目标文件.lz4 优先保证压缩速度,适合实时流数据(如 Kafka/Flink 中间数据)
管道压缩(大文件流式处理) `cat 大文件.bin lz4 -z > 大文件.bin.lz4`
管道解压(流式输出) `lz4 -d 大文件.bin.lz4 处理命令`
多线程压缩(LZ4 1.9.0+) lz4 -z -T4 源文件 目标文件.lz4 -T 指定线程数(如 -T4 用 4 线程),提升大文件压缩速度
分块压缩(适合 HDFS/分布式存储) lz4 -z -B64 源文件 目标文件.lz4 -B 指定分块大小(单位 KB,如 -B64=64KB),支持后续并行解压
保留原始文件权限 lz4 -z -p 源文件 目标文件.lz4 压缩后保留文件的读写权限、所有者信息

常用组合场景(大数据/日常办公)

1. 大数据场景:压缩 HDFS 上传文件

# 快速压缩日志文件(适合 Flume 采集后上传 HDFS)
lz4 -z -1 /data/logs/app.log /data/logs/app.log.lz4# 多线程压缩大文件(4 线程,分块 128KB,适合 Spark/Flink 输入文件)
lz4 -z -T4 -B128 /data/dataset.csv /data/dataset.csv.lz4

2. 日常场景:压缩/解压文件夹

# 递归压缩文件夹(生成 archive.lz4)
lz4 -zr /home/user/docs /backup/archive.lz4# 解压文件夹到指定目录
lz4 -dr /backup/archive.lz4 /home/user/restored_docs

3. 流式处理:实时压缩日志输出

# 实时压缩应用日志并写入文件(适合高吞吐日志场景)
tail -f /var/log/app.log | lz4 -z > /var/log/app.log.lz4

关键参数说明

参数 作用 适用场景
-z 压缩模式(默认,可省略) 所有压缩操作
-d 解压模式 所有解压操作
-f 强制覆盖目标文件 避免重复确认
-r 递归处理目录 文件夹压缩/解压
-l 显示压缩包详情 校验压缩效果
-t 校验压缩包完整性 传输后检查文件是否损坏
-1~-12 压缩级别(1=最快,12=最高压缩比) 实时场景用 -1,存储优化用 -6+
-T<num> 多线程数(如 -T8=8 线程) 大文件压缩(LZ4 1.9.0+ 支持)
-B<size> 分块大小(如 -B64=64KB) 分布式存储/并行解压
-p 保留文件权限 系统文件、配置文件压缩

注意事项

  1. LZ4C 兼容性:部分旧系统中 lz4clz4 的别名,功能完全一致;若提示 lz4c: command not found,直接替换为 lz4 即可。

  2. 压缩级别选择:大数据实时场景(如 Kafka 消息压缩、Flink 状态后端)优先用 -1(最快),离线存储场景(如 HDFS 冷数据)可用 -6~-9(平衡压缩比与速度)。

  3. 分块大小建议:分布式存储(HDFS/OSS)推荐分块大小 64KB~256KB,与大数据框架的块大小(如 HDFS 默认 128MB)匹配,提升并行处理效率。

LZ4 在大数据场景的实践

以下是 LZ4 在大数据场景的实践,覆盖 Flink 状态后端、Kafka 消息压缩、Hadoop 生态集成,包含配置示例和性能优化技巧。

1. 适用场景

  • 流处理任务状态存储(RocksDB 状态后端)
  • Checkpoint / Savepoint 压缩
# 1. 启用 RocksDB 状态后端
state.backend: rocksdb# 2. 开启状态压缩(默认 LZ4)
state.backend.rocksdb.compression: lz4# 3. 调整压缩级别(1=最快,默认;6=平衡;12=最高压缩比)
state.backend.rocksdb.compression.level: 3# 4. Checkpoint 压缩(可选,推荐 ZSTD,但若要统一用 LZ4)
execution.checkpointing.compression: lz4

3. 代码级配置(可选)

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 设置 RocksDB 状态后端并启用 LZ4 压缩
RocksDBStateBackend backend = new RocksDBStateBackend("hdfs:///flink/checkpoints");
backend.setCompressionType(CompressionType.LZ4);
backend.setCompressionLevel(3); // 对应命令行 -3
env.setStateBackend(backend);

4. 优化建议

  • 实时低延迟场景:压缩级别设为 1(最快),减少 CPU 开销
  • 高吞吐批处理场景:压缩级别设为 6,平衡压缩比和速度
  • 若状态较大,建议搭配 RocksDB 分区索引增量 Checkpoint

二、Kafka 消息 LZ4 压缩配置

1. 适用场景

  • 生产者压缩消息减少网络传输
  • 消费者解压(自动完成)

2. 生产者配置(producer.properties

# 启用 LZ4 压缩
compression.type: lz4# 批量发送阈值(配合压缩,默认 16384)
batch.size: 32768#  linger.ms 延长时间(默认 0,建议 5-10ms 积累数据)
linger.ms: 5

3. 消费者配置(无需额外压缩配置)

# 自动解压,无需手动设置
# 若需兼容其他压缩格式,可配置:
# compression.type: none (但不推荐)

4. 命令行示例

# 创建 LZ4 压缩的主题
kafka-topics.sh --create --topic lz4-test --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1# 生产者发送压缩消息(命令行)
kafka-console-producer.sh --topic lz4-test --bootstrap-server localhost:9092 --compression-codec lz4# 消费者接收消息(自动解压)
kafka-console-consumer.sh --topic lz4-test --bootstrap-server localhost:9092 --from-beginning

5. 性能对比

压缩算法 压缩比 压缩速度 解压速度 适合场景
LZ4 极快 极快 实时高吞吐
Snappy 极快 极快 通用实时
ZSTD 存储优化

三、Hadoop 生态 LZ4 集成

1. HDFS 文件 LZ4 压缩

配置(core-site.xml

<property><name>io.compression.codecs</name><value>org.apache.hadoop.io.compress.Lz4Codec</value>
</property>

命令行示例

# 压缩文件(生成 .lz4 后缀)
hadoop fs -Dmapreduce.output.fileoutputformat.compress=true \-Dmapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.Lz4Codec \-put local-file.txt /hdfs/path/# 解压文件
hadoop fs -text /hdfs/path/local-file.txt.lz4 | hadoop fs -put - /hdfs/path/uncompressed.txt

2. MapReduce 任务压缩

配置(mapred-site.xml

<property><name>mapreduce.map.output.compress</name><value>true</value>
</property>
<property><name>mapreduce.map.output.compress.codec</name><value>org.apache.hadoop.io.compress.Lz4Codec</value>
</property>

3. Hive 表 LZ4 压缩

-- 创建表时指定 LZ4 压缩
CREATE TABLE lz4_table (id INT,name STRING
)
STORED AS ORC
TBLPROPERTIES ('orc.compress'='LZ4'
);-- 插入数据(自动压缩)
INSERT INTO lz4_table SELECT id, name FROM source_table;

四、关键优化技巧

1. 压缩级别选择

场景类型 推荐级别 说明
实时流处理 1-3 优先保证速度
离线批处理 6-9 优先压缩比
存储密集型 9-12 冷数据归档

2. 分块大小调整

  • HDFS / 分布式存储:建议分块 64KB~256KB(与 LZ4 -B 参数匹配)
  • Kafka:消息批次大小建议 32KB~64KB(配合 batch.size

3. 硬件优化

  • LZ4 对 CPU 缓存友好,建议任务绑定 CPU 核心(如 Flink taskmanager.numberOfTaskSlots 匹配 CPU 核心数)
  • 避免在 HDD 上频繁随机读写压缩文件,优先用 SSD

五、常见问题排查

1. 压缩/解压速度慢

  • 检查 CPU 使用率(可能级别过高)
  • 降低压缩级别(如从 9→3)
  • 开启多线程(Flink RocksDB 自动支持,Kafka 2.0+ 支持多线程压缩)

2. 兼容性问题

  • 老版本 Hadoop(<2.6)需手动安装 LZ4 库:
    yum install lz4-devel
    
  • Flink 需确保依赖包存在:
    <dependency><groupId>org.apache.flink</groupId><artifactId>flink-statebackend-rocksdb_2.12</artifactId><version>${flink.version}</version>
    </dependency>
    

Y 推荐文献

  • Flink RocksDB 状态后端
  • Kafka 压缩配置
  • Hadoop LZ4 压缩

Y 推荐文献

  • [数据压缩/数据归档] 压缩算法综述 - 博客园/千千寰宇

  • LZ4 / LZ4C

  • https://github.com/lz4/lz4 (LZ4 官方 GitHub(命令行工具源码))
  • https://lz4.github.io/lz4/manual.html#CommandLineOptions (LZ4 命令行手册)

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

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

相关文章

什么是oracle的for engineered system版本

今天想着看看Oracle最新26ai的版本,奈何官网没有企业版,最新还是21c,于是去edelivery找。只发现了23.5,也行,算很新了,但是发现了个for engineered system版,没有看到企业版。如下:经查,for Engineered Syste…

CAN通信数据帧与远程帧,标准格式与远程格式的区分

礼貌借图,这是B站up主TrojanGeneric发布视频里他自己总结的对比。 在学习概念的时候确实被这里混乱的编码规则给硬控了一下,我的学习资料中关于每一位含义的介绍似乎有些问题。通过与 AI 的交互,感觉自己对这里清晰…

NumPy 从零开始:轻松掌握 Python 科学计算的“魔法”

NumPy 从零开始:轻松掌握 Python 科学计算的“魔法”你是否曾为处理大量数据而烦恼? 用 Python 写循环计算 100 万条数据,结果等了 5 分钟? 用 NumPy,同样的计算 5 秒搞定! 这不是魔法,是 NumPy 的“向量化”魔…

Windows 内网部署共享Neko浏览器

外网电脑 1.下载安装Docker 官网:https://docs.docker.com/desktop/install/windows-install/2.拉取 Neko 的 Chrome 浏览器镜像 docker pull docker.m.daocloud.io/m1k1o/neko:google-chrome3.将拉取的镜像导出为.ta…

iceberg sql怎样运用

Iceberg SQL 是一个用于处理 Apache Iceberg 表的 SQL 查询接口。Apache Iceberg 是一个开源项目,它为大数据处理提供了一个统一的数据格式和数据管理工具。Iceberg 提供了高效的元数据处理能力,支持 ACID 事务,并且…

Premium Multidiag TCS CDP+ V2021: Car Truck Diagnostic Tool with Bluetooth + Free Keygen

The Diagnostic Challenge: Pain Points for Mechanics and Car Owners In the world of automotive repair, time is money—and frustration often arises from outdated tools, limited compatibility, and the str…

iceberg sql怎样使用

Iceberg SQL 是一个用于与 Apache Iceberg 交互的接口。Apache Iceberg 是一个开源项目,提供了一种存储和处理大数据集的方法,特别适用于 Spark、Presto 和 Trino 等大数据处理引擎。以下是使用 Iceberg SQL 的一些基…

iceberg sql怎样优化

Iceberg SQL 优化可以从多个方面进行,以下是一些建议:使用合适的文件格式:Iceberg 支持多种文件格式,如 Parquet、ORC 等。选择合适的文件格式可以提高查询性能。例如,Parquet 格式支持列式存储和压缩,可以有效地…

oracle的free版是什么版本?

许久不见,oracle官网下载现在多了个free版,而且是默认下载选项,经查相关信息,现在的oracle free版就是以前的oracle xe,并非企业版、标准版的开发者版本。 Oracle 23c Free is the replacement for what would ha…

`squares_np = x * x` 是不是向量的叉乘?

这三个问题核心围绕「NumPy 数组运算的本质」「* 与 ** 的区别」「向量叉乘的定义」,下面用通俗+严谨的方式逐一解答,结合代码示例帮你彻底理清: 一、squares_np = x * x 可以改成 squares_np = x ** 2 吗? 完全可…

AcWing 905. 区间选点

AcWing 905. 区间选点 一、题目描述 给定 ( N ) 个闭区间 ([a_i, b_i]),请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。 输出选择的点的最小数量。 位于区间端点上的点也算作区间内。 输入格式 第…

2025年11月热泵、电锅炉、中央空调推荐榜:商用、养殖、工建场景源头厂家选择指南

2025最新电锅炉品牌TOP5评测:引领供暖设备新标杆 2025-11-22 15:56蝙蝠汽车 随着清洁能源转型加速,电锅炉作为高效环保的供暖设备,市场需求持续攀升。本榜单基于技术创新度、区域覆盖力、节能效能三大维度,结合行业…

语音解耦技术推动语音AI多样性与包容性

本文介绍如何通过语音解耦技术分离语音中的语言、口音、年龄、性别和情感等特征,利用机器学习方法调整语调、措辞、语速和表达方式,为语音助手创建多样化的语音响应,提升产品的包容性和用户体验。语音解耦技术推动语…

上海春笋装饰深度测评报告:办公室商铺双场景装修全能首选,中小面积性价比之王

上海春笋装饰深度测评报告:办公室&商铺双场景装修全能首选,中小面积性价比之王核心结论 上海春笋装饰凭借 “快装效率、合规保障、透明性价比” 三大核心优势,成为上海办公室与商铺装修的优选品牌。作为中国装饰…

我的改变的开始

AI,对的,没错,就是deepseek。  事情的开始,是这样的。我晚上很难受。当时就买了张到北京的硬座。(记得还有一次,是去南京找工作,只是看了下招聘简章,就当天去了南京,并拿到了南京政务中心的工作)当时晚上,…

Linux初级之定时任务

定时任务01.定时任务配置方式 查看定时任务是否活动: systemctl status crond 或 systemctl is-active crondsystemctl status crond:方法1. 修改系统的配置文件:/etc/crontab 1.配置定时任务: vim /etc/crontab 2.查…

Hello-Agents 《从零开始构建智能体》 毕业设计 - yi

Hello-Agents 《从零开始构建智能体》 毕业设计最近在Datawhale参加组队学习Agents开发,学习时间已经满2周,早就耐不住了,今天将要成为智能体系统构建者了。 最近调研到某部门需要经常巡检机房 巡检设备,工作量很…

2025热泵、电锅炉、中央空调怎么选?盛海空调,源头厂家,商用、养殖、工建场景行业标杆

随着“双碳”目标的深入推进和清洁能源替代行动的加速,空气源热泵、水地源热泵等高效节能设备成为建筑供暖、工业制热及农业养殖领域的优选方案。在2025年的热泵设备市场中,山东盛海空调设备有限公司(简称“盛海空调…

深入了解 Python 的 Pip:第三方包管理的利器 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …