栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Flink

Flink

    声明: 1. 本文为我的个人复习总结, 并非那种从零基础开始普及知识 内容详细全面, 言辞官方的文章
              2. 由于是个人总结, 所以用最精简的话语来写文章
              3. 若有错误不当之处, 请指出

介绍:

用一个模式去匹配数据流里的事件, 类似于正则表达式

模式是处理事件的规则

Pattern API:

API示例 & select & flatSelect:

Pattern patternStart = Pattern.begin("start");
Pattern wherePattern = patternStart.where((event)->return event.getName.startWith("foo"))
PatternStream patternStream = CEP.pattern(dataDs, wherePattern)

// 根据个体模式的名称 选择得到想要的事件并进行处理
patternStream.select(new PatternSelectFunction{
    @Override
    public ComplexEvent select(Map map) throws Exception {
        // Map>  即"patternName" -> List集合, 对于个体模式的单例模式, 其实List里只有一个元素
        return xxx;
    }
})

    
// 增强:  可以将超出within时间范围(不管是否能匹配得上)的 超时数据 放到侧输出流
patternStream.select(null,
        // 处理超时数据, 返回值数据会被丢进侧输出流
        new PatternTimeoutFunction( ) {
            @Override
            public ComplexEvent timeout(Map> map, long ts) throws Exception {
                return null;
            }
        },
        // 处理正常数据
        new PatternSelectFunction( ) {
            @Override
            public ComplexEvent select(Map> pattern) throws Exception {
                return null;
            }
        }
)
    
// 对于flatSelect,  功能增强: 以out.collect的方式输出任意多个元素
个体模式:

对一种事件直接就可以进行匹配

分为单例模式和循环模式: 单例模式只能接收一个事件, 循环模式可以接收多个事件

量词: 指定循环次数

    .times(4)

    匹配出现4次

    .times(4).optional

    匹配出现0次或4次

    .times(2,4)

    匹配出现2-4次

    .times(2,4).greedy

    匹配出现2-4次, 并且贪心地尽可能多的进行匹配

    .oneorMore

    匹配出现至少一次, 要带上终止条件until( )

    .timesOrMore(2).optional.greedy

    匹配出现0次, 2次, 或多次, 并且贪心地尽可能多的进行匹配, 要带上终止条件until( )

简单条件: 通过.where( )进行筛选

patternStart.where((event)->return event.getName.startWith("foo"))

组合条件: 对简单条件进行or或者where组合, 其中继续.where实质上就是and操作

patternStart.where((event)->return event.getName.startWith("foo")).or((event)->return event.getName.startWith("stupid"))

终止条件: 对于xxxMore的循环次数指定, 要带上终止条件until( )

迭代条件: 能对之前接收的事件进行处理

ctx.getEventsForPattern("name").where(( )->{ 逻辑处理 })
模式序列(组合模式):

将很多个体模式组合起来

必须以"start"模式开头 .begin(“start”)

**严格近邻: ** 所有事件按严格的顺序出现, 中间不能穿插其他数据; 例如 a next b, 则b必须得紧跟在a后面才能匹配得上

​ .next(“otherPattern”), 参数为别的个体模式

宽松紧邻: 允许中间穿插其他数据; 例如 a followedBy b, b只要在a的后面就可以, 不必非得紧跟其后

​ .followedBy(“otherPattern”)

非确定性宽松近邻: 进一步放宽条件, 之前已经匹配过的事件可以被再次使用;

​ 例如 a followedByAny b, 事件序列[a,c,b1,b2] 可以匹配成{a,b1},{a,b2}

​ .followedByAny(“otherPattern”)

其他关系:

    .notNext(“otherPattern”)

    .notFollowedBy(“otherPattern”)

注意:

.notFollowedBy不能用在结尾, 不然将永无终止

可以为模式指定时间约束, 在规定时间内才能有机会进行匹配;

.within(Time.seconds(10))

within并不管keyBy的分组, 它只认时间 不认其是否为同一个key的时间; 模式序列里的next等条件倒是认key模式序列里的next等条件是到了within时间结束后才进行计算可以看作是窗口大小为within时间段长度的窗口, 不同的是它会自动按时间戳排序后再进行计算

notXXX类型的模式不能被optional(可能出现)修饰

模式组:

一般不用, 是个套娃, 将一个模式序列作为一个条件 放在个体模式里

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号