201. pattern.oneOrMore()用于指定循环模式,比如上述b+,而pattern.times()可指定特定事件的出现次数,还可以指定最小和最大出现次数。pattern.greedy()使循环模式变得贪婪,即循环尽可能多次。pattern.optional()用于创建所有模式。pattern.timesOrMore(2)表示2次或者更多次
202. pattern的单模式api还有or、until等
203. 结合模式有严格连续性、轻松连续性、非确定性轻松连续性。具体算子有next、followedBy、followedByAny,以及notNext、notFollowedBy(无法结束)
204. pattern.within可定义模式在特定时间,如10秒内发生。注意,模式序列只能有一个时间约束
205. 严格连续用consecutive(),非确定性宽松连续用allowCombinations(),而默认的轻松连续用一般的oneOrMore()和times()等循环模式
206. continuous()是严格连续,通常与oneOrMore以及times一起使用
207. 要控制分配事件的匹配数,可以指定跳过策略(AfterMatchSkipStrategy),具体有no_skip、skip_past_last_event、skip_to_first、skip_to_last
208. 模式序列运行事件流是PatternStream,它通过CEP.pattern创建,参数是输入流、模式、比较器。比较器用于对具有相同时间戳的事件进行排序。
209. PatternStream可通过select或flatSelect进行选择。前者需要实现PatternSelectFunction接口。后者需要实现PatternFlatSelectFunction接口。
210. 为了处理超时部分模式,提供了PatternTimeoutFunction和PatternFlatTimeoutFunction
211. sideOutputLateData方法用于处理迟到的数据
212. flink dataset可通过env.fromElements创建,然后就能执行flatMap、groupBy、sum等算子。具体还有mapPartition、map、filter、reduce、reduceGroup、aggregate、and、andMin、distinct、join、where、equalTo、leftOuterJoin、coGroup、with、cross、union、reblance、partitionByHash、partitionByRange、partitionCustom、sortPartition、first、project、minBy、maxBy等
213. env基于文件的创建方式有:readTextFile、readTextFileWithValue、readCsvFile、readFileOfPrimitives、readSequenceFile
214. env基于集合的创建方式有:fromCollection、fromElements、fromParallelCollection、generateSequence
215. 通用的创建方式有: readFile、createInput
216. flink dataset的输出方式有: writeAsText、writeAsFormattedText、writeAsCsv、print、write、output等
217. flink有两种类型的迭代:BulkIteration和DeltaIteration。前者是批量迭代,通过DataSet的iterate方法得到IterativeDataSet,使用closeWith来终止迭代。后者利用某些算法在每次迭代中不会更改解决方案的每个数据点,维护状态并增量更新。使用iterateDelta创建DeltaIteration对象,以及用getWorkset和getSolutionSet创建工作集和解决方案集。
218. kmeans算法会用到BulkIteration来聚类未标记的点
219. 语义注释允许系统推断在多个算子操作中重用排序顺序或分区,可以加速执行,可用于提供函数行为的flink提示。它能使程序免于不必要的数据混洗或排序,提高了程序性能。宁愿没有,也不要提供错误的语义注释。
220. 目前的语义注释有:转发字段注释、非转发字段、阅读字段。转发可以通过函数类注释或算子参数来声明,比如@ForwardedFields、@ForwardedFieldsFirst、@ForwardedFieldsSecond,以及withFor