Avatar

Live life to the fullest

GitHub 协同行为实时检测系统

StarStream

一个基于事件时间的流式检测系统,用于在数分钟内识别 GitHub 上疑似协同操纵 Star 的活动。

Year
2026
Role
系统架构、数据工程与前端开发
  • Java 21
  • Apache Flink
  • Apache Kafka
StarStream 使用 MinHash 与 LSH 为相似账户制造共享分区键的流程图

Project overview

StarStream 探索如何在 GitHub 协同操纵行为发生时对其进行识别,而不是在数月后通过离线图分析才能发现异常。

系统将公开的 GH Archive 事件回放至多阶段流处理管道,从数以亿计的普通事件中逐步筛选出可疑行为集群,并测量这些活动从发生到被检测所需的时间。

01

Background

GitHub Star 会影响开发者对开源项目可信度的判断,也可能影响依赖选择、招聘评估和投资决策,因此逐渐成为协同操纵的目标。已有研究揭示了假 Star 活动的规模,但参考检测方法通常需要在完整的账户—仓库关系图上进行季度级批处理。

02

The problem

项目的核心问题,是如何将依赖全局关系图和迭代计算的批处理算法转化为事件时间流处理系统。Flink 只能根据已知键分发数据,但检测真正需要聚合的对象——隐藏的协同活动——并不存在于原始 GitHub 事件中。

03

Major features

渐进式信号筛选

通过仓库 Star 速率异常、账户活动画像和锁步协同行为三个阶段逐步缩小分析范围,只对少量候选对象执行计算成本较高的关联检测。

MinHash-LSH 动态分区

将账户近期 Star 记录转换为 MinHash 指纹,并使用共享的 LSH 分段生成行为分区键,使相似账户自动进入同一个 Flink 分区,避免不可扩展的全账户两两比较。

可量化的检测结果

React 控制台同时展示实时疑似活动与历史验证数据;在已检测账户中,中位检测时间为 1.2 分钟,接近由五次共同行为决定的 1.1 分钟理论下限。

04

Implementation process

  1. 01

    重构批处理算法

    将原始研究中的检测信号与批处理实现方式分离,再利用事件时间窗口、有限状态和确定性分区重新设计全局图关联过程。

  2. 02

    先验证,再扩展

    使用已确认的恶意活动数据、公开参考检测结果和低活动时期的负向对照,对窗口长度、LSH 分段方式与确认阈值进行实验和调优。

  3. 03

    构建可信的展示方式

    明确区分实时数据与历史实验数据,记录召回率和检测延迟的适用范围,并通过演示模式匿名化仓库名称,避免在公开截图中暴露具体账户或仓库。

05

Technical challenges

为隐藏的协同行为生成键

GitHub 事件中没有活动或集群标识。系统通过局部敏感哈希制造共享行为键,将无法直接分区的全局关系问题转化为普通的 Flink keyBy 操作。

建立可信的验证口径

公开检测结果只能作为参考标签,而不能被视为绝对真值;流式检测的召回率也不能与批处理结果直接等同,因此每项指标都需要明确说明数据范围、比较基准与局限。

06

Project gallery