Flink消费Kafka分区顺序性实战:从原理到Sink配置的端到端避坑指南

1. 从一个线上告警说起:分区顺序性为什么成了老大难

凌晨两点被电话叫醒的滋味,做实时计算的同行应该都懂。那次告警的现象很典型:下游业务方反馈,同一笔订单的状态在结果表里出现了“先终态、后中间态”的诡异回放,也就是本该先到的“已支付”跑到了“已发货”后面。排查了一圈,问题最终落在 Flink 消费 Kafka 时的分区顺序性上。

这个标题看着像是个老生常谈的话题,但真正在生产里踩过坑的人都知道,它远不是“Kafka 单分区有序”这一句话能打发的。Kafka 只保证单分区内消息有序,而 Flink 在消费、并行处理、再到写出结果的整条链路上,有太多环节会把这个顺序打乱。你要处理的是:并行度怎么设、watermark 怎么走、状态怎么存、sink 怎么保证幂等和顺序,甚至 checkpoint 对齐时那点微妙的阻塞行为,都可能让顺序性翻车。

这篇内容适合谁看?如果你正在用 Flink 做实时数仓、实时风控、订单状态流转、CDC 同步这类对“事件先后”敏感的场景,那这篇基本就是给你写的。我会把分区顺序性这件事从原理到实操拆开讲,包括我实际调过的参数、踩过的坑、以及一套可以直接抄作业的配置思路。不堆概念,讲人话,重点放在“为什么这么设计”和“出问题了怎么查”。

先说结论方向:顺序性不是一个开关,而是一条链路上的约束传递。你从 Kafka 的 key 设计开始,到 Flink 的并行度、分区分配、状态后端、sink 并发,每一环都得对齐,缺一环就前功尽弃。下面按这个链路一层层拆。

2. 顺序性的本质:Kafka 和 Flink 各自保证了什么

2.1 Kafka 只承诺单分区有序,别指望跨分区

很多人对 Kafka 的顺序性有误解,以为“我发了消息,消费者就该按我发的顺序收到”。实际上 Kafka 的保证非常克制:同一个 partition 内的消息按写入 offset 严格有序,跨 partition 没有任何顺序保证。

这意味着什么?假设你有一个订单事件流,producer 按订单号做 key 发消息,那么同一个订单的所有事件会落到同一个 partition,顺序是有保证的。但如果你图省事没设 key,用了默认的轮询分区策略,那同一个订单的“支付”和“发货”很可能被分到不同 partition,消费端拿到的顺序就完全看运气了。

这里有个容易被忽略的点:Kafka 的分区数一旦确定,后续扩容会改变 key 到 partition 的映射。比如你原来 6 个分区,订单 A 的 key 哈希后落在 partition 2;扩容到 12 个分区后,同样的 key 可能落到 partition 7。如果历史数据还在旧分区、新数据进了新分区,那这个订单的事件就被拆到两个分区里了,顺序性直接崩掉。所以生产环境里,分区数要在建 topic 时就规划好,宁可多留余量也别频繁扩。

2.2 Flink 的并行消费:一个分区只能被一个 subtask 消费

Flink 的 Kafka source 在消费时有个硬约束:一个 partition 同一时刻只能被一个 source subtask 消费。这是保证单分区顺序的基础。当 source 并行度大于分区数时,多出来的 subtask 会空闲;当并行度小于分区数时,一个 subtask 会消费多个分区。

这里就引出一个关键设计问题:source 并行度到底设多少合适。我的经验是,source 并行度最好等于分区数,这样每个 subtask 恰好负责一个分区,负载均衡且顺序清晰。如果并行度小于分区数,一个 subtask 要串行消费多个分区,虽然每个分区内部还是有序的,但多个分区的消息在 subtask 内部会被交错处理,如果你在算子里有跨分区的状态操作,顺序就可能乱。

举个实际例子。之前有个项目,Kafka topic 有 12 个分区,但 Flink 作业 source 并行度只设了 4。结果每个 subtask 要消费 3 个分区,下游做订单聚合时发现,同一个订单的事件虽然在同一分区有序,但因为聚合算子的 keyBy 把不同订单混在一起处理,加上事件时间乱序,最终输出的顺序就不可控了。后来把并行度调到 12,问题缓解了一大半。

2.3 端到端的顺序性,取决于最弱的那一环

把链路拉通看:Kafka producer 写入 → Kafka 存储 → Flink source 消费 → Flink 算子处理 → Flink sink 写出。顺序性要端到端成立,每一环都不能掉链子。

  • Producer 端:要保证同一业务实体的消息进同一分区,必须显式指定 key,且 key 的哈希分布要均匀。
  • Kafka 端:分区数规划好,避免中途扩容打乱映射。
  • Flink source 端:并行度与分区数匹配,开启 checkpoint 保证消费位点的一致性。
  • Flink 算子端:注意 keyBy 后的状态操作,事件时间与处理时间的取舍。
  • Flink sink 端:这是最容易被忽视的一环,sink 的并发写、批量提交、重试机制都可能打乱顺序。

我见过太多案例,前面都做得很好,结果 sink 用了并行度大于 1 的 JDBC 写入,多个 subtask 并发写同一张表,数据库层面的写入顺序完全不可控,前面的努力全白费。所以下面我会重点讲 sink 这块,因为它是最隐蔽的坑。

3. 实操配置:把顺序性落到每一个参数上

3.1 Source 端的关键配置与并行度计算

先看 source 端的配置。Flink Kafka connector 有几个参数直接关系到顺序性和一致性:

KafkaSource<String> source = KafkaSource.<String>builder() .setBootstrapServers("kafka-broker:9092") .setTopics("order-events") .setGroupId("flink-order-consumer") .setStartingOffsets(OffsetsInitializer.committedOffsets(OffsetResetStrategy.EARLIEST)) .setValueOnlyDeserializer(new SimpleStringSchema()) .setProperty("partition.discovery.interval.ms", "60000") .setProperty("commit.offsets.on.checkpoint", "true") .build();

这里几个点值得展开:

commit.offsets.on.checkpoint设为 true,意思是 offset 提交依赖 checkpoint 完成,而不是自动提交。这是保证 exactly-once 和顺序性的基础。如果关了它用自动提交,作业失败重启后可能从某个中间 offset 开始消费,导致消息重复或丢失,顺序性也就无从谈起。

partition.discovery.interval.ms用于动态发现新分区。如果你的 topic 会扩容,这个参数能让 Flink 感知到新分区。但前面说过,扩容会打乱 key 映射,所以这个参数更多是兜底,不能替代前期规划。

并行度计算上,我的公式是:source 并行度 = topic 分区数。如果作业整体并行度受资源限制,至少保证 source 并行度是分区数的约数,避免出现一个 subtask 消费分区数差异过大的情况。比如 12 个分区,并行度设 6 或 4 都比设 5 好,因为 12 能被 6 和 4 整除,负载更均衡。

3.2 算子链中的顺序陷阱:keyBy 与事件时间

Source 之后就是算子处理。这里最大的陷阱是keyBy 之后的状态操作。keyBy 会把相同 key 的数据路由到同一个 subtask,这本身是有利于顺序性的。但如果你在 keyBy 之前做了 rebalance 或 rescale,数据就被打散了。

另一个坑是事件时间与 watermark。假设你的数据有乱序,watermark 设置得太激进,窗口会提前触发,晚到的数据可能被丢弃或进入侧输出流,导致结果顺序看起来“跳变”。我的建议是:

  • watermark 延迟根据实际乱序程度设置,一般设 5 到 30 秒,通过监控乱序分布来调。
  • 对于顺序性要求极高的场景,考虑用处理时间而非事件时间,牺牲一定的准确性换取顺序稳定。
  • 窗口触发后,如果还有同 key 的晚到数据,用allowedLateness给一个缓冲期。

这里有个实操心得:在 keyBy 之后、窗口之前,加一个KeyedProcessFunction做本地排序缓冲。具体做法是维护一个按事件时间排序的优先队列,等 watermark 超过某个阈值再统一向下游发送。这样能把乱序控制在算子内部,下游拿到的就是有序流。代价是增加了一点延迟和状态开销,但对顺序性敏感的场景很值。

3.3 Sink 端的顺序保证:并发度与幂等写入

Sink 是顺序性最容易翻车的地方。核心原则:如果下游存储不支持并发有序写入,sink 并行度就必须设为 1。

常见的 sink 类型和顺序性处理:

Sink 类型并行度建议顺序保证方式
JDBC 单表写入1串行写入,天然有序
JDBC 分库分表按分片 key 并行同一分片内串行
Kafka 写入按 key 分区同 key 进同分区
文件写入1 或按分区单文件串行追加
Redis 写入按 key 路由同 key 串行

如果业务要求高吞吐又要求顺序,可以用两阶段提交 + 幂等写入。比如写数据库时,用业务主键做唯一约束,配合INSERT ... ON DUPLICATE KEY UPDATE,即使并发写入顺序乱了,最终状态也能收敛到正确值。但这要求你的业务逻辑是“状态覆盖”而非“增量累加”,如果是累加型操作,并发写入就会出错。

我在一个订单状态同步项目里的做法是:sink 并行度设为 1,但用批量提交提升吞吐。每 200 条或每 1 秒提交一次,用事务包裹。这样既保证了顺序,吞吐也能接受。如果单并行度实在扛不住,就按订单号哈希分片,每个分片一个 sink subtask,分片内串行。

4. 排查实录:顺序性问题怎么定位和解决

4.1 典型症状与排查路径

顺序性问题往往不会直接报错,而是表现为业务数据异常。常见的症状和排查方向:

症状一:同一实体的状态出现回退。比如订单从“已完成”变回“处理中”。这通常是消息重复消费或乱序导致的。排查步骤:先看 Kafka 消费位点是否有重复提交,再看 sink 是否有并发写入。

症状二:窗口结果与预期不符。比如统计值偏小或偏大。这多半是 watermark 和乱序处理的问题。检查 watermark 延迟设置,看是否有大量数据进入侧输出流。

症状三:作业重启后数据错乱。这通常是 checkpoint 和 offset 提交不一致导致的。确认commit.offsets.on.checkpoint是否开启,checkpoint 间隔是否合理。

排查时我习惯用这套组合拳:先在 Flink Web UI 看各 subtask 的消费速率和背压情况,再用 Kafka 命令行工具查分区 offset 的提交记录,最后在业务表里抽样对比时间戳。三步下来基本能定位到是哪一环出了问题。

4.2 常见问题速查表

问题现象可能原因解决方案
同 key 消息乱序producer 未设 key 或 key 分布不均显式指定业务 key,检查哈希分布
扩容后顺序错乱分区扩容改变 key 映射避免中途扩容,或做双写过渡
重启后重复消费offset 自动提交与 checkpoint 不一致开启 checkpoint 提交,设 exactly-once
sink 写入乱序sink 并行度大于 1 且无分片并行度设 1 或按 key 分片
窗口结果跳变watermark 过于激进增大 watermark 延迟,加 allowedLateness
状态恢复后错乱状态后端与 checkpoint 不匹配统一状态后端配置,验证恢复流程

4.3 几个我踩过的坑和独家技巧

坑一:以为设了 key 就万事大吉。有次项目 producer 设了 key,但 key 用的是随机 UUID,等于没设。后来改成订单号,问题解决。教训是:key 必须是业务上真正需要保序的实体标识。

坑二:checkpoint 间隔太长导致恢复慢。顺序性依赖 checkpoint,但间隔设成 10 分钟,作业失败后要重放大量数据,期间顺序性无法保证。后来改成 1 分钟,配合增量 checkpoint,恢复时间大幅缩短。

坑三:sink 的批量提交打乱顺序。用 JDBC 批量提交时,如果批量大小设得太大,中间失败重试会导致部分数据重复。解决办法是批量大小适中(100 到 500 条),并配合幂等写入。

一个实用技巧:在关键算子后加一个顺序性校验的旁路。具体做法是用一个ProcessFunction记录每个 key 的最后处理时间戳,如果新来的数据时间戳小于记录值,就打点告警。这样能在问题扩散前发现乱序。

5. 不同业务场景下的顺序性取舍

5.1 强顺序场景:订单状态流转

订单状态流转是典型的强顺序场景。支付、发货、收货这些事件必须严格按时间顺序处理。这种场景下,我的配置是:producer 用订单号做 key,Kafka 分区数固定不扩容,Flink source 并行度等于分区数,算子内用事件时间加缓冲排序,sink 并行度设 1 或按订单号分片。

代价是吞吐受限,但订单状态流转的量级通常不会特别大,单并行度 sink 配合批量提交足够应付。如果量真的很大,就按订单号哈希分片,保证同一订单进同一分片。

5.2 弱顺序场景:日志聚合与指标统计

日志聚合这类场景,顺序性要求没那么高,偶尔乱序不影响最终统计结果。这种场景下可以放宽约束:source 并行度可以大于分区数,sink 可以并发写入,用聚合函数保证最终一致性。重点放在吞吐和延迟上,顺序性用 watermark 和窗口来兜底。

5.3 折中方案:分区内有序 + 全局最终一致

大多数场景其实介于两者之间。我的折中方案是:保证分区内有序,全局用幂等写入达到最终一致。具体做法是 source 和算子保证分区内顺序,sink 用业务主键做幂等,即使并发写入顺序乱了,最终状态也能收敛。这样既保证了吞吐,又满足了业务对最终一致性的要求。

这个方案的关键是业务逻辑要设计成“状态覆盖”而非“增量累加”。比如订单状态用UPDATE而非UPDATE ... SET count = count + 1。如果是累加型,就得回到强顺序方案。

6. 监控与验证:让顺序性问题无处遁形

6.1 关键监控指标

顺序性问题往往在业务侧才暴露,所以监控要提前布好。我关注的指标包括:

  • Kafka 消费延迟:各分区的 lag 差异过大,说明消费不均衡,可能影响顺序。
  • Flink checkpoint 成功率与耗时:checkpoint 失败或耗时过长,恢复时顺序性风险高。
  • 算子背压:背压会导致处理延迟,间接影响事件时间推进。
  • sink 写入失败率:失败重试是乱序的常见来源。

这些指标在 Flink Web UI 和 Kafka 监控里都能看到,关键是要设告警阈值。比如 lag 差异超过 10 倍就告警,checkpoint 连续失败两次就告警。

6.2 验证顺序性的实操方法

光看监控还不够,得主动验证。我的做法是写一个校验作业,从结果表里按业务 key 拉出事件序列,检查时间戳是否单调递增。如果不是,就输出异常记录。这个校验作业可以定时跑,也可以做成实时流。

另一个方法是注入测试数据。在测试环境构造一批带明确顺序的事件,跑完整链路后检查结果顺序。这个方法能在上线前发现大部分配置问题。

6.3 上线前的检查清单

每次上线前,我会过一遍这个清单:

  • [ ] Kafka topic 分区数是否规划好,近期是否会扩容
  • [ ] Producer 是否显式指定了业务 key
  • [ ] Flink source 并行度是否与分区数匹配
  • [ ] checkpoint 是否开启,间隔是否合理
  • [ ] watermark 延迟是否根据乱序程度设置
  • [ ] sink 并行度是否与下游存储能力匹配
  • [ ] 是否配置了幂等写入或分片写入
  • [ ] 监控告警是否覆盖关键指标
  • [ ] 是否有顺序性校验的旁路或定时任务

这个清单看着简单,但每次都能帮我拦住一两个疏忽。尤其是 sink 并行度那条,我见过太多人在这里栽跟头。

7. 我个人在实际操作中的几点体会

调了这么多项目,最大的体会是:顺序性问题的根因往往不在 Flink 本身,而在整个链路的设计。Flink 提供了保证顺序的工具,但用不用、怎么用,取决于你对业务的理解。

第二个体会是:不要为了顺序性牺牲一切。强顺序意味着低吞吐,如果你的业务能接受最终一致,就别硬上强顺序。我见过一个项目,为了追求严格顺序把 sink 并行度设成 1,结果吞吐上不去,业务方天天投诉延迟。后来改成按 key 分片加幂等写入,吞吐翻了十倍,业务也满意了。

第三个体会是:测试环境一定要模拟乱序和故障。正常流程下顺序性通常没问题,问题都出在异常场景:网络抖动、作业重启、分区扩容。这些场景在测试环境里主动构造,比在生产上被动救火强得多。

最后分享一个小技巧:如果你的作业对顺序性要求极高,可以在 sink 之前加一个单并行度的排序算子,用状态缓存最近一段时间的数据,按事件时间排序后再输出。这个算子会成为瓶颈,但它能把乱序彻底挡在写出之前。代价是延迟增加,适合对延迟不敏感但对顺序敏感的场景。

顺序性这件事,说到底是在吞吐、延迟、一致性之间做权衡。没有银弹,只有适合你业务的方案。把链路上每一环都想清楚,比套用任何最佳实践都管用。

相关新闻

OpenClaw开源智能体框架:让AI从“动口”走向“动手”的任务闭环实践

OpenClaw开源智能体框架:让AI从“动口”走向“动手”的任务闭环实践

2026年刚开年&#xff0c;开源社区就迎来了一条非常陡峭的增长曲线&#xff1a;一个叫OpenClaw的智能体项目&#xff0c;在没有任何付费推广的情况下&#xff0c;Star数一路冲到头部位置。我第一时间把它拉下来跑了一遍&#xff0c;又蹲在社区里看了大半个月的讨论&#xff0c;…

2026/10/20 12:17:10 阅读更多 →
Muse大更新深度体验:从画布工具到创作操作系统的跨越

Muse大更新深度体验:从画布工具到创作操作系统的跨越

1. 这次更新到底动了什么Muse这个名字&#xff0c;做创意工具、做交互设计、做内容生产的人应该都不陌生。它最早出圈是因为那种“把灵感直接摊在画布上”的交互方式——不是传统的时间线&#xff0c;也不是纯粹的图层堆叠&#xff0c;而是把素材、想法、草稿全部铺在一个无限延…

2026/10/20 12:17:10 阅读更多 →
FT系列工业触摸屏控制器:从驱动移植到调试排障实战指南

FT系列工业触摸屏控制器:从驱动移植到调试排障实战指南

在工业触摸屏的选型圈子里&#xff0c;FocalTech&#xff08;敦泰科技&#xff09;的FT系列触控芯片几乎是一个绕不开的名字。很多做HMI、工控一体机、医疗设备显示模组的朋友&#xff0c;第一次接触电容触摸方案时拿到的参考设计就是FT系列。这篇文章我从实际项目经验出发&…

2026/10/20 12:17:10 阅读更多 →

最新新闻

GraphRAG工程实践:知识图谱如何补足向量检索的推理短板

GraphRAG工程实践:知识图谱如何补足向量检索的推理短板

向量检索失效的那一刻&#xff0c;我才决定认真搞GraphRAG年初做过一个企业内部制度问答系统&#xff0c;刚开始用的是经典的向量库RAG方案&#xff1a;文档切块、embedding、top-k召回、拼prompt喂给大模型。原型阶段跑得很顺&#xff0c;演示的时候领导问了一个问题——"…

2026/10/20 13:08:00 阅读更多 →
AI辅助教材编写如何实现低查重?从大纲到成稿的实用工作流

AI辅助教材编写如何实现低查重?从大纲到成稿的实用工作流

说实话&#xff0c;把“AI写教材”和“低查重”放在一起&#xff0c;很多人第一反应是拿来凑字数、糊弄领导。我在课程开发这行干了也有几年&#xff0c;教材、课件、实训手册都写过&#xff0c;真实的感受是&#xff1a;AI真正厉害的地方不在“替你写”&#xff0c;而在“帮你…

2026/10/20 13:08:00 阅读更多 →
Repast仿真建模实战:从调度器到参数扫描的ABM完整教程

Repast仿真建模实战:从调度器到参数扫描的ABM完整教程

简介&#xff1a;面向社会科学、经济学与复杂系统建模初学者的Repast完整英文教程与实例包&#xff0c;适合希望系统掌握多Agent仿真平台的读者。资源共72个文件&#xff0c;以38个htm和28个html教程页面为主体&#xff0c;搭配CSS样式表、界面位图、JavaDoc索引及内嵌示例压缩…

2026/10/20 13:08:00 阅读更多 →
当AI写了八成代码,程序员真正该练的判断力与工作流

当AI写了八成代码,程序员真正该练的判断力与工作流

最近那篇流传很广、署名某位图灵奖得主的论文&#xff0c;在程序员圈子里算是彻底刷了屏。刷屏的核心是一个数字&#xff1a;AI生成的代码占比已经超过八成。我刷完评论区&#xff0c;感觉大家自动分成两派&#xff1a;一派像看到了预言&#xff0c;说这是给程序员发的预警&…

2026/10/20 13:08:00 阅读更多 →
AI辅助教材编写:高效产出与低查重降重技巧全解析

AI辅助教材编写:高效产出与低查重降重技巧全解析

写教材这件事&#xff0c;听起来是老师或培训师的基本功&#xff0c;但真正做过的人都明白它有多熬人。在高校、职业院校和培训机构里&#xff0c;教材编写往往是压在教师身上的隐形大山&#xff1a;既要搭框架、找素材、写案例&#xff0c;又要排版配图、设计练习&#xff0c;…

2026/10/20 13:08:00 阅读更多 →
Flutter开发鸿蒙应用:从零搭建药品服药记录器全流程教程

Flutter开发鸿蒙应用:从零搭建药品服药记录器全流程教程

做跨平台开发这几年&#xff0c;我用 Flutter 写过不少工具类应用&#xff0c;最近刚把一个药品服用记录器顺利跑到了鸿蒙手机上。这个项目从零开始做&#xff0c;覆盖了环境配置、数据表设计、服药计划、本地通知、真机联调这一整条链路&#xff0c;中间踩了不少坑&#xff0c…

2026/10/20 13:06:59 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →