ARTICLE DETAIL

资讯详情

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

Apache Beam 2018 开发者邮件列表讨论文档档案:Fn API 可移植性、SplittableDoFn 与 Go SDK 等设计提案回顾

Apache Beam 2018 开发者邮件列表讨论文档档案:Fn API 可移植性、SplittableDoFn 与 Go SDK 等设计提案回顾 大数据批处理流处理数据工程【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam4/beam点击查看免费下载本文基于 Apache Beam 仓库中的年度讨论文档档案 2018.md完整呈现 2018 年提交到 devbeam.apache.org 邮件列表的 99 份讨论文档并结合同仓库的生成脚本与后续落地的源码实现梳理出 Fn API 可移植性、SplittableDoFn、Triggers、状态与定时器、Go SDK 等当年核心设计提案的脉络与当前代码现状。读完后你既能把这份档案当作 Beam 2018 年设计决策的“索引目录”逐条查证也能理解每份提案在今天的代码库中留下了哪些可追踪的实现痕迹。这份档案是什么2018.md 的标题是 “List Of Documents Submitted To devbeam.apache.org In 2018”它以一张四列表格记录了 2018 年 1 月 22 日至 11 月 30 日期间提交到 Beam 开发者邮件列表dev 列表的全部 99 份讨论文档。表格的四个字段为列名含义No.文档序号按提交时间UTC从旧到新排序Author提交文档的作者Subject文档标题并附带文档链接Google Docs 或 Apache 短链 s.apache.orgDate (UTC)邮件提交时间的 UTC 时间戳该目录 discussion-docs 按年份组织覆盖 2016 至 2025 年共 10 个年度档案如 2016.md、2017.md、2019.md 等。contributor-docs/README.md 中明确说明The discussion-docs directory contains discussion documents and proposals that have been mailed to the devbeam.apache.org mailing list, organized by year.Apache 软件基金会的开源项目遵循“邮件列表驱动决策”mailing list driven的治理模式重大 API 变更、新 Runner、新 SDK 在设计阶段必须先提交 RFCRequest For Comments到 dev 列表经过社区讨论、投票后才进入代码。因此这份档案实质上就是2018 年 Beam 所有重大技术决策的入口索引——而 2018 年恰恰是 Beam 从“单语言 SDK 多个私有 Runner”走向“语言无关的可移植执行模型Fn API / Portability”的关键年份。档案是如何生成的generate_doc_md.py 脚本解析这份年度档案并非手工维护而是由同目录下的 generate_doc_md.py 脚本从邮件列表归档中自动提取生成。理解该脚本有助于理解档案的数据来源、去重规则与潜在边界。使用方式脚本的 docstring 中给出了完整用法python generate_doc_md.py year流程分三步下载邮件归档脚本按月份调用 Apache 邮件列表的 mbox 接口将指定年份 1–12 月的 devbeam.apache.org 邮件按月下载为本地 mbox 文件保存格式为generated/devbeam.apache.org_year-month.mbox见download_mbox函数URL 模式为https://lists.apache.org/api/mbox.lua?listdevdomainbeam.apache.orgdyear-month提取讨论文档扫描每封邮件正文识别其中附带的 Google Docs / Google Sheets 链接以及 Apache 短链s.apache.org输出 Markdown 表格按时间排序后生成year.md即本档案文件的格式。脚本依赖requests、beautifulsoup4等库并用标准库mailbox解析 mbox 文件。关键实现细节结合源码可以确认以下对档案内容质量有直接影响的设计链接识别规则extract_google_doc_sheet_link与extract_s_link只捕获两类 URL——docs.google.com/document与docs.google.com/spreadsheets文档链接、s.apache.org短链。因此档案覆盖的是“附带外链的讨论邮件”纯文本讨论不在统计范围内URL 标准化standardize_url_linkGoogle Docs 链接会被提取文档 ID 并标准化为https://docs.google.com/document/d/id或https://docs.google.com/spreadsheets/d/id形式剔除多余查询参数这也是表格中部分链接呈现为标准文档 URL 的原因标题抓取get_google_doc_title脚本会请求文档 URL用 BeautifulSoup 解析 HTMLtitle并去掉 “- Google Docs” 后缀作为表格中的 Subject。因此你会看到个别条目的 Subject 是 “Log in - ASF JIRA”“Redirecting”“Google Calendar - Easier Time Management...” 这类非文档标题——这是目标链接实际跳转页的title而非真实文档名属于外部链接解析的固有局限作者提取extract_name_re从邮件From头中用正则剥离邮箱地址支持 “Name via apache.org ” 这类网关转发格式去重策略add_message同一文档 URL 多次出现在不同邮件中时保留时间戳最早的一条即首次提交这解释了为什么部分反复讨论的文档如 “User Defined Metrics API”“Splittable DoFn proposal”在表中出现多次但时间不同——它们对应的是不同的文档 URL而真正重复的 URL 已被合并排序与时间sort_emails_by_timestamp按 UTC 时间戳升序排列表格中的 Date (UTC) 列即邮件Date头解析结果无法解析时显示为 “Unknown”。档案中的小瑕疵如何理解表格中有若干值得注意的现象均可由上述脚本逻辑解释第 40 行Eugene Kirpichov 的 Splittable DoFn proposal2018-05-22与第 21 行Lukasz Cwik2018-03-26标题相同但短链协议不同http vs https第 39 行与第 78 行的 Subject 显示为 “Redirecting”第 59、83、92 行的 Author 为 “N/A”邮件 From 头缺失或无法解析姓名。这些不是档案“错误”而是自动提取管线的边界情况引用时建议以文档标题 时间交叉核对。2018 年讨论文档完整清单以下为 2018.md 的完整 99 条记录保持原文顺序与时间No.AuthorSubjectDate (UTC)1Davor BonaciIssue Navigator - ASF JIRA2018-01-22 02:37:242Lukasz CwikApache Beam (Incubating) Pipeline Runner API Proposal2018-01-26 13:09:113Reuven LaxSchema-Aware PCollections2018-01-28 20:08:354Etienne ChauchotMetrics extraction independant from runners / execution engines2018-01-31 08:01:015Kenneth KnowlesApache Beam Release 2.3.0 Acceptance Criteria - Google Sheets2018-01-31 09:07:136Raghu AngadiEvent Time and Watermarks in KafkaIO2018-02-01 18:21:427Ben SidhomPortable Beam on Flink2018-02-08 19:31:188Romain Manni-BucauApache URL Shortener2018-02-09 00:47:199Matthias BaetensApache Beam YouTube channel: guidelines2018-02-23 14:12:5810Eugene KirpichovBreaking the fusion barrier: Deep splitting of Beam instruction graphs2018-02-23 17:20:5911Chamikara JayalathIssue Navigator - ASF JIRA2018-02-27 15:44:4712Etienne ChauchotApache Beam Release Acceptance Criteria - Google Sheets2018-03-09 04:02:3013Daniel OliveiraStructure and Lifting of Combines2018-03-09 13:19:5214Kenneth KnowlesUser Defined Metrics API2018-03-09 18:44:4215Alex AmatoApache Beam Fn API : Defining and adding SDK Metrics2018-03-13 23:47:0316Griselda Cuevas[Notes] Apache Beam Community Summit - March 20182018-03-14 01:56:4017Lukasz CwikSlack for ASF projects - Apache Infrastructure Website2018-03-14 14:12:4218Henning RohdeRFC: Apache Beam Go SDK design2018-03-16 13:55:0719Pablo EstradaApache Beam Summit: Notes on Contributor Experience2018-03-20 18:40:4220Robbe SneydersApache Beam: Python 3 support2018-03-23 12:27:4321Lukasz CwikSplittable DoFn proposal2018-03-26 15:41:4522Alex AmatoApache Beam Fn API : Defining and adding SDK Metrics2018-04-10 12:53:3923Kenneth KnowlesCross-language Beam Pipelines2018-04-13 10:58:0124Robert BurkeApache Beam Go SDK - Vanity Import Path2018-04-16 19:56:4525Scott WegnerLog in - ASF JIRA2018-04-17 18:15:2926Chamikara JayalathApache Kafka for Beam Python SDK2018-04-28 01:06:2627Henning RohdeApache Beam Fn API: SDK Harness container contract2018-05-04 19:31:5028Henning RohdeApache Beam Go SDK integration tests2018-05-08 21:13:4229Kenneth KnowlesTriggers in Apache Beam (incubating)2018-05-10 10:57:3430Henning RohdeApache Beam Portability Support Matrix - Google Sheets2018-05-11 13:38:0331Yifan ZouReproducible Environment for Jenkins Tests By Using Containers2018-05-11 18:25:4432Lukasz CwikApache Beam Fn API: Fn State API and Bundle Processing2018-05-14 12:44:0233Ankur GoenkaLaunching a Portable Pipeline2018-05-14 15:33:3134Anton KedinEventual PAssert2018-05-14 16:56:5735Lukasz CwikApache Beam Fn API: Processing a Bundle2018-05-14 19:54:1936Etienne ChauchotUser Defined Metrics API2018-05-15 03:56:0537Lukasz CwikState and Timers for DoFn in Apache Beam (incubating)2018-05-15 11:38:5638Udi MeiriBeam Fast Precommits2018-05-17 21:53:5239Charles ChenRedirecting2018-05-21 20:15:4040Eugene KirpichovSplittable DoFn proposal2018-05-22 15:34:2641Charles ChenBeam Python User State and Timer APIs2018-05-23 14:49:3442Daniel OliveiraStructure and Lifting of Combines2018-05-23 16:57:0443Ankur GoenkaPortable Artifact Staging2018-05-23 21:54:3744Kenneth KnowlesA New DoFn2018-05-24 09:22:4245Yifan ZouAutomation For Beam SDK Dependency Check2018-05-24 10:08:1746Lukasz CwikApache Beam Fn Api Overview2018-05-25 13:23:5547Chamikara JayalathManaging Beam Dependencies2018-05-31 22:11:3148Griselda CuevasJune Beam Newsletter2018-06-01 15:19:5849Lukasz CwikApache Beam Portability: Modeling, scheduling and executing timers2018-06-04 18:00:3450Austin BennettWalkthrough with a first contributor to Beam2018-06-05 16:39:4951Andrew PilloudBeam SQL Pipeline Options2018-06-06 12:24:3652Alan MyrvoldApache Beam Contribution Guide Improvements2018-06-06 14:54:5253Griselda CuevasApache Beam Roadmap - Google Sheets2018-06-06 20:04:5454Kenneth KnowlesBeam SQL: Integrating runners IO2018-06-11 13:44:2755Sindy LiInteractive Beam Pipelines2018-06-13 14:48:3556Robin QiuRequiresStableInput Design Doc2018-06-14 16:58:4557Rui WangUnbounded with limit2018-06-18 21:20:2458Boyuan ZhangProcess of Building Python Wheels2018-06-19 19:03:5559N/AApache Beam version 2.5.02018-06-23 00:42:0660Kenneth KnowlesGoogle Calendar - Easier Time Management, Appointments Scheduling2018-06-25 17:47:3061Thomas WeiseApache Beam Portability Prototype2018-06-27 08:35:2162Yifan ZouBeam SDK Dependency Ownership 2018-06-26 - Google Sheets2018-06-27 11:52:0063Yifan ZouTracking Beam Dependency Upgrades2018-07-10 18:17:3064Alan MyrvoldApache Beam Contributor Metrics: Collection, Display, Actions2018-07-11 13:17:4965Boyuan ZhangProposal of Building Python Wheels2018-07-16 17:47:3666Mikhail GryzykhinProposal of starting contributors wiki2018-07-19 17:21:3367David CavazosCommunity Repository Proposal2018-08-01 18:12:1568Boyuan ZhangApache Beam Release Acceptance Criteria - Google Sheets2018-08-01 19:03:1669Rose NguyenAugust Beam Newsletter2018-08-02 19:18:0170Pablo EstradaApache Beam version 2.6.02018-08-08 19:20:3971Rose NguyenInteractive Beam Pipelines2018-08-10 15:37:1172Yifan ZouReproducible Environment for Jenkins Tests By Using Docker2018-08-27 13:53:1473Ankur GoenkaSDK Harness Concurrency Requirements2018-08-29 20:53:3674Lukasz CwikBundles w/ SplittableDoFns: Signals Splitting2018-08-30 21:13:3175Robbe SneydersApache Beam: Python 3 support2018-09-05 12:11:5276Lukasz CwikApache Beam (Incubating) Pipeline Runner API Proposal2018-09-07 13:15:4877Maximilian MichelsSeptember Beam Newsletter2018-09-10 10:20:0178Rose NguyenRedirecting2018-09-10 22:56:0379David MoravekStreaming Hadoop OutputFormat2018-09-13 10:48:3780Udi MeiriSimplifying Beam Pipelines2018-09-24 12:37:2481Eugene Kirpichov(Apachecon 2018) Robust, performant and modular APIs for data ingestion with Apache Beam - Google Slides2018-09-26 17:16:2782Charles ChenApache Beam version 2.7.02018-09-30 19:59:1983N/ASplittable DoFn Public Meeting 9/14/182018-10-03 01:07:1484Etienne ChauchotEtienne Chauchot Universal metrics with Beam - Google Slides2018-10-03 11:08:0785Thomas WeiseApache Beam Portability Support Matrix - Google Sheets2018-10-08 12:43:0886Plajt, VaclavJava 8 Euphoria DSL2018-10-10 04:26:1887Udi MeiriBeam Python SDK: Datastore Client Upgrade2018-10-16 21:59:1388Lukasz CwikApache Beam Portability API: How to Finalize Bundles2018-10-24 17:37:5889Scott WegnerGrafana2018-10-26 01:36:2690Lukasz CwikApache Beam Portability API: How to Checkpoint and Split Bundles2018-10-26 18:07:2791Alex AmatoMonitoringInfo spec proposal.2018-10-29 20:19:3692N/ASnapshotting and Updating Beam Pipelines2018-11-05 10:24:1493Lukasz CwikApache Beam Portability API: How to Checkpoint and Split Bundles2018-11-06 19:45:3194Ruoyun Huang[BEAM-5448] Java Reference Runner in Python2018-11-08 20:04:5295Jeff KlukasAutoValue Coding and Row Support2018-11-09 16:50:1996Chamikara JayalathIssue Navigator - ASF JIRA2018-11-15 16:59:1597Kenneth KnowlesUser Defined Metrics API2018-11-20 22:19:4798Lukasz CwikApache Beam Fn API: Fn State API and Bundle Processing2018-11-28 15:01:0699Kenneth KnowlesDRAFT - Apache Beam Board Report - December 182018-11-30 01:14:11年度主题回顾2018 年提案与当前代码库的对应关系从 99 条记录中可以归纳出 2018 年 Beam 的六大设计主线。下面逐一回顾并给出这些提案在当前仓库中可验证的落点注意以下“现状”仅基于当前仓库中实际存在的代码与目录不代表提案文档原文的全部内容。1. Fn API 与可移植执行模型Portability——当年最密集的提案群2018 年与 Fn API / Portability 直接相关的提案多达十余份横跨 1 月至 11 月Pipeline Runner API ProposalNo. 2、76Lukasz Cwik统一 Runner 抽象的总纲Portable Beam on FlinkNo. 7、Portability PrototypeNo. 61Thomas Weise、Portability Support MatrixNo. 30、85跨 Runner 能力矩阵与原型SDK Harness container contractNo. 27、Launching a Portable PipelineNo. 33、Portable Artifact StagingNo. 43、SDK Harness Concurrency RequirementsNo. 73容器化 harness 与工件暂存机制Fn Api OverviewNo. 46、Processing a BundleNo. 35、Fn State API and Bundle ProcessingNo. 32、98、How to Finalize BundlesNo. 88、How to Checkpoint and Split BundlesNo. 90、93、Bundles w/ SplittableDoFns: Signals SplittingNo. 74bundle数据束这一可移植执行核心单元的处理、终结、检查点与拆分协议Cross-language Beam PipelinesNo. 23混合语言流水线即后来 xlang 的雏形MonitoringInfo spec proposalNo. 91跨 Runner 统一的监控信息模型。在当前仓库中这一系列提案的契约层实现沉淀在 Fn Execution 模块的 protobuf 定义中beam_fn_api.proto 与 beam_provision_api.proto它们定义了 Runner 与 SDK Harness 之间的 gRPC 接口指令、bundle 状态、元素处理等。Java 侧的可移植 Runner 入口位于 PortableRunner.java配套的 TestPortablePipelineOptions.java 与 PortableRunnerTest.java 则覆盖了“以 Portable 模式启动外部 job server 流水线”的选项与行为验证此外 runners/portability/test_flink_uber_jar.sh 与 runners/portability/test_pipeline_jar.sh 脚本对应了当年 “Portable Beam on Flink” 方向的集成验证路径。各语言的 SDK harness 容器构建脚本也延续了 “SDK Harness container contract” 的产物布局如 sdks/java/container、sdks/python/container、sdks/go/container 目录。2. Splittable DoFn把单个 DoFn 变成可拆分、可并行的任务Splittable DoFn 在 2018 年被反复推进No. 21、40 两份同名提案、No. 74 的 bundle 拆分信号、No. 83 的公开会议纪要。它解决的问题是普通ParDo以“单元素”为处理粒度无法把一个耗时长的工作单元例如一次远程调用、一次模型推理切分给多个 worker 并行执行Splittable DoFn 则引入process()返回Tap、支持start()/isDone()/cancel()生命周期的可拆分模型。当前仓库中的对应实现与验证入口ParDo.javaParDo内部包含 SplittableDoFn 分支从源码结构看普通 DoFn 与可拆分 DoFn 共用同一个ParDo变换入口SplittableParDo.java供 Beam YAML / 流水线组装场景使用的 Splittable ParDo 翻译类Watch.java等待外部资源就绪时使用的 Splittable 辅助变换测试侧SplittableDoFnTest.java 验证 Tap 协议与进度语义学习材料侧learning/katas/java/Core Transforms 与 learning/tour-of-beam/learning-content 中均收录了 SplittableDoFn 的练习关卡说明该特性已从“提案”进入教学与文档体系。3. Triggers、状态与定时器State Timers窗口触发的可组合化No. 29Kenneth Knowles与 DoFn 状态/定时器No. 37Lukasz CwikPython 侧对应 No. 39、41、75/78是 2018 年第二主线。这两组提案确立了今天 Beam 流处理的核心 API 面Trigger组合器Triggers.onlyWhenFired、afterWatermark、afterProcessingTime、or、and等以及DoFn中的KVStateSpec、Timer编程模型。当前仓库中Triggers 的完整练习关卡位于 learning/katas/java/Triggers9 个 Java 练习 7 个 YAML 流水线描述 3 篇说明文档learning/katas/python/Streaming 则覆盖 Python 侧的流式触发/状态练习——这两个目录是快速上手当年提案成果的现成材料。4. Go SDK从 RFC 到一等公民 SDKGo SDK 的诞生轨迹在档案中清晰可见No. 182018-03-16是 Henning Rohde 的《RFC: Apache Beam Go SDK design》No. 24 讨论 vanity import path决定模块导入路径github.com/apache/beam/sdks/go的可用性No. 28 是 Go SDK 集成测试方案。今天仓库中 sdks/go 目录即为该 RFC 的完整落地cmd/提供命令行工具pkg/包含 600 余个 Go 源文件transforms、io、sdfx 等包container/提供 harness 容器BUILD.md与README.md给出构建说明。值得注意的是Go SDK 也是可移植模型Fn API的直接受益者——Go harness 通过 model/fn-execution 中的 gRPC 契约与 Runner 通信这正体现了 No. 23 “Cross-language Pipelines” 提案“一次定义、多语言执行”的目标。5. Python 生态Python 3 支持、Wheels 构建与 Kafka IOPython 相关提案在 2018 年同样活跃No. 20 与 75 是 Python 3 支持的两轮讨论No. 58 与 65 是 Python Wheels 打包流程的两份文档Process 与 ProposalNo. 26 是 Python SDK 的 Kafka IO 提案No. 87 讨论 Python SDK 中 Datastore 客户端升级。当前仓库中sdks/python/container 目录承载了当年 Wheels/harness 构建流程的脚本产物sdks/python/apache_beam 是包含 1300 余个 Python 文件的完整 SDK 实现Python 的 Kafka IO 在集成测试 it/kafka 与各 SDK 的 io 扩展中持续演进。6. 度量、Beam SQL 与交互式流水线指标No. 4 提出“与 Runner/执行引擎无关的指标抽取”No. 14、36、97 的 User Defined Metrics API 三份文档逐步收敛No. 15/22 定义 Fn API 层的 SDK MetricsNo. 84 是 Google I/O 2018 上的 “Universal metrics with Beam” 分享。当前仓库中Runner 通用指标扩展位于 runners/extensions-java/metrics7 个 Java 文件而 Fn API 层的指标定义在 beam_fn_api.proto 中印证了“指标模型下沉到可移植契约”的路线Beam SQLNo. 51Pipeline Options与 No. 54Runner 与 IO 的打包集成。仓库中 scripts/beam-sql.sh 是运行 Beam SQL 的辅助脚本examples/java/sql 提供了 SQL 示例流水线交互式流水线Interactive Beam PipelinesNo. 55 与 71 两轮讨论后来演化出仓库中的 playground 子系统——包含 Go 后端 playground/backend、Flutter 前端 playground/frontend、Terraform 部署配置 playground/terraform是“在线编写并运行 Beam 片段”的完整工程实现其他工程化提案No. 31/72Jenkins 测试的容器化可复现环境、No. 45/63SDK 依赖检查与升级追踪后者与 contributor-docs/java-dependency-upgrades.md 的流程文档一脉相承、No. 80简化流水线定义的 “no-beam-pipeline” 讨论、No. 56RequiresStableInput注解设计、No. 6KafkaIO 的事件时间与水印、No. 81模块化 IO API 的 Apachecon 2018 演讲。如何把这份档案用起来追溯设计动机当你在阅读 model/fn-execution 的 proto 定义或 sdks/java/core 中窗口/触发代码时遇到“为什么这样设计”的疑问可以先在 2018.md 中按主题定位对应提案如 bundle 拆分看 No. 74、88、90、93再打开原始文档链接阅读全文与讨论记录对照年度演进同目录的 2016.md 至 2025.md 构成完整的决策时间线例如 Runner API 提案在 2018 年出现两次No. 2 与 76说明该抽象在当年经历了重大修订理解数据边界本档案由 generate_doc_md.py 自动生成仅收录“正文中附带 Google Docs/Sheets 链接或 s.apache.org 短链”的邮件Subject 为链接目标页面的title少数条目如 “Log in - ASF JIRA”“Redirecting”需要人工打开链接确认真实文档对同一 URL 的重复提交只保留最早一条。小结2018.md 以 99 条记录浓缩了 Apache Beam 发展史上最关键的转折年Runner API 与 Fn API 的可移植执行模型、SplittableDoFn 的细粒度并行、Triggers/State/Timers 的流处理编程模型、Go SDK 的从零到一以及指标、Beam SQL、交互式流水线的早期设计都在这份邮件列表档案中留下了第一手记录。结合仓库中的 generate_doc_md.py 生成管线与 model/fn-execution、runners/portability/java、sdks/go 等当前实现这份档案不仅是一个历史索引更是从“提案文本”追踪到“落地代码”的路线图。赞分享大数据批处理流处理数据工程【免费下载链接】beamApache Beam is a unified programming model for Batch and Streaming data processing.项目地址https://gitcode.com/gh_mirrors/beam4/beam点击查看免费下载相关推荐Apache Beam 2016 核心设计提案全景从 33 份孵化期讨论文档到当前源码实现Apache Beam 2016 核心设计提案全景从 33 份孵化期讨论文档到当前源码实现 Apache Beam 在 2016 年孵化初期围绕 Runne大数据批处理流处理数据工程Apache NuttX技术会议回顾核心开发者讨论的前沿话题Apache NuttX技术会议回顾核心开发者讨论的前沿话题 Apache NuttX作为一款成熟的实时嵌入式操作系统RTOS其技术发展一直备受开发者关操作系统嵌入式物联网系统编程Go CDK pubsub 设计深度解析跨云可移植的发布/订阅 API 从设计文档到源码落地Go CDK pubsub 设计深度解析跨云可移植的发布/订阅 API 从设计文档到源码落地 导读 internal/docs/pubsub/design.m云原生后端微服务上一篇3分钟搞定VMware运行macOS的终极解锁指南下一篇FontForge如何用这款免费开源字体编辑器打造专业级字体创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表