Kafka消息压缩算法对比与调优实践:gzip/snappy/lz4/zstd如何选
在Kafka集群调优的日常里消息压缩经常被当成一个“加了就行”的开关。但真正做性能压测的时候你会发现什么时候压缩、用哪种算法、批量要攒多大这几个因素直接把带宽、磁盘和CPU这三项资源的平衡搅在一起。这篇内容围绕Kafka的消息压缩算法对比把gzip、snappy、lz4、zstd这四种主流方案从压缩原理、实测表现到配置落地全部过一遍适合正在做Kafka性能优化、或者准备给现有集群定义默认压缩策略的大数据开发和运维同学参考。我见过不少团队一开始图省事直接用了默认的none结果线上流量一涨网络被打满磁盘写入也扛不住。后来逐个试压缩算法又发现有的CPU飙得很高有的压缩率远低于预期。所以与其照着网上的“推荐配置”抄不如先把每个算法在Kafka这条链路里到底干了什么搞明白。这篇文章就是我基于实际压测和线上调整经验的一次总结。1. Kafka消息压缩到底压在了哪个环节1.1 触发时机生产者压缩消费者解压很多刚接触Kafka的人都会有个误解以为压缩是Broker端干的活。实际上Kafka的压缩行为主要发生在Producer端Broker只是负责存储和转发这些已经压缩过的字节并不会在写入磁盘时再帮你压一遍。消费者端拉取到数据之后再根据消息头里记录的压缩算法完成解压还原成原始消息交给业务逻辑处理。这个链路带来的直接结果就是压缩节省的是网络传输带宽和Broker磁盘占用而消耗的CPU主要集中在Producer侧发送线程和Consumer侧拉取线程上。Broker本身的CPU开销非常小除非它需要解压消息去校验CRC或者做深层次的消息转换。明白了这一点后面做容量评估的时候就清楚多了。Kafka的压缩是按批次ProducerBatch来做的不是逐条消息单独压缩。Producer把多条消息攒成一个Batch对这个Batch的整个字节数组做一次压缩。之所以要按批次而不是按单条压缩是因为压缩算法本身靠的是“找重复”来缩减数据。批次里的消息越多、内容越长冗余模式越容易被算法捕获压缩率就越高。而且每一次压缩初始化、生成压缩头也有固定开销分摊到多条消息上才会显得划算。所以在实际生产里如果linger.ms设得太短消息刚来两条就被Sender线程拎走发出去Batch太小压缩率会非常难看甚至出现压缩后体积反而比原始数据更大的情况。这个坑后面专门讲。1.2 收益量化算清楚能省多少资源我们用数据直观感受一下。假设业务持续发送100 MB/s的JSON日志在不压缩的情况下整个链路每秒要承载100 MB上行流量Broker磁盘每秒也要多写100 MB。如果改用lz4按后面测试里约52%的压缩后体积来算网络和磁盘都直接砍到52 MB/s左右整体降幅接近一半。如果某个机房网络专线带宽只有200 Mbps经过压缩之后本来只能跑25 MB/s的通道现在能承载接近50 MB/s的原始数据量。但代价也很明确Producer所在机器的CPU会多出一块开销。不同的压缩算法CPU开销差异非常大gzip在压缩阶段会明显压榨单核性能而lz4和snappy就好得多。所以说到底选压缩算法前要先给自己算一笔账如果瓶颈在带宽或磁盘压缩率高的算法价值最大。如果Producer的CPU核数已经吃紧优先选CPU开销低、速度快的算法。如果压缩对端到端延迟有影响还要考虑批次积累的等待时间。有一个经验值得记住压缩收益最明显的场景是日志、监控指标、JSON/XML等文本型数据这类数据里重复字段、公共前缀、时间戳格式出现的频率很高。相反图片、音视频、已经压缩过的文件比如二次压一个gz包或者充满随机UUID的消息压缩率会非常低强行开压缩只会白白消耗CPU。2. 四种主流压缩算法逐项拆解2.1 gzip压缩率标杆CPU开销大户gzip是工作里最常见的通用压缩格式底层基于DEFLATE算法组合了LZ77匹配技术和Huffman编码。它追求的是高压缩率所以在压缩阶段会花大量CPU时间去寻找更长的重复串、更优的编码表。在Kafka里gzip是最早支持的压缩算法兼容性最好几乎所有客户端版本都能识别。这既是优点也是束缚。从性能角度看gzip的压缩吞吐是四者里最低的CPU占用也很高在高吞吐Kafka链路上容易拖慢Producer发送节奏。而且gzip解压速度也不占优势Consumer在高并发消费时解压耗时可能成为消费端的热点。所以gzip更适合的场景是网络带宽极度紧张、磁盘成本敏感而且CPU资源相对宽裕的离线链路。比如数据量级很大但时效要求不高的夜间批处理任务用gzip把落盘体积压到最小性价比很明显。2.2 snappy老牌快压缩中规中矩snappy是开源社区早期为“高速压缩”设计的算法从一开始就没打算在压缩率上跟gzip硬拼它追求的是极低的压缩延迟和较高的吞吐。Kafka里snappy的兼容性也非常好从0.8.x时代就一直被支持很多旧集群的compression.type默认就是snappy。实际表现上snappy的压缩率大概处在“能压但压得不多”的水平比lz4略差一点压缩速度低于lz4解压速度也低于lz4。放在今天看snappy更像是一个“历史稳妥选项”。如果你的集群版本足够新而且没有必须兼容旧客户端的约束我通常不推荐新业务再选snappy作为默认因为lz4几乎在每个维度上都比它表现更好。不过snappy在消息格式较旧、客户端版本很久远的场景下仍有价值。比如某些历史存量系统还在用老版本的客户端库此时换成lz4或zstd可能引入额外的兼容性验证成本保守沿用snappy反而是最稳的选择。2.3 lz4工程上最均衡的高速选项lz4是LZ77家族的另一个变体它在实现上做了大量针对CPU缓存和内存访问的优化所以压缩和解压速度都非常快内存占用也控制得很好。在Kafka生产环境中lz4可以称得上“默认优选项”因为它在压缩率、CPU开销、速度三者之间取得了一个很舒服的平衡点。实测里lz4的压缩率虽然通常不如zstd和gzip但它的压缩吞吐和解压吞吐非常亮眼。如果业务场景是持续高吞吐、消息内容重复度又不算特别高lz4能保证写入不被压缩拖慢同时稳定省下一半左右的带宽和磁盘。lz4在Kafka里全面可用是在新版本消息格式之后的事情因为V2的RecordBatch对压缩信息的封装更规范。如果你维护的集群和客户端都已经升级到较新版本lz4基本是开箱即用的不需要额外改太多参数。2.4 zstd压缩率与速度兼得现代首选zstd是开源社区最近几年推广速度最快的高压缩率算法它的核心理念是在接近gzip压缩率的水平下把压缩速度提高一个量级。实现上用了更高效的熵编码技术FSE和可训练的字典机制所以对文本型数据格外友好。Kafka从2.1版本开始原生支持zstd。之所以说它是“现代首选”是因为在很多实际数据集上zstd的压缩率逼近甚至偶尔反超gzip同时压缩吞吐可以达到gzip的好几倍。打个比方gzip像是慢工出细活的老工匠zstd则像是自动化流水线成品率接近但产能翻了倍。但zstd也有自己的使用前提必须依赖新版本的消息格式。也就是说Producer和Consumer的客户端版本都不能太老否则会出现无法识别解压格式的兼容性问题。另外zstd在压缩极高吞吐数据时内存占用会比lz4略高不过一般不会成为瓶颈。下面用一张表快速对比这四个算法在关键维度上的差异方便直观建立初选印象。维度gzipsnappylz4zstd压缩率等级高一般一般高压缩速度慢较快很快较快解压速度较慢快很快快CPU开销高中等较低中低Kafka兼容版本要求很低较低需较新版本2.1以上典型使用场景离线冷数据老集群兼容高吞吐主链路大日志高压缩3. 模拟压测不同数据特征下的实测表现3.1 测试数据设计思路只看算法原理不够直观我用两组有代表性的模拟数据做了对比测试。模拟测试的目的不是给出“全行业统一标准答案”而是帮大家建立量级概念方便在自己的环境里复现同一个测试方法。第一组是高冗余文本数据模拟的是最常见的JSON业务日志每条消息1KB左右包含公共字段名、相似时间戳、重复状态码。这类数据在真实链路里压缩收益最可观。第二组是低冗余数据结构模拟的是设备ID加随机UUID加随机数字的Key-Value消息每条消息同样是1KB左右但内部重复模式极少专门用来检验“该不该开压缩”的边界情况。测试环境是尽量贴近生产规格的机器8核CPU、16GB内存Kafka和压测Producer部署在同一台物理机上。指标主要看四个压缩后体积占比、压缩吞吐、解压吞吐、CPU综合开销。3.2 高冗余文本数据的实测结果第一组数据总量约1GB经过四种算法压缩后得到的结果如下表所示。算法压缩后体积占比压缩吞吐解压吞吐CPU开销感受gzip约28%约80 MB/s约250 MB/s高snappy约48%约450 MB/s约700 MB/s中等lz4约52%约650 MB/s约900 MB/s较低zstd约30%约300 MB/s约600 MB/s中低注意这个数据是模拟环境的参考值不同CPU型号、Kafka版本、消息内容都会让数字上下浮动但各算法之间的相对关系是比较稳定的。从结果能看出几个关键结论。第一gzip和zstd在压缩率上处于同一梯队都压到了30%左右但zstd的压缩吞吐明显高于gzip所以只要客户端版本允许用zstd替代gzip几乎是零成本的升级。第二lz4的压缩率虽然垫底但压缩吞吐和解压吞吐都是最高的在带宽不是极紧、但CPU已经接近瓶颈的链路上lz4往往是保住吞吐上限的不二之选。第三snappy在这里确实比较尴尬压缩率不如gzip和zstd速度不如lz4除非有兼容性约束不然没什么理由优先选它。3.3 低冗余数据结果什么时候不该压缩第二组数据的结论同样重要。在这一组模拟数据里压缩率普遍惨淡算法压缩后体积占比gzip约82%snappy约90%lz4约92%zstd约84%这类非重复型消息即使交给压缩率最高的gzip体积也只缩减了不到两成而CPU开销却实打实增加了。在这时候强行开压缩等于花大价钱买一点微弱的收益而且高压缩率算法已经把CPU吃得很紧对在线链路的延迟影响会很明显。所以更理性的做法是如果你的业务消息以随机序列、加密串、音视频二进制为主就不要在Kafka层面做消息压缩了。与其耗费CPU不如把精力放在调整批量大小、优化序列化格式上。反过来如果是能确认的高冗余文本型数据zstd和lz4都是很值得一试的选项。4. 从配置到验证完整实操流程4.1 Producer端参数配置与批量设定Producer端开启压缩非常简单核心参数就一个compression.type可选值包括none、gzip、snappy、lz4、zstd。下面这段Java配置我直接贴出来Properties props new Properties(); props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, zstd); props.put(ProducerConfig.BATCH_SIZE_CONFIG, 65536); props.put(ProducerConfig.LINGER_MS_CONFIG, 20); props.put(ProducerConfig.ACKS_CONFIG, all);这里有两个参数是跟压缩强耦合的。linger.ms控制Sender线程在发出一个Batch前等待更多消息的时间默认值是0意思是来一条发一条。如果你开了压缩却不调这个参数Batch根本攒不起来压缩率会非常低。我一般会从20ms开始试如果吞吐要求高、业务对延迟又不敏感甚至可以调到50ms。batch.size则是单个Batch的最大字节数默认16KB有点小对于1KB左右的消息来说一个Batch只能装十几条压缩发挥空间非常有限。生产上我通常从64KB起步观察GC压力和内存占用后再决定要不要继续上调。4.2 Topic级别配置与优先级理解Kafka除了让Producer端自己指定压缩算法还支持在Topic级别做配置命令如下kafka-configs.sh --bootstrap-server localhost:9092 \ --entity-type topics --entity-name order-log \ --alter --add-config compression.typelz4很多新手会问Producer端设置了压缩Broker端也设置了压缩到底听谁的这里有个容易混淆的优先级规则如果Producer端显式配置了compression.type就用Producer端的配置如果Producer端没有配置则由Broker端Topic级别的配置兜底。这个设计意味着你没法用Broker端配置去强制覆盖Producer端的行为。所以在团队协作里比较可靠的做法是把Topic级别配置看成“默认策略”同时在Producer端也显式写明压缩类型避免各个业务方因为依赖不同版本默认值导致同一个Topic里的消息混用了多种压缩算法。混用本身不影响Kafka正常工作因为每条消息都自带算法标识但会带来重复的CPU开销。4.3 消息格式版本容易被忽视的兼容性门槛Kafka的消息格式版本直接影响压缩算法能不能正常工作。老版本的V1消息格式在压缩嵌套、算法标识上支持得不够完整而V2格式0.11之后对压缩字节封装、CRC校验、时间戳都做了重新设计也是zstd能够稳定运行的底子。如果你正在维护一个版本跨度比较大的集群要特别注意Consumer端的client库版本。一个很典型的报错场景是生产端用zstd压缩但某个老版本消费者连Broker都拉取正常一到解压消息就直接抛“Unknown compression type”之类的异常。要做到稳妥我建议在升级压缩策略之前先用扫一遍所有消费端的版本确保它们都满足所用压缩算法的版本要求。否则临时找一个老旧应用去升级客户端比改一个压缩参数要痛苦得多。4.4 如何验证压缩确实生效配置完压缩算法不能只靠“看日志没报错”就放过我习惯用三个手段来验证效果。第一种是数文件。通过kafka-log-dirs.sh脚本查看某个Topic分区目录下的日志段文件总大小再跟Producer端发出的原始数据总量做对比如果压缩生效总量会明显缩小。第二种是抓包或者看网络统计。在Producer机器上观察网卡出口流量跟业务侧记录的数据生产速率对比实际网络流量低于应用层数据速率说明压缩链路是通的。第三种是消费端验证。启动一个消费者把消息全部拉下来对比消费到的消息条数和原始发送条数一致同时观察Consumer所在机器的CPU占用。解压是实打实的CPU消耗如果CPU没有明显变化而网络流量又降了那大概率是产物消息根本没被正确读出来。5. 实战踩坑记录与排查方法5.1 压缩后消息反而变大这个现象最容易出现在小Batch场景。某次线上Kafka集群的Topic开了lz4压缩结果看Broker落盘文件大小跟没压缩几乎没区别个别分区甚至稍微膨胀了一点。排查下来原因有两个一是业务方的Producer把batch.size改成4KB还嫌不够又设了linger.ms0消息就攒不成大Batch重复模式根本组不出来。二是消息体里面有大量随机值和短内容字段压缩算法能捞到的冗余极少。解决办法是把Batch提大到64KB以上并让linger.ms至少达到5ms到20ms用“多等一小会儿”换压缩率实测下来对吞吐影响很有限。5.2 开启压缩后Producer CPU直接顶满有个高吞吐链路在切换成gzip之后Producer的CPU立刻高了好几个百分点吞吐不升反降。原因是gzip的压缩计算量在这四种算法里最大而当时用的是较老的CPU单核算力本来就不富裕压缩线程把发送线程的资源抢走了一部分。这个场景说明选压缩算法不能只盯着压缩率。如果CPU已经是瓶颈gzip绝对不是最优解。把算法换成lz4之后CPU开销降下来发送吞吐明显恢复。要是确实需要高压缩率那就评估能不能给Producer加核数再切zstd尽量让压缩这部分的CPU消耗被富余资源吸收。5.3 Consumer端解压耗时导致延迟升高压缩省了网络和磁盘但代价转移到了Consumer端。某个实时消费链路把压缩从none改成zstd之后消费延迟从几十毫秒涨到了几百毫秒。排查发现Consumer线程数只有2每个线程要扛好几个分区的数据解压计算在线程里排队。解决思路有两个方向提高Consumer的并发线程数让解压从串行变并行或者把fetch.min.bytes调大让每次拉取回来更多数据一次解压摊薄单条解压的固定开销。如果你用的是Java客户端还可以适当调大max.poll.records减少频繁拉取解压带来的线程切换损耗。5.4 多语言客户端之间的参数不匹配Kafka生态里还有不少Python、C/C、Go的客户端实现它们默认参数名跟Java客户端不一定完全相同。比如一些基于librdkafka封装的客户端压缩参数是compression.codec而不是Java里的compression.type。配置的时候要是照搬Java写法经常会第一次提交后漏配消息继续以none格式发送。好在这个问题现在好处理很多主流新版本客户端基本都对参数做了统一映射。建议你在改完配置后不只是重启应用还要实际消费一条消息或者在Broker侧查看消息的压缩标识确保客户端真的把参数吃进去了。5.5 常见问题排查速查表现象可能原因处理建议压缩后体积无明显下降批量太小、消息随机性强调大batch.size和linger.ms优先评估数据可压缩性Producer CPU升高明显压缩算法CPU开销过大换成lz4或在CPU富余时使用zstd消费延迟变大Consumer解压线程不足增加Consumer并发数与单批拉取条数消费者报未知压缩算法客户端版本低于算法要求升级Consumer端client到满足版本要求的版本同一Topic里消息大小差异大Producer端算法不统一统一在Producer侧显式配置压缩类型6. 个人实测后的一些体会最后说点我在反复调整Kafka压缩参数过程中的体会。最核心的一条是先用真实业务数据做小规模压测再根据压测结果定默认压缩策略比照抄任何推荐配置都靠谱。每个业务的消息特征不一样别人家zstd省了70%带宽到了你的随机ID链路可能连20%都省不下来。第二个体会是压缩参数从来不是孤立存在的。compression.type、batch.size、linger.ms三个参数就是一个有机整体只调其中一个是典型的“头痛医头”。我自己常用的调参顺序是先根据CPU核数定算法再根据消息大小定batch.size最后根据延迟预算调linger.ms。三个参数全部到位之后压缩率才会真正体现出来。第三个建议是压缩上线后至少要盯一周的监控数据重点看Producer CPU、GC频率、Broker磁盘增长速率和网络出入流量。如果发现压缩率与压测差异较大重新审视数据特征变化比继续调参更有效。Kafka的消息压缩不是什么黑科技但把它放进整个资源权衡的框架里思考很多困惑都会迎刃而解。

相关新闻

阿里车牌识别API实战:从调用到预处理,提升逆光与夜间识别率

阿里车牌识别API实战:从调用到预处理,提升逆光与夜间识别率

简介:本资源为阿里车牌识别技术的学习与实战项目包,面向计算机视觉初学者、Android开发者及智能交通应用开发者,帮助理解车牌识别从图像预处理、特征提取、车牌定位到字符识别的完整流程,并掌握自定义相机与仿二维码扫描拍照的实现…

2026/10/19 13:52:51 阅读更多 →
人形机器人技术拆解:从全电驱动到强化学习的系统工程实践

人形机器人技术拆解:从全电驱动到强化学习的系统工程实践

最近后台和私信里好几个人问我同一个问题:想研究人形机器人,但项目多、文档杂,从哪下手最合适?我每次都提同一个名字——Atlas。不是那个搞数据库的 Atlas,也不是各种叫 Atlas 的地图库。我说的是真正把人形机器人从实…

2026/10/19 13:52:51 阅读更多 →
手写代码评审辅助工具:基于静态分析与代码块评分,实现机器扫雷人做判断

手写代码评审辅助工具:基于静态分析与代码块评分,实现机器扫雷人做判断

程序员之间最容易翻脸的地方,除了代码风格,就是代码评审。 公司项目组从去年开始严格执行 MR 评审制度,本意是守住质量底线,但真正执行起来,问题特别多。一个 400 行起步的 MR,评审人往往只来得及看两三个…

2026/10/19 13:51:40 阅读更多 →

最新新闻

多智能体协作模式深度解析:主从、对等与混合架构选型指南

多智能体协作模式深度解析:主从、对等与混合架构选型指南

多智能体协作这个题目,最近在项目里几乎是绕不开的。不管是机器人编队、物流调度,还是现在热门的多个AI智能体共同跑一个业务流程,本质上都要回答同一个问题:让一堆各自有感知、有决策的个体一起干活,到底怎么组织它们…

2026/10/19 14:39:53 阅读更多 →
Flume+HBase+Spark2.2构建秒级新闻热点实时分析链路

Flume+HBase+Spark2.2构建秒级新闻热点实时分析链路

简介:这是一份面向高校计算机专业本科生及大数据初学者的毕业设计级实战源码,聚焦基于Spark 2.2构建新闻网实时分析系统的完整实现,解决新闻用户行为日志的采集、存储、流式处理与热点挖掘等典型大数据场景问题。资源共43个文件,含…

2026/10/19 14:39:53 阅读更多 →
pymoo实战:车辆与无人机协同配送集中式模型复现

pymoo实战:车辆与无人机协同配送集中式模型复现

最近总有人拿着低空经济方向的新论文来问:车辆与无人机协同配送的优化模型,到底怎么用代码实现?尤其论文里常见的"集中式协同配送模式",听起来就是车辆带着无人机送货,真到复现的时候却要同时处理车辆路径、…

2026/10/19 14:39:53 阅读更多 →
OpenCode 美化增强指南:用 AI 一键装好 oh-my-opencode

OpenCode 美化增强指南:用 AI 一键装好 oh-my-opencode

最近很多朋友开始折腾 OpenCode,原因很直白:它能直接用 AI 帮你写代码、改配置、跑命令,确实比传统编辑器省事。但省事归省事,刚装完的 OpenCode 默认界面和默认快捷键都比较朴素,用起来总有那么点“不够顺手”。oh-my…

2026/10/19 14:39:53 阅读更多 →
VS Code数据科学提效插件DST:AST解析+内核探针+安全沙箱

VS Code数据科学提效插件DST:AST解析+内核探针+安全沙箱

1. 这不是又一个“语法高亮插件”:它重新定义了VS Code里的数据分析工作流你有没有过这样的时刻:在VS Code里打开一个Jupyter Notebook,写完一段pandas数据清洗代码,想立刻看df.head()结果,却得切到右侧的交互窗口——…

2026/10/19 14:39:53 阅读更多 →
离线环境二进制部署Kubernetes集群完整指南

离线环境二进制部署Kubernetes集群完整指南

做私有化交付这几年,“离线部署K8S集群,而且还得用二进制方式”基本上是隔离网络项目里躲不掉的一关。所谓离线,就是目标机房跟互联网物理隔离,或者网络策略收得很紧,你没法在目标环境直接拉依赖;所谓二进制…

2026/10/19 14:38:52 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →