实时计算Flink版支持通过DataStream作业的方式运行支持规则动态更新的Flink CEP作业。本文结合实时营销中的反作弊场景,为您介绍如何基于Flink全托管快速构建一个动态加载最新规则来处理上游Kafka数据的Flink CEP作业。
背景信息
在电商平台投放广告时,广告主通常有预算限制。例如对于按点击次数计算费用的广告而言,如果有黑灰产构造虚假流量,攻击广告主,则会很快消耗掉正常广告主的预算,使得广告内容被提前下架。在这种情况下,广告主的利益受到了损害,容易导致后续的投诉与纠纷。
为了应对上述作弊场景,我们需要快速辨识出恶意流量,采取针对性措施(例如限制恶意用户、向广告主发送告警等)来保护用户权益。同时考虑到可能有意外因素(例如达人推荐、热点事件引流)导致流量骤变,我们也需要动态调整用于识别恶意流量的规则,避免损害正常用户的利益。
本文为您演示如何使用Flink动态CEP解决上述问题。我们假设客户的行为日志会被存放入消息队列Kafka中,Flink CEP作业会消费Kafka数据,同时会去轮询RDS数据库中的规则表,拉取策略人员添加到数据库的最新规则,并用最新规则去匹配事件。针对匹配到的事件,Flink CEP作业会发出告警或将相关信息写入其他数据存储中。示例中整体数据链路如下图所示。
实际演示中,我们会先启动Flink CEP作业,然后插入规则1:连续3条action为0的事件发生后,下一条事件的action仍非1,其业务含义为连续3次访问该产品后最后没有购买。在匹配到相应事件并进行处理后,我们会动态更新规则1内容为连续5条action为0或2的事件发生后,下一条事件的action仍非1,来应对流量整体增加的场景,同时插入一条规则2,它将和规则1的初始规则一样,用于辅助展示多规则支持等功能。当然,您也可以添加一个全新规则。
前提条件
-
如果您使用RAM用户或RAM角色等身份访问,需要确认已具有Flink控制台相关权限,详情请参见权限管理。
-
已创建Flink工作空间,详情请参见开通实时计算Flink版。
-
上下游存储
-
已创建RDS MySQL实例,详情请参见创建RDS MySQL实例。
-
已创建消息队列Kafka实例,详情请参见概述。
-
-
仅实时计算引擎VVR 6.0.2及以上版本支持动态CEP功能。
操作流程
本文为您介绍如何编写Flink CEP作业检测行为日志中的异常事件序列去发现恶意流量,并演示如何进行规则的动态更新。具体的操作流程如下:
步骤一:准备测试数据
准备上游Kafka Topic
-
创建一个名称为demo_topic的Topic,存放模拟的用户行为日志。
操作详情请参见步骤一:创建Topic。
准备RDS数据库
在DMS数据管理控制台上,准备RDS MySQL的测试数据。
-
使用高权限账号登录RDS MySQL。
详情请参见通过DMS登录RDS MySQL。
-
创建rds_demo规则表,用来记录Flink CEP作业中需要应用的规则。
在已登录的SQLConsole窗口,输入如下命令后,单击执行。
CREATE DATABASE cep_demo_db; USE cep_demo_db; CREATE TABLE rds_demo ( `id` VARCHAR(64), `version` INT, `pattern` VARCHAR(4096), `function` VARCHAR(512) );
每行代表一条规则,包含id、version等用于区分不同规则与每个规则不同版本的字段、描述CEP API中的模式对象的pattern字段,以及描述如何处理匹配模式的事件序列的function字段。
步骤二:配置IP白名单
为了让Flink能访问RDS MySQL实例,您需要将Flink全托管工作空间的网段添加到在RDS MySQL的白名单中。
-
获取Flink全托管工作空间的VPC网段。
-
登录实时计算控制台。
-
在目标工作空间右侧操作列,选择更多 > 工作空间详情。
-
在工作空间详情对话框,查看Flink全托管虚拟交换机的网段信息。
-
-
在RDS MySQL的IP白名单中,添加Flink全托管网段信息。
<