1. 文档我所了解的 Flink:从底层 API 回到 SQL一段从离线 SQL 转向 Flink 的学习经历:为了一个实时监控需求,从 ProcessFunction 手动管状态写起,到 Window、Flink SQL,再到 SQL SDK、PyFlink 和流批一体。越往上层走开发越省事,但正是对底层的理解,让上层的路走得更远。
  2. 文档Flink规则引擎风控规则天天在变,Flink 作业却不能天天重启。本文先用一个能动手的欺诈检测实验看规则怎样触发告警,再结合 QFlink 的实现,讲清楚规则引擎的三件事:规则广播、动态分组,以及能随时改的窗口。
  3. 文档Flink SQL 回撤机制与问题流式 SQL 的结果会随输入不断变化,回撤(Changelog)就是通知下游「之前那条作废」的机制,它是正确性的最小代价。但一次更新被拆成「撤回 + 新值」两条消息,会带来乱序和中间错误结果两类副作用。本文用词频统计讲清回撤的原理,再分别看引擎如何解决乱序、业务侧如何用版本列和自定义算子挡住中间结果。
  4. 文档Java 调用 Python:亲手搭一座 JNI 桥PyFlink 的线程模式为什么能让 Java 算子直接调用 Python 函数?这篇教程跟着 QFlink 里的示例,从零搭一座 JNI + Python/C API 的桥:Java 传一个日期,Python 返回星期几。一条命令跑起来,再一步步拆开 Java、头文件、Python、C 和编译;亲手测一次 GIL 让多线程变慢,最后回到 PyFlink 和 PEMJA,对比进程模式与线程模式。
  5. 文档我理解的流批一体:从三条链路到一个参数同一张订单宽表,实时链路秒级写入,离线链路天级整表覆盖,已经更新的行会被旧快照改回去。本文用这张表贯穿全文,从现状的实时、离线两条链路讲到 Fluss + Paimon 的改造,最后落到 Materialized Table 的增量语义:需求变了,只改一个 FRESHNESS 参数。衡量每一步的标准是:有多少原本只存在于人记忆里的约束,被系统接管了。