# 文档 > 分享知识、技能和经验 ## 介绍 - [概览](/docs/2025/introduction/index.md): 个人知识、技能和经验总结。 - [写作工具](/docs/2025/introduction/tool.md): 写公众号文章,我其实用了这些工具!Markdown转微信公众号 ## 环境配置 - [Docker Desktop](/docs/2025/cncf/kubernetes/env/install/docker-desktop.md): 文档链接:Docker Desktop安装 Docker Desktopmacwindowslinux启用 Kubernetes:Deploy on Kubernetes卸载 DockerDesktop:Uninstall Docker Desktop - [K3s](/docs/2025/cncf/kubernetes/env/install/k3s.md): 文档链接 快速入门指南。k3s 文档K3s 中文文档。rancher k3s 文档腾讯云k3s试用。腾讯云轻量服务器提供了 k3s 模版单机部署K3s服务并接入KuboardK3S 证书有效期太短?一招将证书延长至 10 年!K3s 高可用部署:像搭积木一样轻松 - [Minikube](/docs/2025/cncf/kubernetes/env/install/minikube.md): minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机(包括 Windows、macOS 和 Linux PC)上运行一个一体化(all-in-one)或多节点的本地 Kubernetes 集群,以便你来尝试 Kubernetes 或者开展每天的开发工作。 - [其他](/docs/2025/cncf/kubernetes/env/install/other.md): 深度横评:五大Kubernetes本地及生产部署方案,谁是你的最优选?选择一种合适的 Kubernetes 部署方式 - [KubePi](/docs/2025/cncf/kubernetes/env/panel/kubepi.md): KubePi 是一个现代化的 K8s 面板,1Panel 官方出品。 链接地址: github。KubePi KubePi 发布基于镜像,天然适合使用 Docker 和 Kubernetes 部署。 - [阿里云 ACK](/docs/2025/cncf/kubernetes/env/panel/kubesphere/ack.md): 详情参考 Kubernetes - [KubeKey](/docs/2025/cncf/kubernetes/env/panel/kubesphere/kubekey.md): KubeKey 是一个开源的轻量级工具,用于部署 Kubernetes 集群。它提供了一种灵活、快速、方便的方式来安装 Kubernetes/K3s、Kubersphere。它也是扩展和升级集群的有效工具。 通过 KubeKey 可以实现如下功能: 仅安装 Kubernetes同时安装 Kubernetes 和 Kubesphere使用 KubeKey 安装 Kubernetes 中,使用 ks-installer 在Kubernetes 中安装 KubeSphere。 本文主要描述使用 KubeKey 同时安装 Kubernetes 和 Kubesphere,Kubernetes 为 K3s。 文档链接: KubeKey部署 K3s 和 KubeSphere快速入门指南探索 K3s 简单高效的多云和混合云部署 安装依赖 如果是中国地区,可以设置为中国地区,从国内镜像下载,否则就只能从 github 下载 下载 KubeKey 安装 k3s 和 kubersphere kubekey 是支持很多 k3s 版本的,但是如果设置了中国区域,在国内镜像就只支持 v1.21.6-k3s 版本。如果要使用其他版本,则需取消中国区域设置。 安装完成后即可访问 kubersphere: - [Kubernetes](/docs/2025/cncf/kubernetes/env/panel/kubesphere/kubernetes.md): 参考文档: ks-installer在 Linux 上安装 Kubernetes 和 KubeSphere在 Kubernetes 上快速安装 KubeSphere - [其他](/docs/2025/cncf/kubernetes/env/panel/other.md): dashboardcilikubekuboard-press。Kuboard 是基于 Kubernetes 的微服务管理界面kitefreelensKubeForgelensrainbondsealoscozystackrancherbigprime-dk8。BigPrime-DK8是是一款基于java开发的Kubernetes容器(docker)管理平台,让运维人员或开发人员能通过可视化的界面来操作kubernetes,以及部署docker,为大数据集群在分布式环境中的运维和部署提供了效率提升、资源优化、稳定性增强等重要价值。LuBan。从手足无措到游刃有余:Luban帮我搞定了5个K8s集群kubewall - [Github 认证](/docs/2025/env/dev/github.md) - [Java](/docs/2025/env/dev/java.md) - [Docker](/docs/2025/env/dev/proxy/docker.md): 配置方式介绍: 加速器。又名 VPN、科学上网工具。通过配置 docker 在本地电脑的流量转发接口,使用加速器更快下载 docker 镜像加速效果取决于本地网络和加速器,对所有镜像源有效。对于国内镜像源,如阿里云反而会因为多走了层加速器,下载速度偏慢镜像代理。修改 docker 的 daemon.json 文件,添加镜像代理是否加速取决于镜像代理是否支持镜像源,比如镜像代理支持 docker hub、github、GCR,那么当下载镜像的位于 3 个源时可以起到代理效果,如果镜像在 K8S,则无法加速 - [Github](/docs/2025/env/dev/proxy/github.md): 访问 github 时经常遇到网络不稳定的情况,导致浏览和 clone 代码经常失败,可以通过开启加速器和代理进行加速。 加速器。又名 VPN、科学上网工具。代理。在开启加速器时,clone、pull、push 代码通过加速器端口加速。 - [资源](/docs/2025/env/dev/resource.md): free-for-dev三款免费云数据库推荐:个人项目的最佳选择腾讯出手!高性能云开发机免费开放,程序员速来抢位!独立开发者“穷鬼套餐”:AI编程与Web部署的极致省钱攻略 - [软件](/docs/2025/env/dev/software.md) - [Terminal](/docs/2025/env/dev/terminal.md): tabbywarp。Github 暴增20k star,谷歌大佬开源的新一代终端工具Warp,堪比IDE界的VS Code - [前端](/docs/2025/env/dev/web.md) - [环境配置](/docs/2025/env/index.md) - [Docker](/docs/2025/env/kubernetes/docker.md) - [Helm](/docs/2025/env/kubernetes/helm.md) - [K3s](/docs/2025/env/kubernetes/k3s.md) - [Kubesphere](/docs/2025/env/kubernetes/kubesphere.md) - [Git](/docs/2025/env/standard/git.md): 大厂都在用的 Git 代码管理规范 !Git 常用命令汇总git提交错了?别慌,直接删除提交记录 - [建站工具](/docs/2025/env/tools/ssg.md): rspressVitePressstarlight ## 博客 - [介绍](/docs/2025/blog/index.md): 做知识的使用者和分享者,而不是拥有者 - [Arthas](/docs/2025/blog/microservice/arthas.md): 一站式解决方案:基于 Arthas 实现服务发现和权限控制 - [业务框架](/docs/2025/blog/microservice/biz-framework.md) - [认证和授权](/docs/2025/blog/microservice/iam.md): 零代码为web应用添加登录界面,支持 Google、Github 等 OAuth 提供商的认证功能云原生系列04:企业级单点登录技术选型指南 - [日志](/docs/2025/blog/microservice/log.md): 文章列表1: 异步日志:性能优化的金钥匙你的应用是不是只有service_stdout.log?Java日志通关(一) - 前世今生Java日志通关(二) - Slf4j+Logback 整合及排包Java日志通关(三) - Slf4j 介绍Java日志通关(四) - Logback 介绍Java日志通关(五) - 最佳实践 文章列表2: 一个著名的日志系统是怎么设计出来的?浅析JAVA日志中的几则性能实践与原理解释超赞!20年以来Java日志Log4j2发展史!可能是全网最全,JAVA日志框架适配/冲突解决方案,可以早点下班了Java 小应用日志级别异常处理最佳实践Java项目构建基础:统一结果,统一异常,统一日志(好文推荐)在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用十行代码让日志存储降低80%如何优雅地记录操作日志?我们已经不用 AOP 做日志很久了!请求日志组件,没有AOP,所以更优雅 - [中间件框架](/docs/2025/blog/microservice/middleware-framework.md) - [Mybatis](/docs/2025/blog/microservice/mybatis.md) - [Spring&Spring-Boot](/docs/2025/blog/microservice/spring.zh.md): spring、spring-boot、spring-cloud 文章总结 - [Docker](/docs/2025/blog/container/docker.md): docker 文章总结 Docker的/var/lib/docker文件夹占满了磁盘空间Docker镜像解析获取Dockerfile文件Spring Boot 和 Docker:@DockerImage 注解简介腾讯面试题:无网络环境,如何部署Docker镜像?docker瘦身,可以试下这个开源的17.1kstar的项目Dockerfile 支持内置Shell脚本, 从此告别 && 链接符号请立刻停止编写 Dockerfiles 并使用 docker init kubernetes 文章总结 Kubernetes中的Pause容器到底是干嘛的Kubernetes Informer 认知Kubernetes Informer基本原理还在苦恼快速搭建K8S环境,试试Kind吧 - [文档汇总](/docs/2025/blog/container/k3s-doc.md) - [BI](/docs/2025/blog/data-platform/bi.md): BI datalens。Yandex 开源的 BI 系统metabase。davinci。ureport。第一款基于Apache-2.0开源协议的中式报表引擎UReport2 - [数据服务](/docs/2025/blog/data-platform/data-service.md) - [Job Schedule](/docs/2025/blog/data-platform/job.md): JDK 提供的有 ExecutorService 和 ScheduledExecutorService 提供异步和调度任务,但是存在一些弊病: 基于内存。应用宕机任务丢失只支持单机,或者是单 JVM 实例。不支持集群,存在单点问题。如果应用是集群部署,存在任务重复执行问题缺少重试。任务异常后,任务无法通过重试自愈,重新执行持久化。将任务持久化后就可以容忍 JVM 宕机问题,供后续重试限流。通过限流保护应用不会因为压力过大宕机生命周期管理。任务无法启动、停止动态调整。无法调整任务参数、执行频率不支持高级任务。任务分片,MapReduce 类型任务上下游依赖。监控告警、任务日志查看 关键特性 任务类型一次性。fire-and-forget周期性任务延时任务MapReduce任务分片任务广播DAG 任务调度频率。执行开始时间、结束时间限制,执行次数限制,是否支持秒级调度固定延迟固定频率CRON 表达式任务参数存储存储类型。内存,MySQL,Redis,消息队列任务持久化。是否支持将任务持久化到存储中,任务线程或 JVM 宕机后可以重试任务JDK。8,11,17生命周期。任务管理。任务的启动,停止,暂停,恢复等任务事件监听。监控、告警、日志白屏化异步执行。异步执行任务,执行结束后发送任务执行结果任务阻塞过期处理策略。任务错过调度时间的处理策略,如服务重启、调度线程阻塞负载均衡。阻塞策略。单机串行,丢弃后续调度队列任务优先级,任务超时其他长耗时任务进度条 - [元数据](/docs/2025/blog/data-platform/metadata.md): 数据资产 数据目录 元数据采集 - [Paimon](/docs/2025/blog/data-platform/paimon.md) - [总结](/docs/2025/blog/data-platform/summary.md): 数据人生 AI并不会重塑ETL18期|支撑数仓建设,数据开发平台MVP最小化产品方案【技术分享】元数据与数据血缘实现思路大规模异构数据迁移的探索与实践ClickHouse 存算分离改造:小红书自研云原生数据仓库实践字节跳动开源 ByConity:基于 ClickHouse 的存算分离架构云原生数仓【开源】数据标准管理平台Hadoop on k8s 快速部署进阶精简篇大数据服务上k8s主要是为了什么?浅谈大数据的过去、现在和未来 - [Github](/docs/2025/blog/devops/github.md): CI/CD: Github Actions——组件库自动发布到 npmGitHub Actions?! 想说爱你不容易 — 记一次 Release CI 重构经验 - [Linux](/docs/2025/blog/devops/linux.md): Linux 工具分享 只会用scp?那也太Low了再见了 Xshell、iTerm2、FinalShell,mobaxterm,这款开源的终端工具真香 - [运维面板](/docs/2025/blog/devops/panel.md): 服务器面板 宝塔1Paneldpanel k8s 面板 KubePiw7panelxkube - [维表](/docs/2025/blog/flink/dimension.md): 技术实践|Flink维度表关联方案解析 - [Flink Kubernetes Operator](/docs/2025/blog/flink/flink-kubernetes-operator.md): Flink Kubernetes Operator 使用 Kubernetes API,提供云原生管理 Flink 集群的能力: 部署、监控 Flink Session 和 Application 应用升级、暂停和删除应用日志和 metrics 集成支持弹性部署,与 Kuberentes 生态原生集成 - [Flink Platform](/docs/2025/blog/flink/flink-platform.md): 本文介绍分享优秀的 Flink 实时计算平台项目或者建设平台的优秀文章 - [Flink SQL Gateway](/docs/2025/blog/flink/flink-sql-gateway.md): Flink SQL Gateway 介绍 Flink SQL Gateway 那些事儿 - [Flink](/docs/2025/blog/flink/flink.md): Flink 介绍 因为不懂 Flink on K8S 类加载机制,引发了线上事故。(建议收藏)全网最详细4W字Flink入门笔记(上)全网最详细4W字Flink入门笔记(下)Flink 累加器是什么?与广播变量有什么区别?一文详解 Flink 的分布式缓存使用步骤! - [Join](/docs/2025/blog/flink/join.md): flink 的 join 支持多种类型: 双流 Join(Regular Join)。Interval Join窗口关联(Window Join)Temporal JoinLookup Join 参考资料: Flink SQL 双表 JOIN 介绍与原理简析【Flink】第十篇:join 之 regular join【Flink】第二十三篇:join 之 temporal join【Flink】第十一篇:join 之 interval joinFlink SQL 知其所以然(二十六):2w 字详述 Join 操作(大威天龙)【转】Flink SQL 之 regular join 机制解析Flink SQL 知其所以然(二十):核心思想之动态表 & 连续查询!(建议收藏) - [问题排查](/docs/2025/blog/program-design/debug.md): 问题排查 jdk17下netty导致堆内存疯涨原因排查实战总结|一次访问Redis延时高问题排查与总结(续) - [面试题](/docs/2025/blog/program-design/interview.md): 面试题分享 滴滴一面:线程池任务,如何设置优先级?阿里二面:redis分布式锁过期了但业务还没有执行完,怎么办 - [Json Diff&Merge](/docs/2025/blog/program-design/json-diff.zh.md): Json 的 diff 和 merge 功能实现 - [软件设计](/docs/2025/blog/program-design/software.zh.md): 设计哲学 构建可靠系统的策略 开源项目 Eventbridge学习austin。Austin消息中心分布式重试平台 Easy Retry v2.1.0 发布共识协议的技术变迁 -- 既要“高”容错,又要“易”定序,还要“好”理解liteflow。LiteFlow: 可编排的组件式规则引擎 实践总结 十行代码让日志存储降低80%项目自从用了接口请求合并,效率直接加倍! - [树形结构](/docs/2025/blog/program-design/tree.zh.md): 树形结构 权限系统,文件目录,商品类目等都会采用树形结构存储。 超赞,老外的一种避免递归查询所有子部门的树数据表设计与实现!一次性搞定权限树遍历(通用解决方案)树形结构与 SQL 的碰撞——三种树形结构存储方案的对比解密阿里大神写的天书般的Tree工具类,轻松搞定树结构!拒绝重复代码,封装一个多级菜单、多级评论、多级部门的统一工具类 - [多版本管理](/docs/2025/blog/program-design/version.md): 参考文档: 数据库模型设计——历史与版本设计如何设计多版本内容管理开源方案apollo。commit、release、release_historydolphinscheduler。t_ds_process_definition 和 t_ds_process_definition_loggravitino。current_version 和 last_versionsreworks。am_deploy_config & am_deploy_config_history,am_dynamic_script & am_dynamic_script_historyMybatis Plus 乐观锁文档版本管理系统 数据表设计javers - [MySQL](/docs/2025/blog/sql/mysql.zh.md): MySQL 介绍 一直傻傻分不清 count(*) count(id) count(1) 这次终于整明白了SELECT COUNT(*) 会造成全表扫描?回去等通知吧所有表/实体上是否都有“created_at”和“last_update_at”字段? - [测试](/docs/2025/blog/test/test.zh.md): 测试文章总结 - [APM](/docs/2025/blog/apm/index.md) ## 开源项目 - [概览](/docs/2025/interview/flink/project/index.md): todo - [监控告警](/docs/2025/project/bigdata/alert.md) - [Apache 社区](/docs/2025/project/bigdata/apache.md) - [BI](/docs/2025/project/bigdata/bi.md): supersonic。SuperSonic融合Chat BI(powered by LLM)和Headless BI(powered by 语义层)打造新一代的BI平台。这种融合确保了Chat BI能够与传统BI一样访问统一化治理的语义数据模型。此外,两种BI新范式都从中获得收益:Chat BI的Text2SQL能力通过语义数据模型得到增强。Headless BI的查询接口通过支持自然语言得到拓展。Chat2DB。智能且多功能的 SQL 客户端和报表工具,适用于各种数据库 - [数据集成](/docs/2025/project/bigdata/data-integration.md) - [数据服务](/docs/2025/project/bigdata/data-service.md): 文档链接: 基于开源项目动态发布Rest API的数据服务探索 开源项目: sqlrestDBApi。零代码开发api服务,只需编写sql,就可以生成http api服务。支持api动态创建,多数据源连接,动态添加数据源,兼容多种数据库。非开源项目,源码实际上未开源。magic-api。magic-api 是一个接口快速开发框架,通过Web页面编写脚本以及配置,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象APIJSON。APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库。为各种增删改查提供了完全自动化的万能 API,零代码实时满足千变万化的各种新增和变更需求Spring Data REST。通过使用 Spring Data REST,开发者能够将数据存储层(如:JPA 数据库、MongoDB 等)中的实体以资源的形式发布到 Web 服务上,从而简化了构建 REST API 的过程。Spring Data REST 自动处理诸如列表检索、单个资源获取、创建新资源、更新和删除等常见操作。此外,它还支持分页、排序、链接关系以及自定义HTTP方法等功能,极大地减少了开发人员在实现基础 CRUD 操作时编写的样板代码量。Spring Data REST一种快速且简单的暴露 RESTful风格的HTTP接口dataService。dataService 旨在提供全面的数据服务及共享能力,统一管理面向内外部的API服务。能够将数据表快速生成数据API,或将已有API快速注册至本平台进行统一管理与发布。Dataway。Hasor 提供 DataQL(数据查询引擎)。依托 DataQL 服务聚合能力,Dataway 为应用提供一个 UI 界面,可以直接在界面上配置和发布接口。这种模式的革新使得开发一个接口不必在编写任何形式的代码,只需要配置一条 DataQL 查询即可完成满足前端对接口的需求。 从而避免了从数据库到前端之间一系列的开发配置任务,例如:Mapper、DO、DAO、Service、Controller 统统不在需要。Dataway特意采用了 jar包集成的方式发布,这使得任意的老项目都可以无侵入的集成 Dataway。 直接改进老项目的迭代效率,大大减少企业项目研发成本。rocket-api。"Rocket-API" 基于spring boot 的API敏捷开发框架,服务端50%以上的功能只需要写SQL或者 mongodb原始执行脚本就能完成开发,另外30%也在不停的完善公共组件,比如文件上传,下载,导出,预览,分页等等通过一二行代码也能完成开发,剩下的20%也能依赖于动态编译技术生成class的形式,不需要发布部署,不需要重启来实现研发团队的快速编码,提测以及回归。DataApiService。(DSS已内置的第三方应用工具)数据API服务。可快速将SQL脚本发布为一个 Restful 接口,对外提供 Rest 访问能力。crabc-api。Crabc是一款低代码API开发平台,企业级接口管理、数据服务平台。深度整合SpringBoot和Mybatis特性实现动态数据源、动态SQL和标签,可视化编写SQL快速发布接口,支持接口管理、代理转发、鉴权、限流、熔断和监控告警等一站式API数据服务。SREWorks。提供了数据服务功能,位于 saas/dataops/api/dataset 模块InterfaceConfigService.java驭数平台。提供了部分数据服务功能,参考:MyDynamicController.javaCustomizeRouteServiceImplmfish-nocode。支持可视化配置查询API接口,后端自动生成SQL执行一种基于MyBatis的数据服务API实现方法 及装置脚本/MyBatis方式生成API。华为云数据服务 - [框架](/docs/2025/project/bigdata/framework.md): akka。akka 在 2.6x 版本后更改开源版本,pekko 是在 2.6x 分支上 fork 并进入 apche 孵化的项目。akka docspekko docshazelcast。文档:Hazelcast Overviewsiddhi。Stream Processing and Complex Event Processing Enginegridgain。 数据网格 hazelcast。ignite。Infinispanredisson - [文件系统](/docs/2025/project/bigdata/fs.md): jimfs。juicefs。juicefs.com/docs。cubefs。cubefs.io/zh。 - [大数据](/docs/2025/project/bigdata/index.md) - [OLAP](/docs/2025/project/bigdata/olap.md) - [Kubernetes Operator](/docs/2025/project/bigdata/operator.md) - [平台](/docs/2025/project/bigdata/platform.md) - [Rust](/docs/2025/project/bigdata/rust.md) - [搜索](/docs/2025/project/bigdata/search.md): elasticsearch一口气看完43个关于 ElasticSearch 的使用建议|得物技术KnowSearch。KnowSearch是面向Elasticsearch研发与运维人员,围绕集群、索引构建的零侵入、多租户的Elasticsearch GUI管控平台。历经滴滴PB级海量索引数据考验、金融级1000+ES集群运营实战打磨,围绕Elasticsearch构建的可见、可管、可控的服务体系。不可思议!亿级数据竟然如此轻松同步至ES!广告增量实时索引构建实践数据库不应放在容器中?- B站Kubernetes有状态服务实践(Elasticsearch/Clickhouse)OpenSearchmeilisearchzincsearch[Go工具库]轻量级弹性搜索引擎Zincmanticoresearch号称取代 Elasticsearch,太猛了!typesensequickwithavenask10年+,阿里沉淀出怎样的搜索引擎?揭秘阿里自研搜索引擎Havenask在线检索服务【前沿技术】 阿里开源搜索引擎Havenask的消息系统【一文读懂】基于Havenask向量检索+大模型,构建可靠的智能问答服务SeekStorm 其他 embedding_studio。EmbeddingStudio:将"嵌入+向量数据库"无缝转换为全方位搜索引擎的开源框架 - [SQL](/docs/2025/project/bigdata/sql.md): JSqlParsersuperior-sql-parserdruid。Druid 是阿里开源的数据库连接池,在数据库连接池的外表下,内置了很多的实用功能。Druid 的 SQL Parser 是手工编写,并未使用 antlr、javacc 之类的工具,性能非常好。Druid 的 SQL Parser 对各种数据语法支持非常完备。SQL Parser。Durid 使用 SQL Parser 防御 SQL 注入,提供了多种 SQL 解析支持。SQL AST。AST是Abstract Syntax Tree的缩写,也就是抽象语法树。AST是parser输出的结果。SQL Visitor。Visitor是遍历AST的手段,是处理AST最方便的模式。SQL Format。SQL Transform。Druid 提供了部分类型 SQL 翻译功能,如将 Oracle 翻译成 MySQL。jOOQ。anyline。基于spring生态的D-ORM,兼容各种小众国产数据库。运行时动态注册切换数据源,生成DDL/DML。读写元数据。常用于动态场景的底层支持,如:数据中台、可视化、低代码后台、工作流、自定义表单、异构数据库迁移同步、物联网车联网数据处理、数据清洗、运行时自定义报表/查询条件/数据结构、爬虫数据解析等,只需要一个注解即可与spring完美整合。缺点是和 spring 深度绑定,其次非插件机制实现,无法处理数据库驱动多版本问题,比如 Doris 依赖 MySQL 5.x 驱动,和 MySQL 的 8.x 驱动同时添加在 maven 依赖中,无法处理commons-beanutils。适配了 ResultSet 和 DynaClass,便于访问 ResultSet 属性。sagacity-sqltoy - [DataBase](/docs/2025/project/database/index.md) - [工具](/docs/2025/project/database/tools.md) - [开源项目](/docs/2025/project/index.md): 热门开源项目介绍 - [字节码](/docs/2025/project/java/bytecode.md) - [Cache](/docs/2025/project/java/cache.md) - [DIFF](/docs/2025/project/java/diff.md): 对象 diff javers。缺点:完整服务只支持 jpa,不支持 mybatisjava-object-diff缺点:停止维护java-util。GraphComparatorcommons-lang。Diffjava-obj-diff。Diff 增强,但未发布至 maven 中央仓库flink kubernetes operator 提供了类似实现。Diffjson 类zjsonpatch - [Excel](/docs/2025/project/java/excel.md): fastexcel 自定义导入导入转换器 枚举&字典转换 图片导入导出 数字类型格式化 背景颜色设置 内容填充 - [Groovy](/docs/2025/project/java/groovy.md): 炫技Groovy!SpringBoot中的动态编程实战 - [Json](/docs/2025/project/java/json.md) - [Lombok](/docs/2025/project/java/lombok.md) - [Plugin](/docs/2025/project/java/plugin.md): pf4j。sbp。Plugin framework for Spring Boot based on pf4jspinnaker/korkoceanbase/odcexp。Java extension plugin and hot swap plugin(Java 扩展点/插件系统,支持热插拔,旨在解决大部分软件的功能定制问题)。没有在 maven 仓库找到依赖open-exp-plugin。只找到了这个devops-framework。源码:devops-boot-core/devops-plugin,类似于 pf4j 的插件系统COLA。源码:cola-components/cola-component-extension-startereasy-extensionAGEIPort。源码:ageiport-ext/ageiport-ext-arch。类似 dubbo 的 spi 机制AutoService。google autoservice。自动生成 SPI 需要的配置信息metainf-services。自动生成 MEA-INF/services 文件。sofa-ark代码更新不停机:SpringBoot应用实现零停机更新的新质生产力Spring Boot 插件化开发模式一种基于动态代理的通用研发提效解决方案fit-frameworkgravitee-plugin - [队列](/docs/2025/project/java/queue.md): hollow如何设计一款基于 MySQL 实现的 Message Queue - [序列化](/docs/2025/project/java/serde.md): incubator-furyprotobuf - [状态机](/docs/2025/project/java/state-machine.md): COLA实现一个状态机引擎,教你看清DSL的本质Cola-StateMachine状态机的实战使用聊聊Cola-StateMachine轻量级状态机的实现Spring Statemachine项目终于用上了Spring状态机,非常优雅!玩转 Spring 状态机:实现订单状态流转项目终于用上了 Spring 状态机,确实非常优雅!stateless4j。easy-statesJStatesquirreltemporal/sdk-java。temporal java sdk 内部状态机。同时提供了 plantuml,可在线查看状态变更状态模式简易实现CircuitBreakerStateMachine - [Thread](/docs/2025/project/java/thread.md): 上下文传递 transmittable-thread-local 动态线程池 Java线程池实现原理及其在美团业务中的实践hippo4jdynamic-tp 任务编排 gobrs-async disruptor Disruptor在撮合引擎的实践|得物技术 - [工具类](/docs/2025/project/java/util.md): agrona。High Performance data structures and utility methods for JavahutoolguavavavrjOOLJava8 Steam流太难用了?那你可以试试 JDFrameredissoncamelliaapache commonscommons-langcommons-collectionsjava-util。Rare, hard-to-write utilities that are thoroughly tested - [前端低代码](/docs/2025/project/lowcode/web.md): illa-builder。一万Star!这个开源低代码工具在海外疯狂流行amis。百度开源。前端低代码框架,通过 JSON 配置就能生成各种页面 - [验证码](/docs/2025/project/microservice/captcha.md): captchatianai-captchahutool。图形验证码 - [延迟队列](/docs/2025/project/microservice/delay-queue.md): 延迟队列实现 - [灾备](/docs/2025/project/microservice/fail.md): failsaferesilience4jguava-retryingspring-retryeasy-retryeasy-retrybucket4jguava。RateLimiter - [快速开发框架](/docs/2025/project/microservice/framework.md): ruoyi-vue-protwelvetArteiamspring-boot-3-jwt-securitysmart-cloudeladminyshop-crmcontinew-admindevops-frameworkmaku-bootsz-boot-parentlikeadmin_javamfish-nocodequan。Quan 基于Spring Boot 2.7.x开发的后台管理系统。采用的架构是基于DDD领域驱动设计思想的BFF架构。目标是打造一个支持多端适配、分布式、高可用、多模块的系统。在未来可扩展成任意的企业中后台系统解决方案。 前端基于 Ant Design 5.0,为 Web 应用提供了丰富的基础 UI 组件, 助力设计开发者「更灵活」地搭建出「更美」的产品 ~quan-adminmemberclubwemirr-platform - [分布式ID](/docs/2025/project/microservice/id.md): 项目 CosIdredisson。基于 redis 的Leaftinyiduid-generatoridworkerIdGenerator - [ORM 框架](/docs/2025/project/microservice/orm.md): mybatis mybatis-3。代码生成:generatormybatis-dynamic-sql。mybatis-plus。代码生成:mybatis-plus 仓库中 mybatis-plus-generator 模块MyBatis-Plus 深度指南:从基础到实战,让 DAO 层开发效率起飞s mybatis-flex。代码生成:mybatis-flex 仓库中 mybatis-flex-codegen 模块mybatis-plus-join。fluent-mybatis。代码生成:支持。已停止维护sql-analysis jpa jpahibernatespring data jdbc 其他 bean-searcherjOOQanyline。基于spring生态的D-ORM,兼容各种小众国产数据库。运行时动态注册切换数据源,生成DDL/DML。读写元数据。常用于动态场景的底层支持,如:数据中台、可视化、低代码后台、工作流、自定义表单、异构数据库迁移同步、物联网车联网数据处理、数据清洗、运行时自定义报表/查询条件/数据结构、爬虫数据解析等,只需要一个注解即可与spring完美整合。easy-query。放弃老旧的Mybatis,强类型替换字符串,这款ORM框架很强!!!commons-beanutils。适配了 ResultSet 和 DynaClass,便于访问 ResultSet 属性。sagacity-sqltoy - [规则引擎](/docs/2025/project/microservice/rule.md): icerule-engine-openrule-engineeasy-rulesevent-ruler 其他 Q-calculator。高性能优惠叠加计算框架 流程编排引擎 litefloweasy-flowsgobrs-asyncturbo - [Security](/docs/2025/project/microservice/security.md): twelvet。一款基于Spring Cloud Alibaba的权限管理系统Apache RocketMQ ACL 2.0 全新升级smart-sso 权限框架 Sa-TokenSpring Securitysupertokens-coreJustAuth 博客文章 企业级 Spring Boot 身份认证实践:如何正确集成第三方平台?构建企业级权限管理体系:Spring Boot RBAC 模型、数据权限与注解控制实战 - [Swagger](/docs/2025/project/microservice/swagger.md): hal-explorerknife4j - [WebSocket](/docs/2025/project/microservice/websocket.md): WebSocket 的 6 种集成方式 - [Component](/docs/2025/project/web/component.md) - [FlowGram](/docs/2025/project/web/flowgram.md): 字节开源的 FlowGram.AI 介绍 - [Overview](/docs/2025/project/web/index.md) - [工作流](/docs/2025/project/web/workflow.md): react pro-flowxyflow。reactflow。基于 reactflow 实现React Flow。中文网站React Flow。中文网站React-Flow。中文网站Flowmix 可视化编辑器flowifyReactflow ExamplesReact Flow Devawesome-node-based-uisflowgram.ai。流程图 demoJsplumbkedro-vizx6。x6 文档分为 2.x 和 1.x。文档不一样,有些还在支持的功能在 2.x 文档没有展示2.x。1.x。x6-react-componentsx6-react-componentsxflow。xflow 2.x 版本文档迁移至 x6布局算法hierarchylayoutflowgram.ai。字节出品workflowbuilder。一个类似 pro-flow 的库,提供开箱即用的 workflow 解决方案tinyflow。 - [博客文章](/docs/2025/project/workflow/blog.md) - [Workflow](/docs/2025/project/workflow/index.md) - [设计](/docs/2025/project/workflow/orchestration/design.md): 资料整理 博客文章简易实现 DAG 任务编排在鸿蒙上200行代码实现基于工作流的启动编排设计Java 实现一个轻量的 DAG 任务调度 demoDAG多任务编排驱动设计基于DAG的任务编排框架/平台JavaFlow:轻量级工作流编排利器的设计与实现A DAG Printer in Java赋能转转回收:LiteFlow可视化编排方案设计MaxCompute 自适应执行引擎DAG 2.0为1.5亿分布式作业提供自动化保障火山引擎数据调度实例的 DAG 优化方案DAG 布局算法介绍&在流水线库中的应用手把手教你打造最好用的任务框架开源项目dag-flowdag-flow-platformtaskflowtaskflow。开源任务编排框架TaskFlowawesome-workflow-engines - [任务编排](/docs/2025/project/workflow/orchestration/index.md): 参考:awesome-workflow-engines - [Maestro](/docs/2025/project/workflow/orchestration/maestro.md) - [Orca](/docs/2025/project/workflow/orchestration/orca.md): spinnaker 是一个多云交付系统,即 CI/CD 中的 CD 部分,定位类似于 KubeVela。Spinnaker 源自于 Netflix,完全基于云服务,对接 aws 等云服务商,将应用部署到云服务中。和物理机类似的“包年包月”不同,Spinnaker 支持的是按量付费和动态伸缩,追求极致的弹性。Spinnaker 极其强大的一点在于多云交付,避免应用因为单一云服务故障导致应用不可用。 Spinnaker 采用微服务架构,orca 是流程引擎。Spinnaker 的发布流水线由一个个 stage 组成,deck 提供可视化界面将 stage 串联起来组成 pipeline。Orca 则具体执行 pipeline。在 Orca 中,pipeline 表示串行执行的 stages,还可以支持并行的 orchestration,但是不是 pipeline 只支持串行执行,而是因为 Spinnaker 是一个 CD 系统,pipeline 和 orchestration 是 Spinnaker 功能上的划分,pipeline 表示发布流水线,orchestration 表示可以在 ui 上由用户发起的任务。pipeline 本身是 DAG。 DAG。支持丰富的编排支持上下游依赖的 stage 编排上下游依赖跨 pipeline 依赖stage 组合。stage 支持设置 before、after 和 onFailure stage,多个 stage 合并成一个 stagestage 管理。暂停、恢复、撤销stage 易开发、易维护。stage 接口和 model 定义良好,对开发新的 stage 很友好,避免开发者绑定,易于新增、修改定制 stageTrigger。支持多种 trigger参数传递。初始化参数。pipeline 级别运行参数。pipeline、stage 级别,task 的参数也可供下游使用模板参数。基于表达式的动态参数 参考链接: spinnaker。application deploymentpipelinescreate a pipelinePipeline TemplatesPlugin User GuideTest a Pipeline Stage PluginCustom Job StagesCustom Webhook StagesHiding StagesWriting a New StageSet up Orca to use SQLOrca: Redis to SQL MigrationHorizontally Scale Spinnaker ServicesSpinnaker第七节—Orca代码详解 - [开源项目](/docs/2025/project/workflow/orchestration/project.md): 参考 awesome-workflow-engines,使用 AI 转成 table,调整了 Java 语言项目的顺序。 类似项目:awesome-pipeline - [Temporal](/docs/2025/project/workflow/orchestration/temporal.md): 依靠 temporal 作为调度引擎,开发调度任务的管理后台和 web,将 temporal 变成类似 xxl-job 的调度系统。本文介绍相关核心信息 - [Workflow](/docs/2025/project/workflow/workflow.md): 微服务的调度 temporalkestramaestro。一周2K star!Netflix 开源的工作流编排器,不容错过百倍加速:我们如何为 Netflix Maestro 工作流引擎注入澎湃动力incubator-kie-kogito-runtimeskogito-examplesflux三方收录。awesome-java#任务调度 规范 CloudEventsOpenAPIAsyncAPIwebhook。开源标准统一WebhookGraphQLgRPCServerless Workflow ## AI - [index](/docs/2025/ai/index.md) - [项目](/docs/2025/ai/project.md) - [编程](/docs/2025/ai/program.md): 编程 异步日志:性能优化的金钥匙通用框架实践|Pipeline设计+幂等重试全链路营销|基于事件驱动的流程编排系统一文讲透程序编排的核心方式:从表达式语言到并行化实践修改一行注解引起的故障什么?!redis也可以是成本优化利器同一段代码写N遍?通用树结构一次搞定读书笔记|程序员的README71.7万/秒到1.4万/秒!数据库查询优化实战「缓存」会用很容易,用好才是技术活“日志=数据库”?聊一聊日志背后的抽象阿里同学都在用的开发环境和工具记一次细思极恐的FastJson差点引发的大面积故障高并发编程知识体系Spring容器的本质悲催,放到 Map 中的元素取不出来了系统稳定性建设三件事优雅的参数校验,告别冗余if-else从 o11y 2.0 说起,大数据 Pipeline 的「多快好省」之道低并发编程|如何用720个请求让后端服务器瘫痪 JVM 一行代码,我优化掉了1G内存占用如何找出Java进程占用CPU高的元凶当leetcode真题上了生产引发的线上问题JVM核心知识体系如何快速定位并优化CPU 与 JVM 内存性能瓶颈?8G的容器Java堆才4G怎么就OOM了?JDK11升级后竟让内存利用率飙升到90%以上?JVM 里的逻辑漏洞,居然让你的哈希表慢了 20%!记一次内存利用率问题排查怎样快速定位进程性能瓶颈?加一个JVM参数,让系统可用率从95%提高到99.995%OOM排查之路:一次曲折的线上故障复盘老年代的“滞留对象”:一次由提前晋升引发的线上内存告警排查 MySQL 详解MySQL字符集和Collation浅入浅出——MySQL索引MySQL索引学习笔记 ODPS 一种基于ODPS SQL的全局字典索引分布式计算思路ODPS SQL ——列转行、行转列这回让我玩明白了!如何对付一个耗时6h+的ODPS任务:慢节点优化实践如何让SQL跑快一点?(优化指南)【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场 AI 基于Spring AI Alibaba 的 DeepResearch 架构与实践提示词工程的十大认知误区23招教你掌握大模型提示词技巧用系统架构思维,告别“意大利面条式”系统提示词如何用AI Coding和Claude Code提升开发效率?看我的全流程复盘解密 Cursor:一位深度用户的原理探析与实验验证构建可靠AI Agent:从提示词、工作流到知识库的实战指南揭秘 Claude Code:AI 编程入门、原理和实现,以及免费替代 iFlow CLIAI Coding实践:CodeFuse + prompt 从系分到代码 ## 阿里 - [概览](/docs/2025/ali/index.md): 阿里技术文章精选 - [大数据](/docs/2025/ali/bigdata.md) - [整洁代码](/docs/2025/ali/clean-code.md): 好好的“代码优化”是怎么一步步变成“过度设计”的如何写好代码业务系统架构实践总结如何写好代码?一个提升代码可读性的小技巧代码整洁之道--告别码农,做一个有思想的程序员一文聊聊代码的可读性不规范的枚举类代码引发的一场事故一文浅谈CodeReview中的一些思考一文梳理Code Review方法论与实践总结编程中最难的就是命名?这几招教你快速上手思考:如何写出让同事难以维护的代码?doge我有一个朋友写出了17种触发NPE的代码!避免这些坑 - [成长](/docs/2025/ali/grow.md) - [面试](/docs/2025/ali/interview.md) - [Java](/docs/2025/ali/java.md): Java开发实践:合理使用线程池及线程变量线程操纵术之更优雅的并行策略了解Java可见性的本质图解JVM内存模型及JAVA程序运行原理三万字长文:JVM内存问题排查Cookbook总结|性能优化思路及常用工具及手段Java异常处理和最佳实践(含案例分析)卓越工程布道:掌握条件判断的模式这代码居然有差别?CPU友好的代码该这样写一个 List.of 引发的“血案”Java 缺失的特性:扩展方法Java 缺失的特性:操作符重载一种新的流:为Java加入生成器(Generator)特性升级指南之JDK 11+ 新特性和AJDK从 JDK 9 到 19,认识一个新的 Java 形态(内存篇)一些杂想:Java老矣,尚能饭否?一文解读业务平台升级JDK11的适配之路如果你也会这样调试,那真是泰酷辣浅谈阿里开源JVM Sandbox(内含代码实战)一文解读|Java编译期注解处理器AbstractProcessor - [锁](/docs/2025/ali/lock.md) - [微服务](/docs/2025/ali/microservice.md): 高并发架构设计(三大利器:缓存、限流和降级)案例分析|线程池相关故障梳理&总结四个步骤,教你落地稳定性保障工作 - [其他](/docs/2025/ali/other.md) - [程序设计](/docs/2025/ali/program.md) - [Spring](/docs/2025/ali/spring.md): 一文详解Spring Bean循环依赖一次由于八股文引起的内存泄漏浅挖编码中遇到的循环依赖问题Spring循环依赖那些事儿(含Spring详细流程图)Spring探索|既生@Resource,何生@Autowired?深入Spring配置项问题,全面解析 - [SQL](/docs/2025/ali/sql.md): 慢SQL治理经验总结技术同学必会的MySQL设计规约,都是惨痛的教训SQL能完成哪方面的计算?一文详解关系代数和SQL语法关于Mysql数据存储,你了解多少?慢SQL是如何拖垮数据库的?破防了,谁懂啊家人们:记一次mysql问题排查 ## CNCF - [CNCF](/docs/2025/cncf/index.md): CNCF 项目介绍 - [经验技巧](/docs/2025/cncf/experience.md) - [Container](/docs/2025/cncf/container.md) - [Kubernetes](/docs/2025/cncf/kubernetes/index.md): k3skindminikubedocker desktopvcluster。在 kubernetes 内部虚拟出一个新的 kubernetes 集群以提供更好的多租户和隔离体验,底层基于 k3s,额外负载很低 - [Alert-Manager](/docs/2025/cncf/kubernetes/application/alert-manager.md): 动态监控和告警规则 PrometheusRuleAlertmanagerConfig - [Doris Operator](/docs/2025/cncf/kubernetes/application/doris-operator.md): 链接: 基于 Doris-Operator 部署doris-operator - [Flink Kubernetes Operator](/docs/2025/cncf/kubernetes/application/flink-kubernetes-operator.md): Flink Kubernetes Operator 使用 Kubernetes API,提供云原生管理 Flink 集群的能力: 部署、监控 Flink Session 和 Application 应用升级、暂停和删除应用日志和 metrics 集成支持弹性部署,与 Kuberentes 生态原生集成 - [Grafana Operator](/docs/2025/cncf/kubernetes/application/grafana-operator.md): 参考文档 Grafana 高可用部署最佳实践 - [KDP](/docs/2025/cncf/kubernetes/application/kdp.md): KDP(Kubernetes Data Platform) 提供了一个基于 Kubernetes 的现代化混合云原生数据平台。它能够利用 Kubernetes 的云原生能力来有效地管理数据平台。 - [Nginx Ingress Controller](/docs/2025/cncf/kubernetes/application/nginx-ingress-controller.md) - [其他](/docs/2025/cncf/kubernetes/application/other.md): WatchAlertnightingaleLocal Path Provisioner 完全指南:轻量级Kubernetes本地存储解决方案 - [Prometheus Operator](/docs/2025/cncf/kubernetes/application/prometheus-operator.md): 通过 prometheus operator 采集监控指标: 参考:kube-prometheus-stackPrometheus 基于 Pod 和 Service 注解的服务发现ServiceMonitor。通过 Service 采集PodMonitor。采集 Pod - [Spinnaker](/docs/2025/cncf/kubernetes/application/spinnaker.md) - [Temporal](/docs/2025/cncf/kubernetes/application/temporal.md): Temporal 是一个开源的支持持久化微服务编排的工作流引擎。 对于一个工作流,可以包含多个步骤,如 A -> B, C -> D 形成一个复杂的 DAG 图。Temporal 支持工作流持久化,即当工作流执行步骤 A 后,发生异常,重试时会略过执行过的 A,继而执行后续的 B, C -> D。 Temporal 的性能非常的高,可同时支持百万级工作流。知名数据集成工具 airbyte 即使用 Temporal 作为定时调度工具。根据笔者亲身体验,使用 Temporal 作为定时任务引擎,通过 CronJob 支持超过 4w+ 调度频率在 3s ~ 5min 的定时任务。 文档链接: 文档:https://docs.temporal.io/github 仓库:temporal安装docker文档:Docker & Docker Composegithub 仓库:docker-composekubernetes文档:Helm chartsgithub 仓库:helm-charts案例github 仓库:samples-java - [Volcano](/docs/2025/cncf/volcano.md): 批计算调度系统 文档不全 项目地址:volcano 其他系统 kueue 文章列表 基于Volcano实现节点真实负载感知调度Kueue v0.6.0 引入多集群队列能力探索K8s与AI的结合:PyTorch训练任务在K8s上调度实践 - [配置语言](/docs/2025/cncf/config.md): kcl。kcl-lang.ioKCL v0.7.5 版本和 Flux KCL 集成更新速递!Pkl 和 KCL 的异同cue。kubevela 使用 cuepkl。 其他 10 种 Kubernetes 声明式配置管理的方式,你都了解多少? - [包管理](/docs/2025/cncf/package.md): glasskubeKubernetes 系列(一三八)Glasskube 简介——Kubernetes 不可或缺的包管理器解决 K8S 使用大难题的包管理工具helm。helm.sh - [监控告警](/docs/2025/cncf/alert.md): 本文仅限于集成场景,非监控告警系统本身,而是如何更好地打通应用和现有的监控告警系统,简化使用。 集成场景指的是应用自身进行埋点或者使用开箱即用的库生成监控指标,将指标上报或者由监控系统主动采集(push 或 pull 方式),通过可视化系统查看监控指标,配置告警规则接收告警并进行分发。 为了实现集成,需要实现如下要点: 指标采集。监控系统如何采集到应用监控指标?当服务器、应用、任务新增或下线时如何动态调整采集?可视化。可视化告警规则管理如何简化告警配置?表单或者内置如何动态新增或删除告警规则?告警事件通知如何将告警通知分发到具体的服务器、应用、任务 owner? 而在当今 prometheus + grafana 已经成为事实上的监控标准,集成场景也主要以 prometheus 为主。 - [CI/CD](/docs/2025/cncf/cicd.md) - [数据缓存](/docs/2025/cncf/cache.md): v6d。Fluid 携手 Vineyard,打造 K8s 上的高效中间数据管理fluidalluxio ## 面试大全 - [index](/docs/2025/interview/index.md) - [概览](/docs/2025/interview/java/index.md) - [Mybatis](/docs/2025/interview/java/mybatis.md) - [Spring](/docs/2025/interview/java/spring.md) - [概览](/docs/2025/interview/mysql/index.md) - [概览](/docs/2025/interview/redis/index.md) - [概览](/docs/2025/interview/kafka/index.md) - [index](/docs/2025/interview/flink/index.md) - [反压](/docs/2025/interview/flink/doc/backpressure.md) - [概念](/docs/2025/interview/flink/doc/concept.md) - [文档](/docs/2025/interview/flink/doc/doc.md): 参考文档: God-Of-BigDataflink-learningFlink SQL与DataStream:入门、进阶与实战。配套代码:flink-studyFlink 学习网 - [内存管理](/docs/2025/interview/flink/doc/memory.md) - [DataStream 和 SQL 互转](/docs/2025/interview/flink/practice/datastream2sql.md): 在 flink 开发中,提供了 3 层 API 供使用: 在 API 层级中 SQL/Table 和 DataStream API 都是基于 Stateful Stream Processing API,但是二者使用的方式并不同: Stateful Stream Processing 通过 DataStream API 中的 ProcessFunction 嵌入到 DataStream API 中。SQL/Table API 在编译阶段生成 JobGraph,在通过 JobGraph 通过代码生成来生成底层的 Operator,底层的 Operator 利用 ProcessFunction。 因此 SQL/Table 和 DataStream 之间是缺乏复用的,导致两种 API 能力未能对齐,比如: Interval Join。DataStream 只支持 inner join,不支持 left join,而 SQL/Table 同时支持 inner join 和 left joinLookup Join。在关联维表时常关注的 3 个点为:cache、retry、同步 or 异步。DataStream 可以在不同的算子中完成关联维表操作,filter、map 和 flatmap,还有专门的 AsyncIO 来实现异步加载维表,但是需要用户自己按需添加 cache 和 retry 功能。SQL/Table 大部分 connector 都提供了 Lookup Join 功能,且为 Lookup Join 功能提供了 cache 和 retry 功能,但是多以同步为主,只有部分实现了异步如 hbase、paimon、doris,如 jdbc 不支持异步。另外如 paimon API 不适合用 DataStream API 开发维表 join 功能。 因此在使用 DataStream API 编程的时候,遇到 API 或 connector 支持力度不如 SQL/Table 的时候,可以利用 DataStream 和 Table 的相互转换能力,通过 DataStream -> Table -> SQL -> Table -> DataStream 的方式巧妙利用 API 或 connector 的 SQL/Table 能力。 注意:此场景仅适用于使用 Java DataStream API 开发 flink 任务场景。 - [案例](/docs/2025/interview/flink/practice/example.md): 基于 Flink 的实时会员等级计算架构设计与实现告别直播卡顿:我们如何用 Flink SQL 打造秒级监控大盘Flink实时计算topN热榜Flink规则引擎。qflinkwidetable。Apache Flink 和 Paimon 在自如数据集成场景中的使用 - [Flink SQL Gateway](/docs/2025/interview/flink/practice/gateway.md) - [快速开始](/docs/2025/interview/flink/practice/quick-start.md): 以 paimon 为例,使用 paimon catalog 和 connector,文件系统采用 minio,即 s3。 下载 catalog,参考 Quick Start,下载 Flink 1.20 的 bundle 包:paimon-flink-1.20-1.1.1.jar。下载 s3 支持。参考 Filesystems,下载 paimon-s3-1.1.1.jar。 - [Flink SQL](/docs/2025/interview/flink/practice/sql.md) - [index](/docs/2025/interview/flink/devops/index.md) - [通用](/docs/2025/interview/flink/question/common.md) - [Flink](/docs/2025/interview/flink/question/flink.md) - [Flink SQL](/docs/2025/interview/flink/question/sql.md) - [概览](/docs/2025/interview/flink/cep/index.md) - [概念](/docs/2025/interview/flink/cep/concept.md): 如上图所示,假设我们对模式 A、B、B、C 感兴趣,它代表我们想要找到这样的事件序列: A 类事件发生B 类事件发生两次C 类事件发生 从事件流中匹配出 a1、b1、b2、c1 的具体事件。注意,这里我们并不要求事件之间是严格连续的 flink-cep 分为 3 个核心概念: 模式(Pattern)事件流(DataStream)匹配结果(Match) flink-cep 的应用场景有: 实时风控。风险用户检测。5 分钟内转账次数超过 10 次且金额大于 10000实时营销。滴滴的一些实时营销场景:乘客线上冒泡 1 分钟没罚单乘客下单后 2 分钟内没司机接单乘客在不同业务线之间比价实时规则检测。直播实时检测。检测到 10 分钟内观看人数持续下跌,实时推送直播达人,调整直播策略用户在 30 分钟内创建多笔订单,没有支付,疑似刷单,进行账号封禁爆品发现。某款商品 5 分钟内成交超过 1000 单,实时推送商家,提醒及时补货、直播间挂链接在线奖励。当完成在线任务后,及时发放积分和奖励 - [动态更新 CEP](/docs/2025/interview/flink/cep/dynamic.md): todo - [Json 定义](/docs/2025/interview/flink/cep/json.md): 本文是阿里云的 flink-cep 动态规则加载的 JSON 格式定义解读。 flink-cep 的定义为 Pattern 对象,它是一种链式的定义: 如上述案例中定义了 start -> middle -> end 3 个条件,在 Pattern 类中有 previous 字段分别存储每个条件的上一个条件。 在 ververica flink-cep 的 JSON 定义中,它是按照 graph 进行定义,因此会有 node 和 edge 的概念,只不过只有一条路径。 - [规则引擎](/docs/2025/interview/flink/cep/rule.md) - [概览](/docs/2025/interview/flink/risk/index.md) - [概览](/docs/2025/interview/paimon/index.md): Apache Paimon 是一种新型的流式数据湖存储技术,结合了 LSM-Tree 结构和湖格式,提供了高吞吐、低延迟的数据摄入、完整的流式变更订阅以及高效的 OLAP 查询能力。 流批一体。基于统一的数据湖存储,在分钟级时效性基础上满足流、批、OLAP 等场景的全方位支持。近实时高效更新局部更新增量流读全增量混合流读特别的 Lookup 能力实时入湖CDC 摄入Schema Evolution生态扩展计算引擎flinksparkhivetrinodorisstarrocks存储。支持文件系统/对象存储语言javapythonrusticeberg 生态 - [概念](/docs/2025/interview/paimon/concept.md) - [主键表](/docs/2025/interview/paimon/primary-key-table.md) - [实践](/docs/2025/interview/paimon/practice.md) - [参数](/docs/2025/interview/paimon/parameter.md) - [案例](/docs/2025/interview/paimon/example.md) - [index](/docs/2025/interview/gravitino/index.md) - [快速开始](/docs/2025/interview/gravitino/quick-start.md) - [Flink 生态](/docs/2025/interview/gravitino/flink.md) - [数据血缘](/docs/2025/interview/gravitino/lineage.md) - [概览](/docs/2025/interview/doris/index.md): Doris 也太懒了吧... - [标签](/docs/2025/interview/doris/tag.md): 标签数据天生具有 3 个维度特征: 时效离线标签。T + 1近实时标签。分钟/小时实时标签。秒/毫秒聚合粒度聚合标签明细标签业务属性账号属性地理位置消费行为活跃行为用户偏好资产信息...... 用户使用画像标签的时候,进行简单地拖拉拽拼接规则,并不了解背后的技术细节。 - [窗口函数](/docs/2025/interview/doris/window.md): 窗口函数是一类特殊的分析函数,又名开窗函数。最常见的窗口函数是 row_number(),如用 row_number() 函数进行去重: 窗口函数总结如下: 窗口函数只能出现在 select 列表和最外层的 order by 从句中。在查询过程中,窗口函数会在最后生效,就是说,在执行完 join,where 和 group by 等操作之后再执行。窗口函数针对的是 select 最后的结果集每一行计算出一个单独的值,这种方式允许用户在 select 从句中增加额外的列,给用户提供了更多的机会来对结果集进行重新组织和过滤窗口函数是对于多个输入行做计算得到一个数值。窗口函数是在一个特定的窗口内对输入数据做处理,每个窗口函数内的数据可以用 over() 从句进行排序和分组 - [概览](/docs/2025/interview/odps/index.md) - [概览](/docs/2025/interview/datawarehouse/index.md) - [湖仓](/docs/2025/interview/datawarehouse/lakehouse.md) - [起源](/docs/2025/interview/datawarehouse/source.md): 大数据起源于个人 PC 普及,互联网爆发性增长,Google、雅虎等头部公司数据量级远超单机可处理上线,传统的数据库基本无法处理,因此开始探索新型的数据存储和计算技术。在此背景下 Google 发布了内部研发成果的论文,即 Google 三架马车的 GFS、MapReduce 和 Bigtable 论文,后来雅虎基于 GFS/MapReduce 论文建立了开源的 Hadoop 项目,奠定了后续十多年大数据发展的基础,同时大数据一词被广泛被用于描述这类数据量过大或过于复杂而无法通过传统单机技术处理的系统。 虽然以 MapReduce 为代表的数据存储计算框架在搜索引擎场景获得巨大成功,但是在数据库社区看来,MapReduce 反而是一次巨大的倒退: 缺乏高级数据访问语言,由 SQL 语言变成 Java,编程模型的巨大倒退与 DBMS 系统不兼容,缺乏 schema、数据更新、事务能力实现落后,基本是暴力遍历而不是使用索引 一直到今天,这依然是大数据系统的不足,时至今日依然具有指导意义,指明大数据系统的后续发展方向: hive/spark 提供高级编程语言parquet/orc 存储格式为数据文件添加了索引数据湖格式提供 ACID 事务、数据更新 由于大数据系统特性上的种种不足和技术栈的独立性,大数据虽然发展迅猛,各种项目百花齐放,但是多定位在某些细分场景,不是通用场景解决方案,导致大数据生态圈的复杂,组件众多,大数据具有较高的应用门槛。 hadoop。map-reduce/hdfs/yarndataxairflowhive/spark/flinkhbase 随着发展,统一存储,统一计算,在离线服务混部,HTAP: 统一存储。kafka、hive实时。以 kafka 为代表,基于消息队列,具有高吞吐、低延迟,但是数据存储时效短、不可查询的特征离线。以 hive 为代表,基于文件,具有海量存储、查询慢、不支持更新只能覆盖的特征流批一体。以 Iceberg/Hudi/DeltaLake/Paimon 为代表的数据湖格式基于文件来实现队列特性,以 Kafka/Pulsar 为代表的消息队列基于队列实现文件特性统一计算。实时。以 flink 为代表离线。以 hive/spark 为代表流批一体。2015 年 Google Dataflow Model 论文的发布厘清了流处理和批处理的对立统一的关系,即批处理是流处理的特例,这为流批一体的大趋势奠定了基础。 在数据湖等基于文件的存储中,流式读取通常以监听 Changelog 的方式实现;而在基于队列的存储中,批处理要重算更新结果,则无法直接删除或覆盖之前已经写入队列的结果,要么转为 Changelog 要么重建一个新队列 版本控制。由于更新方式的不同,文件中的数据是可变的,而队列中的数据是不可变的 文件表示某个时间点的状态,因此数据湖需要版本控制以增加回溯的功能;而相对地,队列则表示一段时间内状态变化的事件,本来有 Event Sourcing 的能力,因此不需要版本控制 并行写入。文件有唯一的写锁,只允许单个进程写入。数据湖通常以整个目录作为一个表暴露给用户,如果有多并行写入,则在该目录下为每个并行进程新增基于文件的快照进行隔离(MVCC)。而相对地,队列本来就支持并行写入,因此无需快照隔离 相信不少读者已经隐约感觉到:基于文件的存储类似流表二象性中的表,适合用于保存可以被查询的可变状态(计算的最终结果或中间结果),而基于队列的存储类似表示流表二象性中的流,适合用于保存被流计算引擎读取的事件流(Changelog 数据)。 虽然流表二象性能使得两者可以交替使用,但若使用不当会导致数据在流表两种状态间进行不必要的转换,并给下游业务造成额外的麻烦。具体来讲,如果文件系统中存的是 Changelog 数据,那么下游进行流式读取(监听)时,读到的是 Changelog 的 Changelog,完全不合理。相对地,如果消息队列存的是非 Changelog 数据,那么该队列则丢失了更新的能力,任何更新都会导致消息不同版本的同时存在。由于目前 Changelog 类型一般由 CDC 或者流计算的聚合、Join 产生,还未推广到一般的 MQ 使用场景,所以后一种问题更常发生。但笔者认为,Changelog 是更加流原生的格式,未来大概会标准化并普及到队列存储中,目前非 Changelog 的数据则可以被看作是 Append-Only 业务的特例。 上述的结论可以被应用到当前热门的实时数仓建设中。除了 Lambda 架构,当前实时数仓架构主要有 Kappa 架构和实时 OLAP 变体两种[9],无论哪种通常都使用 Kafka/Pulsar 等 MQ 作为 ODS/DWD/DWS 等中间层的存储,OLAP 数据库或 OLTP 数据库作为 ADS 应用层的储存。这样的架构主要问题在于不够灵活,比如若想直接基于 DWD 层做一些 Ad-hoc 分析,那么常要将 DWD 层 MQ 中的数据再导出到数据库再做查询。 如果使用 Flink 直接读 MQ 数据来算呢?其实是可以的,因为像 Pulsar 也提供了无限期的存储,但效率会比较低,主要原因是 MQ 无法提供索引来实现谓词下推等优化[10],另外经过聚合或者 Join 的数据是 Changelog 格式,数据流中会包含旧版本的冗余数据。因此业界有新的趋势是用 Iceberg 等数据湖来代替 MQ 作为数仓中间层的存储,这样的优点是能比较好地对接离线数仓及其长久以来的业务模式,而代价则是数据延迟可能变为近实时。以本文 “文件适合存储状态” 的观点来讲,实时数仓中需要被业务查询的表的确更适合用文件存储,因为业务需要的是状态,而不关心变更历史。 - [概览](/docs/2025/interview/trouble_shoot/index.md) - [经验案例](/docs/2025/interview/trouble_shoot/experience.md) - [进阶功能](/docs/2025/interview/flink/cep/advance.md) - [问题经验](/docs/2025/interview/flink/cep/question.md) ## FAQ - [FAQ](/docs/2025/faq/index.md): 热门问题记录。 如果有新的问题,请提 issue。 为什么现在没人愿意给开源项目提 PR 了如果非得用Slack,那还算什么平台即产品 ## Others - [信息系统](/docs/2025/information/index.md): 信息系统知识总结 - [项目](/docs/2025/information/project.md): Xx