ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SeaTunnel Connector-V2 插件贡献指南:从 FAQ 导航层到源码级实现

SeaTunnel Connector-V2 插件贡献指南:从 FAQ 导航层到源码级实现 数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载Connector-V2 是 SeaTunnel 面向多引擎解耦设计的连接器体系本指南以 docs/zh/developer/contribute-plugin.md 为入口系统讲解如何以正确姿势参与 Connector-V2 贡献既包括编写 Connector FAQ 必须遵守的导航层规范也包括从 Factory、Source、Sink 到打包注册的完整实现路径。读完本文你将能独立规划一个 connector 贡献的最小可行方案并掌握校验配置语义、对齐中英文文档、通过测试与 CI 的实操要点。为什么需要一条明确的贡献路径很多新贡献者不是缺少扩展点而是缺少一条清晰入口环境搭建在一页、connector 开发在另一页、架构参考又分布在多个目录。为此仓库在 docs/zh/developer/contribution-path.md 中给出了一条稳定的 onboarding 路径核心原则是从最小可行入口开始文档贡献修 broken link、改进 quick start 表达、让配置文档与真实 connector option 对齐、同时补齐中英文文档Connector 贡献先修一个 connector 的 option 或文档不一致问题再给现有 connector 补小能力最后在研究相近实现后做全新 source 或 sinkTransform / 性能 / 引擎贡献分别从 贡献 Transform-V2 插件、贡献性能优化、搭建开发环境 进入。对大多数贡献者而言最短且稳妥的路径是先读对应功能的用户文档 → 在本地复现当前行为 → 找一个最相近的已有实现 → 用最小改动解决明确问题 → 用户可见变更同时更新docs/en与docs/zh。这类小且聚焦的改动通常比大规模重构更容易合入。编写 Connector FAQ 的要求把 FAQ 当作导航层这是 docs/zh/developer/contribute-plugin.md 的核心主题新增或更新 connector FAQ 时应把 FAQ 当作导航层而不是另一套独立事实源。FAQ 的价值在于帮用户快速定位而不是复制一份配置矩阵。具体有六条硬性要求精确的配置项名称、默认值和完整行为说明必须保留在 connector 的 option 表和详细章节中FAQ 不应成为这些事实的第二来源否则文档更新时极易出现两处不一致FAQ 答案优先写成短答 指向现有章节不要在 FAQ 中再复制一套完整配置矩阵只要 FAQ 提到 connector 配置项合入前就必须对照当前 connector 文档和源码核对拼写与语义因为拼写错误的 option 名会让用户直接拿到非法配置错误如果某个结论依赖 passthrough 属性或上游数据库 / 消息系统本身的行为必须明确标注不能把它包装成 SeaTunnel 标准 connector 配置项英文和中文 FAQ 的覆盖范围应保持一致避免用户在切换语言后信息不对等。仓库中的 FAQ 实际形态可以参考 docs/en/connectors/connector-faq.md 与 docs/zh/faq.md它们面向具体连接器如文件 / 对象存储、CDC 等答疑是短答 引用模式的直接范例。Connector-V2 贡献的完整技术骨架在动笔写 FAQ 或改配置文档之前理解 connector 的运行时结构至关重要。Connector-V2 的代码位于 seatunnel-connectors-v2 目录API 定义在 seatunnel-api 模块翻译层连接器 API 与 Flink / Spark / Zeta 引擎 API 的适配位于 seatunnel-translation。整体工程布局可参考 seatunnel-connectors-v2/README.zh.md。从 Factory 开始identifier、OptionRule 与 AutoServiceFactory 是用户视角下的入口也是文档、运行时校验、REST 元数据暴露、UI 配置生成之间的桥梁。TableSourceFactory与TableSinkFactory至少要负责三件事暴露稳定的factoryIdentifier它是配置文件中使用的插件名如FakeSource、Kafka用于区分不同连接器定义OptionRule声明哪些参数必须required、可选optional、互斥exclusive、绑定bundledRequiredSeaTunnel 据此校验用户配置并自动生成完整参数对象创建实例source 端重写createSourcesink 端重写createSink。同时必须在工厂类上标注AutoService(Factory.class)注解这是 SPI 注册的关键。实际代码可参考 connector-fake 的 FakeSourceFactory它引入OptionRule、TableSourceFactory与com.google.auto.service.AutoService并将大量FakeSourceOptions静态常量组装进 option rule。Source 端SeaTunnelSource、SourceReader 与 SourceSplitEnumerator一个 source connector 至少要解决四件事定义并校验用户可见参数、描述输出 schema、支持 batch / streaming或两者兼有、在并行时支持 split 分配与状态恢复。对应到类结构以支持并行的 source 为例connector-name/ src/main/java/.../source/ NameSourceFactory.java NameSource.java NameSourceReader.java NameSourceSplit.java NameSourceSplitEnumerator.java NameSourceConfig.java各核心接口的职责依据 seatunnel-connectors-v2/README.zh.md 与 Source Connector 开发指南SeaTunnelSource流批一体的顶层 source 定义通过getBoundedness决定流 / 批getProducedCatalogTables返回输出 schema可硬编码也推荐通过用户配置自定义运行在 driver 端负责产出SourceReader、SourceSplitEnumerator及序列化器。实现示例见 FakeSource它还实现了SupportParallelism、SupportColumnProjection以支持并行与列裁剪SourceSplitEnumerator发现并分配分片。open初始化资源run产生 split 并调用Context.assignSplit分发addSplitsBack在 reader 异常或重启时回收重分发snapshotState保存状态供SeaTunnelSource.restoreEnumerator恢复另有handleSplitRequest、handleSourceEvent、notifyCheckpointComplete等回调SourceReaderworker 侧真正读取数据的接口。核心是pollNext通过Collector.collect输出SeaTunnelRow批模式下读完需调用Context.signalNoMoreElement通知结束典型写法是if (Boundedness.BOUNDED.equals(context.getBoundedness())) { // signal to the source that we have reached the end of the data. context.signalNoMoreElement(); break; }SourceSplit分片模型通过splitId区分可保存 kafka 的 partition / topic、hbase 的 column family 等元信息。Sink 端SinkWriter 与两级 CommitterSink 通常比 Source 更难做好因为它面对外部副作用。一个 sink connector 必须先讲清楚自己的语义append-only / at-least-once / 更强一致性、commit 是否幂等、insert / update / delete 如何处理、目标系统对 schema 的兼容边界。若这些语义不清一旦进入 retry 或恢复场景就会出错。实现上SeaTunnelSink通过createWriter创建SinkWriterrestoreWriter在恢复时重建 writergetWriteCatalogTable返回写入目标对应的CatalogTable。事务处理有两条路径SinkCommitter在每个节点上执行prepareCommit结果的提交commit/abort失败时需实现幂等性以支撑引擎重试SinkAggregatedCommitter在单个节点聚合所有 subTask 的事务信息后统一提交避免阶段二部分失败导致状态不一致。包含init、restoreCommit恢复时重试上次未完成事务、combine聚合事务信息、commit、abort、close。当前版本推荐将SinkAggregatedCommitter作为首选可在 Flink / Spark 下提供更强的一致性保证同时 commit 应实现幂等。Option 定义与参数校验实现 Factory 时创建的每个Option对应一个用户配置。普通类型直接调用对应方法创建即可若参数是对象类型可以用 POJO 表示并在每个字段上标注org.apache.seatunnel.api.configuration.util.OptionMark。OptionMark的name为空时默认将 Java 小驼峰转为下划线如myUserPassword→my_user_passworddescription用于描述参数建议与文档保持一致。可参考org.apache.seatunnel.connectors.seatunnel.assertion.sink.AssertSinkFactory与org.apache.seatunnel.connectors.seatunnel.elasticsearch.source.ElasticsearchSourceFactory需要 Schema 的 source 可复用org.apache.seatunnel.api.table.catalog.CatalogTableUtil.SCHEMA。从导航文档到源码FakeSource 是现成的对照样本贡献新 connector 时仓库强烈建议先研究一个最相近的已有实现。connector-fake是功能完整、无外部依赖的理想起点其完整结构为seatunnel-connectors-v2/connector-fake/src/main/java/org/apache/seatunnel/connectors/seatunnel/fake/ config/ FakeConfig.java、FakeSourceOptions.java、MultipleTableFakeSourceConfig.java exception/ FakeConnectorException.java source/ FakeSource.java、FakeSourceFactory.java、FakeSourceReader.java、 FakeSourceSplit.java、FakeSourceSplitEnumerator.java、FakeDataGenerator.java state/ FakeSourceState.java utils/ AutoIncrementIdGenerator.java、FakeDataRandomUtils.java、IdGeneratorUtils.java可以看到它与上文典型类结构一一对应FactorySPI 注册 option rule、Source流批一体 schema、Split / SplitEnumerator并行分片、ReaderpollNext signalNoMoreElement、Statecheckpoint 快照。对照阅读 Source Connector 开发指南 中的设计检查清单可以验证bounded 还是 unbounded、split 单位、reader 无工作时如何请求任务、恢复需保存的状态、schema 自动发现还是用户配置——这些答案应驱动类结构而不是反过来。打包、注册与插件发现connector 不是能编译就完成一个 connector 完成代码后还必须补齐发现与分发元数据详细机制见 插件发现与类加载SPI 注册Factory 类标注AutoService(Factory.class)SeaTunnel 通过 SPI 扫描发现插件plugin mapping在仓库根目录的 plugin-mapping.properties 中登记映射格式为seatunnel.source.插件名 connector-模块名如seatunnel.source.FakeSource connector-fake、seatunnel.sink.Kafka connector-kafka。文件头注释明确指出seatunnel.source.XXX中的XXX必须与SeaTunnelSource::getPluginName与TableSinkFactory::factoryIdentifier的返回值一致SeaTunnel 靠这张表把用户配置中的插件名解析为不带版本的 Jar 包名分发包将 connector 加入seatunnel-dist/pom.xml使其 Jar 进入二进制发行包config/plugin_config则用于控制默认打包进发行包的插件集合依赖隔离如需依赖隔离补齐 plugin 目录布局。提交 PR 前的打包检查清单包括factory 注册已存在、connector module 已加入构建与分发、必要时已更新plugin-mapping.properties、文档示例中的插件名与运行时 identifier 完全一致、中英文文档都已补齐。测试与文档一个 connector 何时算真正完成一个用户可见的 connector若未完成以下事项通常不能算完成同步更新docs/en与docs/zh对应地FAQ 的中英文覆盖范围必须一致这与 contribute-plugin.md 的要求一脉相承示例配置与代码完全一致单测或 E2E 覆盖主读取 / 写入路径。测试策略至少建议覆盖option 校验、split 生成或发现逻辑、reader 在正常数据上的行为、checkpoint / state snapshot 行为并行 source 还要覆盖恢复与 split 回收分配。若 connector 依赖外部系统尽可能补或扩展 E2E 测试——仓库的seatunnel-e2e/seatunnel-connector-v2-e2e下即为每个 connector 对应的端到端测试模块。关于 Backend CI需要特别留意PR 上要求通过的 BackendBuild映射自 PR head 仓库的pushworkflow仅修改 connector 时workflow 通过 changed-module 判断选择集成测试分片修改 API、core、common、format、transform、translation 等具有广泛 API 影响的模块时则运行完整 API 矩阵。判断一次绿色 Build 是否覆盖所有 connector 集成测试分片前请先查看该 Build 实际列出的 jobs。推荐的阅读路径按目标选择一条路径即可文档路径文档格式规范 → 快速入门总览配合本页的 FAQ 导航层规范connector 路径开发自己的 Connector → Source Connector 开发指南 或 Sink Connector 开发指南再对照 seatunnel-connectors-v2/README.zh.md 的 API 细节与connector-fake源码架构深挖Source 架构、Sink 架构、配置与 Option 系统、检查点机制环境准备搭建开发环境JDK、Maven、./mvnw clean install -DskipTests本地安装子项目。最后记住贡献的核心原则改动要清晰、聚焦、容易验证——FAQ 严守导航层定位配置语义以源码与 option 表为准中英文同步测试与文档齐全。这就是一个 connector 贡献最容易合入的形态。赞分享数据集成ETL大数据批处理流处理变更数据捕获【免费下载链接】seatunnelSeaTunnel is a multimodal, high-performance, distributed, massive data integration tool.项目地址https://gitcode.com/GitHub_Trending/se/seatunnel点击查看免费下载相关推荐SeaTunnel Transform-V2 插件贡献指南从入门路径到核心契约、源码实现与 E2E 验证SeaTunnel Transform V2 插件贡献指南从入门路径到核心契约、源码实现与 E2E 验证 本篇基于 SeaTunnel 仓库中的 Transf数据集成ETL大数据批处理流处理变更数据捕获如何用zoxide彻底提升终端导航效率从安装到高级配置全指南如何用zoxide彻底提升终端导航效率从安装到高级配置全指南 zoxide 是一个智能的命令行目录跳转工具它能记住你最常访问的目录让你通过简单的命令快速跳CLI开发工具WinUImicrosoft-ui-xamlNavigationView 层级导航深度指南从 API 规范到源码实现WinUImicrosoft ui xamlNavigationView 层级导航深度指南从 API 规范到源码实现 NavigationView 是 W前端UI组件桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表