上图是flink的工作流程
首先,flink从source中获取数据,source是流入flink数据的来源,日常对接的source端有kafka,rabbitMQ等消息队列
然后,获取到的数据流(dataStream) 按需来进行代码运算
最后,将上一步运算的结果数据sink到落地的模块中,模块可以是数据库,也可以是服务(用户预警报警模板)。
1、为何选择flink?
flink是流处理模式,数据会以流stream的形式在flink中存在并处理,source来源可以选择flume+kafka,这样,数据来源到了flink,就会流动起来处理,从而不需要考虑数据的储存(中间数据放到collection)以及取用逻辑(分页取数或者范围取数),实时性也比较高。
2、我手上的项目是监听oracle数据库,所以同步软件选取的ogg(oracle goldgate),源端配置extract,pump进程,pump进程将log数据pump到目标端,目标端配置replicat进程,将落地的log数据发送到Kafka,设计的原则是每张表一个topic。
3、flink 集群搭建在目标端网段,fink指标计算引擎设计方案设计原则是将指标计算类和source、process等配置到property文件,通过程序启动将相关的类加载到flink对应的组件中。
4、实时计算过程中遇到的问题就是问题定位,这里和其他项目一样也要依靠日志文件,这里可以解决大部分报错问题。其次,指标计算不准确问题大致原因有:
4.1、条件筛选不严格导致消费了不相关的日志数据
4.2、一些共享数据(我是存在redis里的)可能多个指标使用,导致并发问题。
4.3、指标计算逻辑错误