Zeppelin 集成 Flink SQL 实战:环境搭建、调试与避坑指南

1. 为什么要在 Zeppelin 里跑 Flink SQL

1.1 一个真实的需求场景

先说一个我踩过的坑。早些年做实时数仓,团队里数据开发同学写 Flink SQL 的方式基本是两种:要么在 IDE 里写 Java/Scala 代码,把 SQL 硬编码进去打包提交;要么用 Flink 自带的 SQL Client 命令行,一条一条敲。前者改一个字段就要重新编译打包,后者在集群上调试时,历史命令翻起来费劲,结果也没法保存和分享。

后来接触到 Zeppelin,才发现它天生就是干这个的。Zeppelin 是一个基于 Web 的交互式笔记本工具,最擅长的事情就是“写一段、跑一段、看结果”。它原生支持多种解释器(Interpreter),其中就包括 Flink。把 Flink SQL 放到 Zeppelin 里跑,等于给 Flink 配了一个带界面、能保存、能可视化、能多人协作的 SQL 编辑器。

这个组合解决的核心问题很明确:让 Flink SQL 的开发从“命令行 + 打包”变成“浏览器里即写即跑”。适合谁用?数据开发、实时计算工程师、做实时数仓的分析师,以及任何需要频繁调试 Flink SQL 但又不想每次都走完整打包流程的人。哪怕你之前只写过 Hive SQL,只要理解 Flink SQL 的基本语法,这套环境也能很快上手。

1.2 Zeppelin 与 Flink 的版本匹配是第一个坎

在动手之前,必须先说清楚一个最容易翻车的地方:Zeppelin 版本和 Flink 版本的匹配。Zeppelin 的 Flink Interpreter 是跟着 Flink 版本走的,不同大版本之间 API 差异很大,硬凑会直接报ClassNotFoundException或者NoSuchMethodError。

我整理了一张常见组合的对照表,这是实测下来比较稳的搭配:

Zeppelin 版本推荐 Flink 版本说明
0.10.x1.13.x / 1.14.x老项目常用,稳定但功能偏旧
0.11.x1.14.x / 1.15.x过渡版本,社区资料较多
0.12.x1.16.x / 1.17.x目前比较推荐的组合

提示:不要盲目追最新版。Zeppelin 的 Flink Interpreter 更新往往滞后于 Flink 主版本,选一个社区验证过的组合,比用最新版省心得多。

另外要区分两种运行模式:Local 模式(Zeppelin 自带 Flink,开箱即用,适合学习和调试)和Remote 模式(连接一个独立部署的 Flink 集群,适合生产)。本文两种都会讲到,但重点放在 Remote 模式,因为实际工作中几乎都用它。

2. 安装部署:从零把环境搭起来

2.1 前置环境准备

在装 Zeppelin 之前,机器上得先有几样东西。我列一下清单,缺一样后面都可能卡住:

  • JDK 8 或 JDK 11:Flink 1.15 之后对 JDK 11 支持更好,但 JDK 8 兼容性最广。建议统一用 JDK 8,避免各种奇怪的反射报错。
  • 一个可用的 Flink 集群:Standalone 或基于资源调度框架的都可以。如果只是本地测试,用 Flink 自带的start-cluster.sh起一个 Standalone 集群就够了。
  • Hadoop 环境(可选):如果你的 Flink SQL 要读写 HDFS 或者用 Hive Catalog,那 Hadoop 相关配置得先配好,否则连接器加载会失败。

环境变量这块,JAVA_HOME必须配好,HADOOP_CONF_DIR如果用到 HDFS 也要指向正确的配置目录。这些是基础,但每年都能看到有人因为JAVA_HOME没配导致 Zeppelin 起不来。

2.2 下载与解压 Zeppelin

Zeppelin 的安装包直接去官网下载对应版本即可。下载下来是个 tar 包,解压到你想放的目录:

tar -zxvf zeppelin-0.12.0-bin-all.tgz -C /opt/ cd /opt/zeppelin-0.12.0-bin-all

注意选bin-all这个包,它包含了所有解释器,包括 Flink。如果下的是bin-netinst,那 Flink Interpreter 还得单独装,徒增麻烦。

解压完之后,目录结构大致是这样:bin放启动脚本,conf放配置,interpreter放各解释器的配置,notebook放笔记本数据。先别急着启动,配置改完再启动。

2.3 配置 Flink Interpreter

这是整个安装过程的核心。Zeppelin 的 Flink Interpreter 配置在conf/zeppelin-site.xml和解释器界面里都能改,但最直接的方式是改conf/interpreter.json或者启动后在 Web UI 里配。我习惯先改配置文件,因为 Web UI 改完有时候重启会丢。

关键配置项有这么几个:

  • FLINK_HOME:指向你的 Flink 安装目录。Remote 模式下这个必须对,因为 Zeppelin 要从这里加载 Flink 的客户端 jar。
  • zeppelin.flink.mode:取值local或remote。生产环境填remote。
  • zeppelin.flink.jobmanager.host和zeppelin.flink.jobmanager.port:Remote 模式下指向 Flink JobManager 的地址和 RPC 端口,默认 6123。
  • zeppelin.flink.scala.version:根据你的 Flink 版本选 2.11 或 2.12,选错了会报 Scala 版本冲突。

配置改完后,把 Flink 的 jar 包软链或者拷贝到 Zeppelin 的 interpreter 目录下。具体来说,需要把$FLINK_HOME/lib下的核心 jar 和$FLINK_HOME/opt下你需要的连接器 jar 放到 Zeppelin 能加载到的路径。这一步很多人会漏,结果就是 SQL 能解析但一执行就报找不到连接器。

2.4 启动与验证

配置就绪后,启动 Zeppelin:

bin/zeppelin-daemon.sh start

启动日志在logs/zeppelin-*.log,如果起不来,第一件事就是看这个日志。常见问题无非是端口占用(默认 8080)、JDK 版本不对、或者内存不够。

启动成功后,浏览器打开http://<你的机器IP>:8080,能看到 Zeppelin 的首页。点右上角Create new note,在 Interpreter 下拉框里选flink,如果能看到这个选项,说明 Flink Interpreter 已经加载成功了。

注意:第一次创建 Flink 笔记本时,Zeppelin 会去初始化 Flink 环境,这个过程可能比较慢,耐心等它跑完。如果一直卡住,多半是FLINK_HOME配错了或者 jar 没放对位置。

3. Flink SQL 在 Zeppelin 里的实操写法

3.1 基本执行流程与段落概念

Zeppelin 的核心概念是段落(Paragraph)。一个笔记本里可以有多个段落,每个段落独立执行,执行结果直接显示在段落下方。这个设计对 Flink SQL 特别友好,因为你可以把“建表”“插入数据”“查询验证”拆成不同段落,改哪段跑哪段,不用从头再来。

在 Flink 笔记本里,默认的段落开头是%flink,表示用 Flink Interpreter 执行。但 Flink SQL 有几种不同的执行入口,需要显式声明:

  • %flink.ssql:执行流式 SQL(Streaming SQL),最常用。
  • %flink.batch:执行批式 SQL。
  • %flink.bsql:批式 SQL 的另一种写法。
  • %flink.pyflink:用 Python 写 Flink 任务。
  • %flink:执行 Scala/Java 代码,用来做 SQL 之外的操作。

我平时用得最多的是%flink.ssql,因为实时场景基本都是流式的。写一个最简单的例子:

%flink.ssql CREATE TABLE source_table ( id BIGINT, name STRING, ts TIMESTAMP(3), WATERMARK FOR ts AS ts - INTERVAL '5' SECOND ) WITH ( 'connector' = 'datagen', 'rows-per-second' = '10' ); SELECT * FROM source_table;

这段代码用datagen连接器造数据,跑起来后 Zeppelin 会以表格形式实时刷新结果,非常直观。这就是 Zeppelin 相比 SQL Client 的最大优势——结果可视化。

3.2 建表与连接器配置的细节

Flink SQL 的建表语句里,WITH子句是连接器配置,也是最容易出错的地方。不同连接器的参数差异很大,我挑几个常用的说一下。

Kafka 连接器是实时场景的标配。关键参数包括connector、topic、properties.bootstrap.servers、format。如果 Kafka 开了认证,还要配properties.security.protocol和相关的用户名密码参数。这里有个坑:properties.前缀不能漏,漏了参数不会生效,但也不报错,数据就是读不进来,排查起来很费劲。

JDBC 连接器用于读写关系型数据库。url、table-name、username、password是必填的。如果做维表关联,还要注意lookup.cache.max-rows和lookup.cache.ttl这两个参数,它们决定了维表缓存的策略,配不好会导致数据延迟或者内存暴涨。

Hive 连接器需要先配置 Hive Catalog。在 Zeppelin 里,可以通过%flink段落执行 Scala 代码来注册 Catalog:

%flink val catalog = new org.apache.flink.table.catalog.hive.HiveCatalog("hive", "default", "/path/to/hive/conf") tenv.registerCatalog("hive", catalog) tenv.useCatalog("hive")

注册完之后,在%flink.ssql段落里就能直接查 Hive 表了。这个能力在做流批一体的时候特别有用。

3.3 流式查询与结果展示

Zeppelin 对 Flink 流式查询的结果展示做了专门优化。默认情况下,流式查询的结果会以“追加模式”不断刷新。但有些查询(比如聚合)需要“更新模式”,这时候要在 SQL 里显式指定:

%flink.ssql(type=update) SELECT name, COUNT(*) AS cnt FROM source_table GROUP BY name;

type=update这个参数告诉 Zeppelin 用更新模式展示结果,否则聚合查询会报错说需要更新模式。这个细节很多新手不知道,卡在这里半天。

另外,Zeppelin 还支持把流式结果画成图表。在结果区域上方有个图表按钮,可以选折线图、柱状图等。对于监控类的实时指标,这个功能直接省掉了一个可视化面板的开发。

实操心得:流式查询在 Zeppelin 里跑起来后,会一直占用资源。调试完记得手动停止段落,否则它会一直跑着消耗集群资源。我见过有人忘了停,第二天发现集群被一个测试任务占满了。

4. 常见问题与排查技巧实录

4.1 启动与连接类问题

问题一:Zeppelin 启动后看不到 flink 解释器选项。

这个基本是 Flink Interpreter 没加载成功。排查顺序:先看conf/interpreter.json里有没有 flink 的配置项;再看FLINK_HOME是否指向正确;最后看 Zeppelin 日志里有没有加载 flink interpreter 时的报错。最常见的原因是 Flink 的 jar 和 Zeppelin 的 Scala 版本不匹配。

问题二:Remote 模式下提交任务报连接超时。

检查zeppelin.flink.jobmanager.host和port是否可达。在 Zeppelin 所在机器上用telnet或者nc测一下 JobManager 的 RPC 端口。如果网络通但还报错,可能是 Flink 集群的jobmanager.rpc.address配置和实际监听地址不一致。

问题三:SQL 能解析但执行时报ClassNotFoundException。

这是连接器 jar 没加载。确认对应的连接器 jar 已经放到了 Zeppelin 能加载的路径下,并且在 Interpreter 配置的flink.execution.jars里引用了。改完配置记得重启 Interpreter。

4.2 SQL 执行类问题

问题四:流式聚合查询报“需要更新模式”。

前面提过,加type=update参数即可。根本原因是 Flink 的聚合查询产生的是更新流(retract stream),而 Zeppelin 默认按追加流展示,两者不匹配。

问题五:时间戳字段显示成乱码或者时区不对。

Flink SQL 的TIMESTAMP类型默认用 UTC 时区。如果数据里的时间是本地时间,展示出来会差几个小时。解决办法是在建表时用TIMESTAMP_LTZ类型,或者在 Zeppelin 的 Flink 配置里设置table.local-time-zone参数。

问题六:任务提交后一直处于 INITIALIZING 状态。

多半是资源不够。检查 Flink 集群的 TaskManager 是否有足够的 slot。Remote 模式下,Zeppelin 提交的任务和普通 Flink 任务一样占用 slot,slot 满了就得等。

我把常见问题整理成一张速查表,方便对照:

现象可能原因解决方向
看不到 flink 解释器Interpreter 未加载检查 FLINK_HOME 和 jar
连接 JobManager 超时地址/端口错误测网络连通性
ClassNotFoundException连接器 jar 缺失补 jar 并重启 Interpreter
聚合查询报错展示模式不对加 type=update
时间显示偏差时区配置设 local-time-zone
任务卡在初始化资源不足检查 TaskManager slot

4.3 几个独家避坑技巧

第一个技巧:善用%flink.conf段落。Zeppelin 允许在笔记本里用%flink.conf动态设置 Flink 配置,比如并行度、Checkpoint 间隔等。这样不同笔记本可以用不同配置,不用改全局的 Interpreter 设置。

第二个技巧:把常用的建表语句存成模板。Flink SQL 的建表语句又长又容易写错,我习惯把 Kafka、JDBC、Hive 的建表模板存下来,用的时候改改参数就行,省时省力还不容易出错。

第三个技巧:调试阶段用 datagen 连接器造数据。不要一上来就连生产 Kafka,用datagen造点模拟数据把 SQL 逻辑跑通,确认无误后再换成真实数据源。这样既安全又高效。

第四个技巧:注意段落之间的变量传递。在%flink段落里定义的变量,可以在后续%flink.ssql段落里通过${变量名}引用。这个特性在做参数化查询时很有用,但要注意变量作用域,跨笔记本是不共享的。

5. 从调试到生产的进阶用法

5.1 用 Zeppelin 管理 Flink 作业生命周期

Zeppelin 不只是个 SQL 编辑器,它还能管理 Flink 作业的生命周期。在%flink段落里,可以通过 Flink 的 API 拿到执行环境,然后做更细粒度的控制。比如设置 Checkpoint:

%flink val env = StreamExecutionEnvironment.getExecutionEnvironment env.enableCheckpointing(60000) env.getCheckpointConfig.setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE)

或者在 SQL 段落里通过SET语句设置:

%flink.ssql SET 'execution.checkpointing.interval' = '60s'; SET 'execution.checkpointing.mode' = 'EXACTLY_ONCE';

这些配置对生产作业的稳定性至关重要。调试阶段可以关掉 Checkpoint 加快速度,上线前一定要打开。

5.2 多引擎协作与数据流转

Zeppelin 的一个隐藏优势是多解释器协作。同一个笔记本里,你可以先用%flink.ssql把 Kafka 数据加工后写入一张结果表,再用%jdbc或者%hive段落去查这张表做验证。这种“流处理 + 批查询”的组合,在实时数仓的日常运维里非常实用。

具体做法是:Flink SQL 把结果写到 Hive 表或者 JDBC 表,然后在另一个段落里用对应的解释器查询。Zeppelin 会自动管理这些解释器的连接,你只需要在段落开头切换%前缀即可。

5.3 权限与多人协作

生产环境用 Zeppelin,绕不开权限问题。Zeppelin 支持基于 Shiro 的认证和授权,可以配置用户名密码登录,也可以对接 LDAP。配置在conf/shiro.ini里,改完重启生效。

多人协作方面,Zeppelin 的笔记本可以共享给其他用户,支持只读和可编辑两种权限。团队里我一般建议:公共的建表模板和工具段落设成只读,个人的调试笔记本各自维护。这样既保证了规范统一,又不影响个人效率。

提示:Zeppelin 的笔记本数据默认存在本地文件系统(notebook目录)。如果要多人共享,建议配置成存到数据库或者共享存储,否则换台机器就找不到了。

6. 一些实际使用中的体会

这套环境我从早期版本一路用到现在,最大的感受是:它把 Flink SQL 的开发门槛实实在在地降下来了。以前调一个 SQL 要打包、提交、看日志,一轮下来十几分钟;现在改完直接跑,几秒钟出结果。对于需要反复试错的实时计算场景,这个效率提升是数量级的。

但也要清醒地认识到它的边界。Zeppelin 适合开发和调试,不适合直接当生产调度平台用。生产作业的提交、监控、告警,还是得靠专门的调度系统。我一般把 Zeppelin 定位成“SQL 的试验台”,逻辑在这里跑通、验证无误后,再固化到调度平台上去。

最后分享一个小技巧:Zeppelin 的笔记本可以导出成 JSON 文件,我习惯把每个项目的核心 SQL 笔记本导出备份。这样换环境或者重装的时候,直接导入就能恢复,比重新写一遍省事得多。另外,定期清理不再使用的笔记本和解释器实例,能避免 Zeppelin 越用越慢——这个坑我踩过,笔记本多了之后启动明显变卡,清理完就顺畅了。

相关新闻

Flink EventTime与WaterMark实战:时间语义正确性保障指南

Flink EventTime与WaterMark实战:时间语义正确性保障指南

1. 为什么EventTime不是“选不选”的问题&#xff0c;而是“怎么用对”的问题Flink里的时间语义有三种&#xff1a;ProcessingTime、IngestionTime和EventTime。很多人刚接触时会下意识觉得——“我数据进来就处理&#xff0c;用ProcessingTime最简单”&#xff0c;然后在项目上…

2026/10/20 4:48:49 阅读更多 →
空间音频转头后声源跟着漂:HarmonyOS 7 坐标系、姿态时间戳和降级策略怎么验

空间音频转头后声源跟着漂:HarmonyOS 7 坐标系、姿态时间戳和降级策略怎么验

空间音频转头后声源跟着漂&#xff1a;HarmonyOS 7 坐标系、姿态时间戳和降级策略怎么验 声源放在用户右前方&#xff0c;头向左转后&#xff0c;声音却像粘在耳机上一样跟着转。音频文件和播放链路都正常&#xff0c;问题出在空间坐标&#xff1a;内容坐标、设备姿态和渲染时…

2026/10/20 4:47:49 阅读更多 →
PyTorch核心机制与实战技巧:从张量操作到多卡训练的深度避坑指南

PyTorch核心机制与实战技巧:从张量操作到多卡训练的深度避坑指南

1. 从一行 import 说起&#xff1a;为什么 PyTorch 值得你花时间如果你刚接触深度学习&#xff0c;打开任何一个教程&#xff0c;大概率第一行代码就是import torch。但很多人用了半年 PyTorch&#xff0c;依然停留在“抄模型、改参数、跑训练”的阶段&#xff0c;遇到显存爆炸…

2026/10/20 4:47:49 阅读更多 →

最新新闻

PAT乙级1107题解析:从统计模拟到边界处理全攻略

PAT乙级1107题解析:从统计模拟到边界处理全攻略

如果你备考过 PAT 乙级&#xff0c;应该会和我一样在题库里撞见很多“做起来不难&#xff0c;但第一遍就是拿不到满分”的题目编号。我第一次刷到 1107 这个编号时&#xff0c;还以为是某种压轴题&#xff0c;结果是一道看起来平平无奇的统计模拟题。可恰恰是这类题&#xff0c…

2026/10/20 5:26:07 阅读更多 →
AI-Infra实战:显存碎片化与KV Cache引发的推理延迟毛刺排查

AI-Infra实战:显存碎片化与KV Cache引发的推理延迟毛刺排查

从凌晨三点的一条告警说起。那天我正在睡&#xff0c;手机连着震了十几下&#xff0c;监控平台告诉我&#xff1a;核心推理服务P99延迟从80毫秒飙到了1.8秒&#xff0c;持续五分钟还没恢复。我当时第一反应是"流量突增"&#xff0c;但拉出面板一看&#xff0c;QPS根本…

2026/10/20 5:26:07 阅读更多 →
多智能体领导跟随跟踪控制:从一致性协议到仿真落地

多智能体领导跟随跟踪控制:从一致性协议到仿真落地

多智能体系统里&#xff0c;领导跟随者跟踪控制是最常被拿来当切入点的一个题目。我记得自己最早做多机器人编队模拟时&#xff0c;第一反应就是找“领航者轨迹”让后面几个家伙跟着跑&#xff0c;结果发现建模、协议设计、稳定性证明、仿真验证&#xff0c;每一步都有不少隐性…

2026/10/20 5:26:07 阅读更多 →
TopK问题的本质:快速排序分区操作的原理与工程实践

TopK问题的本质:快速排序分区操作的原理与工程实践

1. 这不是“背模板”&#xff0c;而是吃透TopK问题的底层逻辑Leetcode上标着“TopK”标签的题目&#xff0c;比如“数组中第K个最大元素”“前K个高频元素”“最小的K个数”&#xff0c;看起来五花八门&#xff0c;但背后真正起决定性作用的&#xff0c;从来不是你记住了几行代…

2026/10/20 5:26:07 阅读更多 →
IntelliJ IDEA构建失败:Could not create the Java Virtual Machine 根因解析

IntelliJ IDEA构建失败:Could not create the Java Virtual Machine 根因解析

1. 这个报错不是Java代码写错了&#xff0c;而是IDE在“喊救命”刚接手一个老项目&#xff0c;双击idea.exe点开&#xff0c;选中项目根目录&#xff0c;点击“Open”&#xff0c;还没等看到熟悉的项目结构树&#xff0c;控制台窗口就猛地弹出一行红字&#xff1a;Abnormal bui…

2026/10/20 5:26:07 阅读更多 →
Neo4j Community版安装配置全指南:从解压到稳定运行

Neo4j Community版安装配置全指南:从解压到稳定运行

简介&#xff1a;本资源为 Neo4j 社区版 5.19.0 安装包&#xff0c;面向知识图谱初学者、LLM 应用开发者及中小型项目团队&#xff0c;提供开箱即用的图数据库运行环境&#xff0c;解决结构化关系数据建模、高效图遍历与 Cypher 查询实践等核心需求。压缩包共253个文件&#xf…

2026/10/20 5:25:07 阅读更多 →

日新闻

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/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出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/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 阅读更多 →