从零构建FLINK整合Drools动态规则实时运营系统(项目案例)-第4篇(日志准备篇)

Flink实战之实时风控规则引擎 阅读详情

前言

项目介绍在线视频: https://www.bilibili.com/video/BV1zv41157yY

本案例是一个专注于flink动态规则计算的项目,核心技术组件涉及flink、hbase、clickhouse、drools等
项目可根据各类个性化需求进行二次开发后,直接用于实时运营,实时风控、交通监控等场景的线上生产
项目完整视频教程和资料代码等,可在易学在线 https://v.51doit.cn 获取
技术交流,可加微信: haitao-duan
在这里插入图片描述

兵马未动,粮草先行

巧妇难为无米之炊,本运营系统的开发,离不开用户行为的数据记录;
各类网站、app等互联网产品上,用户的行为记录数据,往往称作“行为日志”,或曰“埋点日志”,亦或曰“流量日志”,亦或曰“点击流日志”,皆类同矣;

日志数据埋点介绍

埋点技术,通常在前端系统进行埋点

  • 如html页面,采用js埋点
  • app端则可以用android api代码埋点
  • 微信小程序,使用微信小程序的js api代码埋点

埋点代码,主要的技术手段是对界面元素进行函数绑定,当用户浏览,点击,滑动等动作发生时,绑定函数会被触发,从而获取到用户的行为信息,并通过HTTP发给后端的日志服务器进行收集存储(日志文件);

埋点技术,在业内通常又分为特定事件埋点,全埋点(或称无埋点)方案

  • 特定事件埋点,是针对特定按钮上的特定操作行为,进行专门函数的绑定,获取到的信息有针对性,比如捕获的用户行为是一个什么事件,拥有哪些业务属性等;

  • 全埋点(无埋点),则通常是对整个界面上的所有元素进行统一函数的绑定,这样一来,用户的所有行为都将被捕获,但是获得的数据相对来说没有那么具备针对性,往往是产生,用户操作的元素类型,元素id,元素标题等通用信息;

本项目侧重数据平台开发,因此,前端埋点技术具体内容不在此展开;

日志数据字段说明

本公司的埋点日志数据,整体结构为一个嵌套json串,如下所示:

{
	"account": "Vz54E9Ya",
	"appId": "cn.doitedu.app1",
	"appVersion": "3.4",
	"carrier": "中国移动",
	"deviceId": "WEISLD0235S0934OL",
	"deviceType": "MI-6",
    "ip": "24.93.136.175",
	"latitude": 42.09287620431088,
	"longitude": 79.42106825764643,
	"netType": "WIFI",
	"osName": "android",
	"osVersion": "6.5",
	"releaseChannel": "豌豆荚",
	"resolution": "1024*768",
	"sessionId": "SE18329583458",
	"timeStamp": 1594534406220
	"eventId": "productView",
	"properties": {
		"pageId": "646",
		"productId": "157",
		"refType": "4",
		"refUrl": "805",
		"title": "爱得堡 男靴中高帮马丁靴秋冬雪地靴 H1878 复古黄 40码",
		"url": "https://item.jd.com/36506691363.html",
		"utm_campain": "4",
		"utm_loctype": "1",
		"utm_source": "10"
	}	
}

其中主要有如下内容:

  • 用户终端属性(公共属性)
  • 事件类型(eventId)
  • 事件详情(properties,map结构)

行为明细数据入kafka

  • 用模拟器生成数据写入kafka
/**
 * @author 涛哥
 * @nick_name "deep as the sea"
 * @contact qq:657270652 wx:doit_edu
 * @site www.doitedu.cn
 * @date 2021-03-25
 * @desc 压测数据模拟器
 * {
 * "account":"157","appId":"cn.do",
 * "appVersion":"3.0","carrier":"中国移动",
 * "deviceId":"157","deviceType":"mi10",
 * "eventId":"thumbUp","ip":"152.33.68.90",
 * "latitude":56.29385792,"longitude":120.329857234,
 * "netType":"wifi","osName":"android","osVersion":"9.0",
 * "properties":{"productId":"10","pageId":"10"},
 * "releaseChannel":"小米应用",
 * "resolution":"1024*2048",
 * "sessionId":"sessionid157",
 * "timeStamp":1616142957968
 * }
 *
 */
public class GenLogData {
​
    public static void main(String[] args) throws InterruptedException {
​
        Properties props = new Properties();
        props.setProperty("bootstrap.servers", "hdp01:9092,hdp02:9092,hdp03:9092");
        props.put("acks", "all");// acks=0 配置适用于实现非常高的吞吐量 , acks=all 这是最安全的模式
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
​
        KafkaProducer<String, String> producer = new KafkaProducer<>(props);
​
        String[] events = {"pageView", "addCart", "collect", "thumbUp", "share", "search", "adShow", "adClick", "fetchCoupon", "useCoupon", "register"};
​
        for(int i=0;i<10;i++){
            new Thread(
                    new Runnable() {
                        @Override
                        public void run() {
                            while (true) {
                                LogBean bean = new LogBean();
                                // 决定人数,3个就可能有1000人
                                String account = StringUtils.leftPad(RandomStringUtils.randomNumeric(2),4,"0");
                                bean.setAccount(account);
​
                                String eventId = events[RandomUtils.nextInt(0, events.length)];
                                bean.setEventId(eventId);
                                bean.setTimeStamp(System.currentTimeMillis());
                                bean.setAppId("cn.do");
                                bean.setAppVersion("3.0");
                                bean.setCarrier("中国移动");
                                bean.setDeviceId(account);
                                bean.setDeviceType("mi10");
                                bean.setIp("152.33.68.90");
                                bean.setLatitude(56.29385792);
                                bean.setLongitude(120.329857234);
                                bean.setSessionId("sessionid" + account);
                                bean.setResolution("1024*2048");
                                bean.setReleaseChannel("小米应用");
                                bean.setNetType("wifi");
                                bean.setOsName("android");
                                bean.setOsVersion("9.0");
​
                                HashMap<String, String> properties = new HashMap<>();
                                // 页面数量可能达到10种
                                properties.put("pageId", RandomUtils.nextInt(1, 11) + "");
                                if (eventId.equals("addCart") || eventId.equals("collect") 
                                      || eventId.equals("share") || eventId.equals("thumbUp")) {
                                    properties.put("productId", RandomUtils.nextInt(1, 11) + "");
                                }
                                if (eventId.equals("fetchCoupon") || eventId.equals("useCoupon")) {
                                    properties.put("couponId", RandomUtils.nextInt(1, 11) + "");
                                }
                                if (eventId.equals("adShow") || eventId.equals("adClick")) {
                                    properties.put("adId", RandomUtils.nextInt(1, 11) + "");
                                }
​
                                if (eventId.equals("search")) {
                                    properties.put("keyword", RandomStringUtils.randomNumeric(1));
                                }
​
                                bean.setProperties(properties);
​
                                producer.send(new ProducerRecord<String, String>("app_log", JSON.toJSONString(bean)));
​
                                try {
                                    // 20ms相当于每秒2k条,相当于2w人同时在线
                                    // 当前配置情况下,完全hold住没有任何反压延迟
                                    // 内存占用约6G(原因,缓存没有清除机制,内存一直在增长)
                                    Thread.sleep(RandomUtils.nextInt(1000,4000));
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
​
                            }
                        }
                    }
            ).start();
        }
    }
}
AI驱动的金融风控建模:从可解释性到实时决策 金融风控建模正经历从传统评分卡向AI驱动范式的根本性演进。其核心原理在于融合可解释机器学习与专家规则,解决传统方法在非线性关系捕捉、动态适应性及多源异构数据融合上的局限。技术价值体现在将风险识别周期从月级压缩至小时级,同时满足监管对可追溯性、可审计性与业务可理解性的刚性要求。典型应用场景覆盖信贷审批、反欺诈、伪现金识别及另类资产压力测试等高敏领域。本文聚焦AI驱动的风险评估落地路径,深入解析动态风险画像构建、多模态数据融合机制与事件驱动式模型迭代等关键实践。 阅读详情

相关推荐

AI金融代理架构设计与关键技术解析

AI代理技术正逐步改变金融行业的决策模式,其核心在于构建端到端的智能系统架构。从技术原理来看,这类系统通常采用事件驱动架构处理实时数据流,结合异构计算资源(如GPU/TPU集群)运行不同类型的分析模型。在工程实现层面,需要解决数据管道实时性、推理引擎异构性和策略风控隔离性等关键技术挑战。金融AI代理的价值主要体现在提升交易执行效率(如降低34.4%的订单滑点)和增强风险管理能力(如构建动态贝叶斯网络)。典型应用场景包括智能订单执行系统、组合风险管理代理等,其中Kafka+Spark Streaming等技术

weixin_34331102的博客 391

从滴滴的Flink CEP引擎说起

CEP业务场景 复杂事件处理(Complex Event Process,简称CEP)用来检测无尽数据流中的复杂模 式,拥有从不同的数据行中辨识查找模式的能力。模式匹配是复杂事件处理的一个强 大援助。 例子包括受一系列事件驱动的各种业务流程,例如在安全应用中侦测异常行为;在金 融应用中查找价格、交易量和其他行为的模式。其他常见的用途如欺诈检测应用和传 感器数据的分析等。 说了这么多可能还是觉得比较抽象,那么我们可以看看这次滴滴分享的FlinkCEP在滴滴中的业务场景。 吐槽时刻: 虽

ludongguoa的博客 579

闲鱼智能客服架构解析:从意图识别到高可用设计的实战拆解

智能客服系统是现代电商与社区平台的核心基础设施,其本质是通过自然语言处理与智能决策技术,实现用户咨询的自动化响应与精准分流。从技术原理上看,系统通常基于多层架构设计,通过意图识别、实时特征计算和混合决策引擎,将用户请求路由至机器人、人工客服或自助工具。这种架构的技术价值在于显著降低人力成本、提升服务效率,并实现7x24小时不间断服务。在实际应用场景中,智能客服需要应对高并发流量、复杂多变的用户问题,以及不断演变的业务需求。本文以闲鱼智能客服系统为例,深入剖析其如何通过规则引擎与机器学习模型的结合,以及实时特

weixin_34006468的博客 335

基于状态机与规则引擎的复杂竞赛系统架构设计与实现

在构建处理多阶段、多角色、有状态流转的业务系统时,状态机是描述实体生命周期和状态转换的核心模型,它能将复杂的业务流转逻辑可视化、规范化。而规则引擎则将易变的业务决策逻辑从核心流程代码中解耦,实现动态配置与灵活调整,极大提升了系统的可维护性和扩展性。这种架构模式的技术价值在于,它能优雅地支撑高并发、高复杂度的业务场景,如电商大促活动、游戏赛季排位、内部创新竞赛等。本文以Spring Boot、Drools、Redis等技术栈为例,详细阐述了如何将状态机模型与规则引擎结合,设计并实现一个清晰、健壮、高性能的竞赛

weixin_30902251的博客 335

多源数据合并实战:业务语义对齐与可信宽表构建

数据合并是数据分析的基础能力,本质是将分散在不同系统中的业务事实按统一逻辑整合为可用宽表。其核心难点不在SQL连接或代码实现,而在于跨系统间‘用户’‘订单’等业务实体的语义一致性校准——如手机号是否真能唯一标识用户、时间戳是否已统一时区、主键是否具备全域唯一性。解决这些问题需结合字段血缘分析、主键熵值检测、时间窗口AB测试等工程化手段,最终支撑精准归因、实时BI与风控建模等关键场景。本文聚焦真实项目中高频出现的主键对齐、时间对齐与业务主键设计问题,提供可落地的检查清单与策略选型框架。

abc20899的专栏 173

AI驱动的SaaS开发栈四层重构:意图、策略、执行与契约

在AI深度融入软件工程的当下,传统SaaS开发栈正经历从单体耦合到意图驱动的范式跃迁。其核心在于将模糊需求转化为可计算的结构化意图,再经策略动态编排、执行确定性操作、契约强制约束,形成闭环治理能力。这一过程并非替代开发者,而是通过原子化分层(意图层、策略层、执行层、契约层)实现责任解耦与认知卸载,显著提升安全合规性、可观测性与迭代效率。尤其在跨境SaaS、医疗、金融等强监管场景中,该架构已验证其对GDPR、HIPAA、PCI-DSS等合规要求的内生支持能力,并天然适配LLM工具链(如LlamaIndex语义

tomfish 512

DaaS平台构建指南:从数据资产盘点到行业应用实践

数据即服务(DaaS)作为云计算时代的新型数据交付模式,正在改变企业获取和处理数据的方式。其核心原理是将数据存储、处理和分析能力封装成标准化服务,通过API或平台方式提供。这种模式的技术价值在于实现了数据所有权与使用权的分离,企业无需自建大数据平台即可获得实时、安全的数据服务能力。在金融风控、智能制造、零售营销等场景中,DaaS平台结合流式计算框架如Flink和Kafka,能够实现实时特征计算和智能决策。典型应用包括实时反欺诈系统、设备预测性维护等,某银行案例显示其盗刷识别率提升至96%。实施时需重点关注数

556

机器学习模型生产可观测性:从数据漂移到预测稳定性的实战监控体系

机器学习模型上线后,传统APM工具难以捕捉数据漂移、特征异常与预测不一致等核心问题。可观测性作为MLOps关键能力,聚焦数据层(分布偏移/质量退化)、模型层(预测稳定性/性能衰减)和系统层(特征延迟/SerDe开销)的协同诊断,通过轻量采样、分层信号与业务语义加权(如BSWDI),实现低侵入、高解释性的实时监控。它支撑灰度发布、影子模式与根因定位,广泛应用于推荐系统、风控模型与搜索排序等需持续演进的AI服务场景。

weixin_34185512的博客 524

智能库存管理系统架构设计:从数据驱动到自动化决策的实践指南

库存管理是企业运营的核心环节,其核心原理在于通过精准的数据分析来平衡供需,以最小化资金占用并最大化订单满足率。传统方法依赖人工经验,难以应对复杂多变的市场环境。随着大数据和机器学习技术的发展,数据驱动的智能决策成为可能,其技术价值在于将预测性分析与自动化执行相结合,实现降本增效。在应用场景上,智能库存系统通过构建感知、分析、决策与执行的闭环,广泛应用于零售、电商、物流及制造业的供应链优化。本文聚焦于如何利用**事件驱动架构**和**微服务**设计,搭建一个能够自动感知需求、动态计算安全库存并优化补货策略的智

weixin_30527423的博客 438

【flink】Flink-Cep实现规则动态更新

1.概述 我们是用processfunction实现的cep动态更新,然后看到这个是原生api感觉有趣,研究一下 原文:https://mp.weixin.qq.com/s/mh–wQvAWQq2tDPKq0-m8Q 规则引擎通常对我们的理解就是用来做模式匹配的,在数据流里面检测满足规则要求的数据。有人会问为什么需要规则动态变更呢?直接修改了规则把服务重启一下不就可以了吗,这个当然是不行的,规则引擎里面通常会维护很多不同的规则,例如在监控告警的场景下,如果每个人修改一下自己的监控阈值,就重启一下服务,必然会

九师兄 3200

Flink与Drools协同构建规则模型实现大数据处理

通过整合这两个强大的工具,我们可以快速定义、发布和管理规则,并将其应用于大规模数据集和实时数据流中。本文将介绍如何使用Flink和Drools联合构建规则模型来处理大数据,并提供相应的源代码。Drools是一个基于规则的业务规则管理系统,可以用于定义和管理业务规则。它提供了强大的规则引擎和商业规则管理的功能,可以帮助企业快速实现规则的定义、发布和管理。要将Flink与Drools整合到一起,我们需要使用Flink的规则引擎库flink-cep和Drools的Java API。三、Drools简介。

DevEnigma的博客 1314

机器学习生产化:fallback设计、漂移检测与系统韧性实战指南

机器学习模型上线仅是起点,真正挑战在于模型如何在真实业务环境中持续可靠运行。从数据输入校验、特征缺失应对,到概念漂移与协变量漂移的实时识别,再到多级fallback机制与弹性降级策略,生产级ML系统必须兼顾数学正确性与工程鲁棒性。本文聚焦金融等强监管场景,深入解析特征延迟、输入污染、负载突增、配置漂移四类高频故障的防御体系,并强调‘监控即代码’‘验证即准入’‘治理即存证’等关键实践。核心不止于模型精度,更在于系统能否在数据变老、依赖失效、流量激增时,依然输出可解释、可干预、可审计的决策——这正是fallba

abxlep7702的博客 330

【信息科学与工程学】【云计算】计算机科学与自动化——第十五篇 云计算10 云计算领域架构

​:作为前端请求的统一入口,负载均衡器基于预设算法(如轮询、最小连接数)动态分配流量至后端服务器集群。​:通过IP哈希或Cookie绑定,保障同一用户请求由同一服务器处理(如电商购物车场景)。​:Nginx(HTTP/HTTPS反向代理)、HAProxy(TCP层负载均衡)。​:实时监控服务器状态(如响应时间、连接数),自动剔除故障节点,确保服务连续性。​:本地资源满载时,将流量分流至公有云(如AWS + 私有云混合架构)。​:LSTM预测流量峰值,强化学习动态调整权重(如阿里云智能负载均衡)。

weixin_49199313的博客 1856

AI Agent架构在可穿戴健康监测中的应用:从反应式到主动式智能体

在移动健康与物联网领域,实时数据处理和智能决策是核心技术挑战。其原理在于通过流式计算框架处理时序数据,并结合规则引擎与机器学习模型进行分析。这种技术架构的价值在于能够将海量传感器数据转化为可行动的洞察,实现从被动告警到主动健康管理的范式转变。应用场景广泛覆盖慢性病监测、术后康复、运动科学及日常健康量化。本文聚焦于可穿戴健康数据,深入探讨如何利用工具增强型智能体(Tool-Augmented Agent)框架,构建同时支持实时异常检测(反应式)和长期趋势预测(主动式)的智能健康管家系统,其中AI Agent和

weixin_30267785的博客 399

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 12 公有云里的“多Region + 多AZ“ 02 运营算法01

算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)云厂商提高闲置资源利用率。算法复杂度为O(N),N为实例数量。

weixin_49199313的博客 279

跨境电商ERP开发之Shopee开发者账号申请

引言:由于电子信息技术和经济全球化的进一步发展,电子商务在国际贸易中的影响力和关键作用日渐突显,已变成中国出口贸易的市场趋势。跨境电商未来的发展前景必定是有助于减少经济成本、推动全球贸易便利化,有助于提高国内群众福祉,有助于打造良好的营商环境,从而推动经济长期健康发展。 gitee仓库地址: https://gitee.com/naturalwish/SSERP/tree/master 以下授权教学同ShopeeOpen Platform - Developer Guide 申请流程 ..

naturalwish的专栏 3636

Mythos推理引擎:长程因果与隐含前提的可验证AI范式

大语言模型的推理能力正从通用生成转向结构化、可验证的专项范式。长程因果推理和隐含前提识别作为高价值推理任务,其核心挑战在于逻辑保真度低、中间过程不可审计、跨源证据难对齐。Mythos代表了一种新型AI交付模式——通过约束性强化学习与符号化引导,在因果链建模、多跳前提抽取、跨文档逻辑缝合三方面实现质变,并以Schema预处理、推理模式锁定、水印化输出构建可验证信任链。该范式已在金融风控等强合规场景落地,显著降低误报率并提升决策可解释性,标志着AI服务正从‘模型即服务’迈向‘推理即契约’。

weixin_34253126的博客 330

zemax混合式非序列模拟

注意不要点击左侧的非序列模式,那个时纯粹的非序列,会清除序列模式的数据。第2、4、6透镜材质为空气,是为了让光线进入到多重透镜内部。这时普通的优化方式会失败。平行光束经过多焦透镜时,会汇聚在不同焦距处。所以还需要控制能量的大小,进行优化。接下来用非序列模式设计一个多焦透镜。像面的孔径为圆形通光孔:0-1.2。透镜不同位置处有不同的聚焦位置。透镜的z轴位置相同,重合。

fendoudecheng的博客 3064

ML模型生产部署:从Notebook到高可用推理服务的工程实践

机器学习模型部署不是代码迁移,而是面向真实业务场景的系统工程。它涉及计算环境适配、数据契约统一、运维语义对齐三大核心挑战,本质是将实验性模型转化为可监控、可扩缩、可回滚的生产级服务。关键技术包括ONNX模型序列化保障跨框架兼容性、特征服务化解耦实时计算瓶颈、防御式输入处理提升推理稳定性,以及基于Kubernetes与可观测性栈(Prometheus+Grafana+OpenTelemetry)构建的MLOps闭环。本文聚焦ML部署、生产就绪两大热词,覆盖模型服务化、推理稳定性、可观测性等落地关键环节,为算法

weixin_30730053的博客 325

VN5620以太网测试——环境搭建篇

CANoe(CAN open environment)VN5620 :是一个紧凑而强大的接口,用于以太网网络的分析、仿真、测试和验证。VN5620 接口支持各种可能的应用。它适用于与其他总线系统、网络参与(例如在模拟和生成帧、测试中的负载和错误)的同步以太网监控。在2021年Vector公司的以太网接口卡VN5610和VN5640设备已经陆续停产,相应被VN5620和VN5650代替。

诊断协议那些事儿's blog 8926

【OD统一考试(B卷)】比赛的冠亚季军,Python 解答

比赛的规则是 0 号和 1 号比赛,2 号和 3 号比赛,以此类推,每一轮,相邻的运动员进行比赛,获胜的进入下一轮,实力值大的获胜,实力值相等的情况,id 小的情况下获胜,轮空的直接进入下一轮。第一轮比赛,id 为 0 实力值为 2 的运动员和 id 为 1 实力值为 3 的运动员比赛, 1 号胜出进入下一轮争夺冠亚军,id 为 2 的运动员和 id 为 3 的运动员比赛,3 号胜出进入下一轮争夺冠亚军;2 号与 0 号,比赛进行季军的争夺,2 号实力值为 4,0 号实力值 2,故 2 号胜出,得季军。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+
上一篇: 从零构建FLINK整合Drools动态规则实时运营系统(项目案例)第1篇(项目介绍篇)
下一篇: 从零构建FLINK整合Drools动态规则实时运营系统(项目案例)-第3篇(需求示例篇)
江湖人称涛哥
博客等级 码龄14年 538粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值