flink实时规则营销系统(39期,2023版)——简单来说,本系统核心是一个基于事件驱动且可进行动态规则计算的实时系统,在技术上它是通用的;本套架构及系统内核,不仅可以用于“实时运营”,也可以用于“实时风控”,“实时推荐”,“实时交通监控”等场景。运营场景举例:下单促付款,新品发布信息精准送达。 本系统,在核心规则引擎之外,也集成了大量metric及跟踪数据输出,能在系统中及系统外进行多维度数据分析,以深度掌握各类市场运营活动的效果,以及系统运行的各类状态 什么是flink? flink是一个分布式,高性能,随时可用的以及准确的流处理计算框架,flink可以对无界数据(流处理)和有界数据(批处理)进行有状态计算(flink天生支持状态计算)的分布式,高性能的计算框架。 flink的基石 flink的四大基石:checkpoint,state,time,window checkpoint:基于chandy-lamport算法实现分布式计算任务的一致性语义; state:flink中的状态机制,flink天生支持state,state可以认为程序的中间计算结果或者是历史计算结果; time:flink中支持基于事件时间和处理时间进行计算,spark streaming只能按照process time进行处理; 基于事件时间的计算我们可以解决数据迟到和乱序等问题。 window:flink提供了更多丰富的window,基于时间,基于数量,session window,同样支持滚动和滑动窗口的计算。 Flink的应用 Flink 是一个大数据流处理引擎,它可以为不同的行业提供大数据实时处理的解决方案。随着 Flink 的快速发展完善,如今在世界范围许多公司都可以见到 Flink 的身影。 目前在全球范围内,北美、欧洲和金砖国家均是 Flink 的应用热门区域。当然,这些地区其实也就是 IT、互联网行业较发达的地区。 Flink 在国内热度尤其高,一方面是因为阿里的贡献和带头效应,另一方面也跟中国的应用场景密切相关。中国的人口规模与互联网使用普及程度,决定了对大数据处理的速度要求越来越高,也迫使中国的互联网企业去追逐更高的数据处理效率。试想在中国,一个网站可能要面对数亿的日活用户、每秒数亿次的计算峰值,这对很多国外的公司来说是无法想象的。而Flink 恰好给我们高速准确的处理海量流式数据提供了可能。 Flink环境部署: 要了解一个系统,一般都是从架构开始。我们关心的问题是:系统部署成功后各个节点都启动了哪些服务,各个服务之间又是怎么交互和协调的。 当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。 Client为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming的任务),也可以不结束并等待结果返回。 JobManager主要负责调度 Job 并协调 Task 做 checkpoint,职责上很像 Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。 TaskManager在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自己的上游建立 Netty 连接,接收数据并处理。 本地模式环境部署步骤如下: # 1. 下载安装包并上传到/usr/local/src 目录 # 2. 解压安装包并重命名为flink [root@node src]$ tar -zxf flink-1.14.4-bin-scala_2.12.tgz [root@node src]$ tar -zxf jdk-8u111-linux-x64.tar.gz # 3. 修改安装包所属用户和用户组权限 [root@node src]$ chown -R root.root flink-1.14.5 # 4. 配置Flink环境变量并重新加载使其生效 [root@node src]$ vim ~/.bash_profile export JAVA_HOME=/usr/local/src/jdk1.8.0_111/ export FLINK_HOME=/usr/local/src/flink-1.14.5/ export PATH=$PATH:$JAVA_HOME/bin:$FLINK_HOME/bin [root@node src]$ source ~/.bash_profile # 4. 启动"集群" [root@node src]$ start-cluster.sh Starting cluster. Starting standalonesession daemon on host node. Starting taskexecutor daemon on host node. [root@node src]$ jps 17186 Jps 17078 TaskManagerRunner 16809 StandaloneSessionClusterEntrypoint # 5. 访问WebUI界面8081端口查看运行情况 分发Flink安装包配置到另外两个节点 使用Linux scp命令把node01节点的配置分发到另外两个节点上。 # 使用 scp 分发 [root@node01 conf]$ cd /usr/local [root@node01 local]$ scp -r flink node02:/usr/local/ [root@node01 local]$ scp -r flink node03:/usr/local/ 启动Flink集群 # 批量统一启动 [root@node01 bin]$ start-cluster.sh Starting cluster. Starting standalonesession daemon on host node01. Starting taskexecutor daemon on host node01. Starting taskexecutor daemon on host node02. Starting taskexecutor daemon on host node03. # 单独启动 [root@node01 bin]$ jobmanager.sh start / stop [root@node01 bin]$ taskmanager.sh start / stop # 使用脚本查看服务进程 [root@node01 bin]$ jps