flink-china / flink-forward-asia-hackathon-2021

本 GitHub 项目是 Flink Forward Asia Hackathon (2021) 的投票专用项目。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[参赛项目] 基于flink集成rete网络实现规则引擎处理分析海量数据。

BaoHuaWang opened this issue · comments

项目简述

基于flink集成rete网络实现规则引擎处理分析海量数据。

背景

1、Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算,利用flink强大的流处理能力和flink sql处理能力。

2、Rete 算法是卡内基梅隆大学的 Charles L.Forgy 博士在 1974 年发表的论文中所阐述的算法。 该算法提供了专家系统的一个高效实现。Rete 在拉丁语中译为”net”(即网络)。Rete 是一种进行大量模式集合和大量对象集合间比较的高效方法,通过网络筛选的方法找出所有匹配各个模式的对象和规则。其核心**是用分离的匹配项构造匹配网络,同时缓存中间结果。以空间换时间。规则编译(rule compilation)和运行时执行(runtime execution)。
RETE网络示意图
image
Root Node:所有对象进入网络的入口,在一个网络中只有一个根节点。借用Rete算法经典
input node:可分为ObjectTypeNode, AlphaNode, LeftInputAdapterNode等。

目标

利用flink强大的流处理能力和flink sql处理能力集成rete网络实现规则引擎,实现将原先无数个的规则,利用rete网络整合成一个flink的function来分析数据,可通过flink的并行度来实现这个function的并发能力,再使用flinksql 聚合处理function输出的数据。这套解决方案极大提高基于flink架构数据处理能力,减少主机资源使用,降低整个架构的处理数据的复杂度。

实施方案

本次提交的demo是从kafkak读取json格式的原始数据,从mysql动态读取规则配置,利用广播模式分发这些规则配置,在task中重构建rete网络实现100个规则,,每个规则实现要内容不一样,从经过task处理的输出数据,在转成table,最后使用flink-sql来实现聚合和关联查询。Kafka读取的数据每条有100个字段。

Flink+rete的任务处理流程图:
image

flink处理任务:
image

成员介绍

天池昵称:松鼠鱼

团队成员:王宝华

图片链接好像有问题,看不到图片。