Apache Flink - 库

在本章中,我们将了解 Apache Flink 的不同库。

复杂事件处理 (CEP)

FlinkCEP 是 Apache Flink 中的一个 API,用于分析连续流数据的事件模式。 这些事件接近实时,具有高吞吐量和低延迟。 该 API 主要用于传感器数据,这些数据是实时的,处理起来非常复杂。

CEP 分析输入流的模式并很快给出结果。 它能够在事件模式复杂的情况下提供实时通知和警报。 FlinkCEP 可以连接到不同类型的输入源并分析其中的模式。

这就是带有 CEP 的示例架构的样子 −

具有 CEP 的架构

传感器数据将从不同来源传入,Kafka 将充当分布式消息传递框架,它将数据流分发到 Apache Flink,FlinkCEP 将分析复杂的事件模式。

您可以使用 Pattern API 在 Apache Flink 中编写程序来进行复杂的事件处理。 它允许您决定从连续流数据中检测的事件模式。 以下是一些最常用的 CEP 模式 −

start

用于定义起始状态。 下面的程序展示了它在Flink程序中是如何定义的 −

Pattern<Event, ?> next = start.next("next");

Where

用于定义当前状态下的过滤条件。

patternState.where(new FilterFunction <Event>() {  
   @Override 
      public boolean filter(Event value) throws Exception { 
   } 
});

Next

它用于附加新的模式状态以及传递先前模式所需的匹配事件。

Pattern<Event, ?> next = start.next("next");

FollowedBy

它用于附加新的模式状态,但这里其他事件可以在两个匹配事件之间发生。

Pattern<Event, ?> followedBy = start.followedBy("next");

Gelly

Apache Flink 的图形 API 是 Gelly。 Gelly 用于使用一组方法和实用程序对 Flink 应用程序执行图形分析。 您可以通过 Gelly 以分布式方式使用 Apache Flink API 来分析巨大的图表。 还有其他图形库(例如 Apache Giraph)用于相同目的,但由于 Gelly 是在 Apache Flink 之上使用的,因此它使用单一 API。 从开发和运营的角度来看,这非常有帮助。

让我们使用 Apache Flink API 运行一个示例 − Gelly.

首先,您需要将 Apache Flink 的 opt 目录中的 2 个 Gelly jar 文件复制到其 lib 目录中。 然后运行 flink-gelly-examples jar。

cp opt/flink-gelly* lib/ 
./bin/flink run examples/gelly/flink-gelly-examples_*.jar 
Gelly

现在让我们运行 PageRank 示例。

PageRank 计算每个顶点的分数,它是通过内边传输的 PageRank 分数的总和。 每个顶点的分数在出边之间平均分配。 高分顶点与其他高分顶点链接。

结果包含顶点 ID 和 PageRank score。

usage: flink run examples/flink-gelly-examples_<version>.jar --algorithm PageRank [algorithm options] --input <input> [input options] --output <output> [output options] 

./bin/flink run examples/gelly/flink-gelly-examples_*.jar --algorithm PageRank --input CycleGraph --vertex_count 2 --output Print 
PageRank score