社区朋友们,今年 6 月份的社区月报来啦!不同于常规月度大版本功能迭代,本月 Apache DolphinScheduler 社区全力深耕底层治理!小伙伴们重点打磨了平台稳定性,比如完成 3.4.2 版本运维闭环、优化任务故障转移能力、修复高并发偶发故障、落地日志敏感数据脱敏,补齐部署、存储、CI 工程等各类线上细碎短板。
本篇月报,我们就带大家梳理一下 6 月份项目的核心生产变更、生产环境升级建议,并公布 6 月优秀社区贡献者榜单,下滑查看吧!✨
- 统计范围:2026-06-01 至 2026-07-01
- 主要波及模块:Master、API、Storage、Helm、UI、Docs/治理
可以看到,6 月的项目变更更偏“发布维护 + 稳定性补强 + 文档完善”:既有 3.4.2 发布与相关修订,也有并发安全、日志脱敏、Helm 修复、S3 资源列表等实用改进。
适合谁看:
- 终端用户/业务方:想快速判断 6 月有没有值得关注的稳定性或可用性变化
- 运维/平台同学:重点关注 failover、Helm、S3、日志安全这几类上线影响面较大的改动
- 开发者:适合看 6 月社区把精力放在了哪些“治理型修复”上
3.4.2 发布与修订已经落地
6 月包含 3.4.2 发布以及发布后文档修订,属于“版本维护月”的典型节奏。对应 PR:#18317、#18319
Worker 日志更安全:避免明文密码落日志
对多租户/企业环境尤其关键:日志泄露往往比功能 bug 更“隐蔽且致命”。对应 PR:#18333
Helm 使用体验修复与依赖更新
包含 ConfigMap label 冲突修复以及 MySQL chart 版本更新,直接影响部署体验与可维护性。对应 PR:#18341、#18336
并发安全修复:避免 ConcurrentModificationException
将 HashMap 替换为 ConcurrentHashMap,属于典型的“偶发但影响面大”的稳定性补强。对应 PR:#18331
Failover 场景增强:任务 failover 时可 kill application
对 Yarn / K8s 等外部执行引擎更友好,避免任务切换后出现残留应用占资源。对应 PR:#18353
S3 资源列表限制修复:不再只返回 1000 条
对依赖 S3 存储的用户来说,是实际痛点的修复,直接影响可见性与可用性。对应 PR:#18381
如果你是生产用户,建议按“发布维护类变更 + 稳定性补强”的思路做验证:
建议在测试/集成环境保留以下拉取方式,作为后续补充 6 月数据前的标准动作:
git fetch origin devgit checkout devgit pull --rebase
按本地提交 author name 统计,6 月参与提交的作者共 9 位:
- eye-gu、Jarek Potiuk、luxiaolong、njnu-seafish、suyc、Victor Laborie、Wenjun Ruan、xiangzihao、Yanjun Qiu
1. 并发安全修复:把偶发异常前移到代码结构层解决
- 主要变更:
UserGroupInformationFactory 中缓存 UserGroupInformation 的容器从 HashMap 改为 ConcurrentHashMap,同时新增了专门的并发测试用例。 - 为什么重要:这类问题最麻烦的地方,不在于“会报错”,而在于“只会在高并发下偶发报错”。一旦 Hive 数据源登录与 Kerberos 续期线程并发访问同一份缓存,普通
HashMap 在遍历和修改同时发生时,就可能触发 ConcurrentModificationException。 - 这次修复的价值:社区没有只做一个“临时加锁”的热修,而是把核心共享结构替换成并发容器,再补上一组专门模拟
forEach + logout/login 并发冲突的测试。这样修的不是表面现象,而是把问题从根上收掉。 - 对使用者的意义:如果你的环境里 Hive、Kerberos、长连接会话比较多,这类修复能明显降低“偶发失败、难以复现、重试又恢复”的灰色故障。
- 建议回归:重点看 Hive 相关任务、长时间运行后的 Kerberos 续期、以及高并发数据源访问场景。
2. Failover 逻辑增强:不仅切换任务,还主动处理外部残留应用
- 主要变更:新增
kill-application-when-task-failover 配置项,并把它接入 MasterConfig、TaskExecution 以及多套部署配置文件中。 - 为什么重要:在调度系统里,failover 以前更多关注“调度状态能不能接上”,但对 Yarn、K8s 这类外部执行引擎来说,真正的风险常常在外部应用残留。调度端认为任务已经接管了,外部引擎里却还挂着旧 application,占资源、打日志、甚至继续跑。
- 这次修复的价值:它把 failover 从“只处理调度元数据”推进到“顺手处理执行现场”。从提交看,这个改动不仅改了 Master 代码,还同步补到了
application.yaml、docker-compose、Kubernetes values 和 README,说明它不是实验性质,而是打算给多种部署方式都提供统一开关。 - 对使用者的意义:对 Yarn/K8s 用户最有价值。以前一次 Master 异常之后,可能要同时处理任务状态恢复和外部资源清理;现在至少有了统一配置入口,可以把 failover 后的“残留 application”问题前置治理。
- 建议回归:模拟 Master 切换、任务执行中断、外部引擎 application 残留三类场景,确认开关启用后不会误杀正常任务,也不会放过应回收的 application。
3. S3 分页修复:从“看起来能用”到“数据量上来后还能用”
- 主要变更:
S3StorageOperator.listStorageEntity() 从单次 listObjectsV2 调用,改成基于 ContinuationToken 的循环拉取,并补充了测试。 - 为什么重要:这是非常典型的“开发环境没问题,生产环境才暴露”的缺陷。S3 的
ListObjectsV2 默认会分页,如果代码只取第一页,那么资源数量一旦超过 1000,就会出现“明明文件在,但列表里看不到”的问题。 - 这次修复的价值:修复点非常直接,也很规范。它没有去做业务层补丁,而是在存储插件底层把分页遍历补完整,直到
isTruncated() 为假才结束。这样上层资源中心、文件管理、目录浏览这些依赖存储列举能力的功能,都会一起受益。 - 对使用者的意义:只要你的 S3 桶里资源规模大、目录层级深,或者本来就把 DolphinScheduler 当统一资源入口,这个修复就是“真问题真收益”,不是优化体验,而是恢复正确性。
- 建议回归:准备超过 1000 条对象的目录、混合目录与文件的前缀结构,确认 UI/API 列表结果与实际桶内对象数一致。
4. 日志脱敏:改动很小,但安全收益很大
- 主要变更:从 diff 看,这个提交只改了
PasswordUtils 一处代码,行数变化非常小。 - 为什么依然值得单独讲:安全类改动不能只按“改了多少行”判断价值。密码明文出现在日志里,往往不是立刻导致任务失败,而是把风险埋进日志平台、排障工单、备份归档和多人协作链路里,影响范围反而更广。
- 这次修复的价值:它说明 6 月社区不仅在修功能 bug,也在补“默认安全”细节。很多真实事故不是权限系统失守,而是普通日志把不该出现的信息带出来;这类修复属于投入小、收益大的治理型改动。
- 对使用者的意义:如果你们已经把 Worker 日志接入 ELK、SLS、CloudWatch 这类集中式日志系统,这个改动的意义会比单机部署更大,因为日志一旦被汇聚,泄露面会指数级放大。
- 建议回归:重点检查连接配置打印、异常栈、脱敏后日志是否仍保留足够排障信息,避免“安全性上去了,可观测性没了”。
把 6 月这 22 个 PR 放回长期演进方向来看,本月更像一次“把边边角角但高频会踩的坑补齐”的维护窗口:
如果用一句话概括 Apache DolphinScheduler 项目在 6 月的变更,即不是“大功能月”,而是“把发布、部署、调度恢复和安全细节继续补平”的一个治理月。
附录 A:2026 年 6 月合并 PR 明细
2026-06-02
#18310 Add AGENTS.md + SECURITY.md to make the security model discoverable2026-06-04
2026-06-04
2026-06-05
#18321 Update the parameter priority explanation in the docs2026-06-05
#18323 Add a note to the parameter priority documentation specifying and fix some issues2026-06-07
#18316 Remove dead code after t_ds_relation_user_alertgroup table dropped2026-06-10
#18331 Replace HashMap with ConcurrentHashMap in UserGroupInformationFactory2026-06-12
#18341 Fix duplicate app.kubernetes.io/name label on ConfigMap2026-06-12
#18333 Remove plaintext passwords from the logs2026-06-12
#18336 Update mysql helm chart version2026-06-15
#18347countTaskInstanceStateByProjectCodesuses submit_time filtering2026-06-16
#18327 Fix and enrich the documentation for parameter priority2026-06-16
#18355 Change the description field to optional2026-06-17
#18353 Add kill-application-when-task-failover logic2026-06-17
#18352 Fix rerun workflow instance should follow the specified workerGroup2026-06-18
#18360 Change the description field to optional in k8s config2026-06-22
#18351 Fix forceTaskSuccesscannot reset the last unsuccessful workflow instance to success2026-06-22
2026-06-23
2026-06-23
2026-06-23
#18308 Frontend correctly uses the preferred values of the associated project for task creating and workflow scheduling2026-06-26
#18381 Fix list resources returned only 1000 records in s3 storage type
附录 B:参考链接
- PR #18308: https://github.com/apache/dolphinscheduler/pull/18308
- PR #18310: https://github.com/apache/dolphinscheduler/pull/18310
- PR #18316: https://github.com/apache/dolphinscheduler/pull/18316
- PR #18317: https://github.com/apache/dolphinscheduler/pull/18317
- PR #18319: https://github.com/apache/dolphinscheduler/pull/18319
- PR #18321: https://github.com/apache/dolphinscheduler/pull/18321
- PR #18323: https://github.com/apache/dolphinscheduler/pull/18323
- PR #18327: https://github.com/apache/dolphinscheduler/pull/18327
- PR #18331: https://github.com/apache/dolphinscheduler/pull/18331
- PR #18333: https://github.com/apache/dolphinscheduler/pull/18333
- PR #18336: https://github.com/apache/dolphinscheduler/pull/18336
- PR #18341: https://github.com/apache/dolphinscheduler/pull/18341
- PR #18347: https://github.com/apache/dolphinscheduler/pull/18347
- PR #18351: https://github.com/apache/dolphinscheduler/pull/18351
- PR #18352: https://github.com/apache/dolphinscheduler/pull/18352
- PR #18353: https://github.com/apache/dolphinscheduler/pull/18353
- PR #18355: https://github.com/apache/dolphinscheduler/pull/18355
- PR #18360: https://github.com/apache/dolphinscheduler/pull/18360
- PR #18363: https://github.com/apache/dolphinscheduler/pull/18363
- PR #18374: https://github.com/apache/dolphinscheduler/pull/18374
- PR #18375: https://github.com/apache/dolphinscheduler/pull/18375
- PR #18381: https://github.com/apache/dolphinscheduler/pull/18381
- GitHub: https://github.com/apache/dolphinscheduler
- 官网:https://dolphinscheduler.apache.org/en-us
- 订阅开发者邮件:dev@dolphinscheduler@apache.org(向邮箱发送任意内容,收到邮件后回复同意订阅即可)
- YouTube:https://www.youtube.com/@apachedolphinscheduler
- Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-1cmrxsio1-nJHxRJa44jfkrNL_Nsy9Qg
同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。
非代码方式包括:
完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。
代码方式包括:
查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。
贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3A%22first+time+contributor%22优先级问题列表:https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3Apriority%3Ahigh如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97_menu/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E_menuhttps://github.com/apache/dolphinscheduler