龙空技术网

使用Apache Flink通过轮询数据源处理

爱码农 694

前言:

而今你们对“apache轮询怎样连接”都比较关切,小伙伴们都想要学习一些“apache轮询怎样连接”的相关资讯。那么小编也在网摘上搜集了一些对于“apache轮询怎样连接””的相关内容,希望你们能喜欢,各位老铁们一起来了解一下吧!

在通过轮询数据源处理涉及批处理ETL的多个项目之后,我开始研究Streaming ETL。对于需要实时或近实时分析的用例,必须进行流计算。例如,在IT Operations Analytics中,至关重要的是Ops可以实时或在可接受的延迟范围内(接近实时)获取关键警报信息,以帮助他们减少停机时间或由于配置错误而引起的任何错误。

尽管有很多关于Flink的介绍性文章,但对于流式ETL的详细信息以及Flink框架的高级方面却 很少,这些文章在生产环境中很有用。

为什么选择Flink?

我一直在通过“DIY”或自己动手的口头禅和个人并不建议,对于这种使用情况。一个成熟且不断发展的流计算框架比自己编写和维护一个框架要好得多。

作为开发人员,我希望有某种自由度可以为框架提供可以轻松捆绑的复杂分析逻辑,而不必处理陡峭的学习曲线和框架本身的局限性。

与Spark相比,Flink轻巧,易于开发人员上手,并为我提供了正确的API。

如果您认为“ Apache Flink”和“流式编程”之间没有很强的联系,那么您最近可能就没有关注新闻。Apache Flink席卷了大数据领域。现在是使此类工具蓬勃发展的绝佳机会:流处理在数据处理中变得越来越普遍,并且Apache Flink提出了许多重要的创新。

在本文中,我将展示如何开始使用Apache Flink编写流处理算法。我们将阅读Wikipedia的编辑流,并了解如何从中获取一些有意义的数据。在此过程中,您将看到如何读写流数据,如何执行简单的操作以及如何实现更复杂的算法。

入门

我相信,如果您不熟悉Apache Flink,最好先学习批处理,因为它更简单,并且为您学习流处理奠定了坚实的基础。我写了一篇介绍性博客文章,介绍如何使用Apache Flink 进行批处理,因此建议您先阅读。

如果您已经知道如何在Apache Flink中使用批处理,那么流处理并不会给您带来很多惊喜。和以前一样,我们将研究应用程序中的三个不同阶段:从源中读取数据,处理数据以及将数据写入外部系统。

与批处理相比,几乎没有显着差异。首先,在批处理中,所有数据都是预先可用的。即使进程正在运行,我们也不会处理新数据。

但是,在流处理方面有所不同。我们在生成数据时读取数据,而我们需要处理的数据流可能是无限的。使用这种方法,我们几乎可以实时处理传入的数据。

在流模式下,Flink将从不同的系统读取数据并将数据写入其中,包括Apache Kafka,Rabbit MQ ...基本上是产生并消耗恒定数据流的系统。注意,我们也可以从HDFS或S3中读取数据。在这种情况下,Apache Flink将不断监视文件夹并在文件到达时对其进行处理。

流式Windows

请注意,到目前为止,我们已经讨论了所有在流中的各个元素上起作用的方法。我们不太可能提出可以使用这些简单运算符实现的许多有趣的流算法。仅使用它们,将不可能实现以下用例:

计算每分钟执行的编辑次数。计算每个用户每十分钟执行了多少次编辑。

显然,要回答这些问题,我们需要处理元素组。这就是流窗口的用途。

简而言之,流窗口允许我们将流中的元素分组并在每个组上执行用户定义的函数。这个用户定义的函数可以返回零个,一个或多个元素,并以此方式创建一个新的流,我们可以在单独的系统中处理或存储该流。

我们如何对流中的元素进行分组?Flink提供了几种方法来执行此操作:

滚动窗口:在流中创建不重叠的相邻窗口。我们既可以按时间将元素分组(例如,从10:00到10:05的所有元素归为一组),也可以按计数(将前50个元素归为单独的组)。例如,我们可以用它来回答诸如“以不重叠的五分钟间隔计数流中的元素数量”之类的问题。滑动窗口:类似于翻滚窗口,但此处的窗口可以重叠。如果需要在最近五分钟内计算指标,则可以使用它,但是我们希望每分钟显示一次输出。会话窗口:在这种情况下,Flink将发生在彼此附近的事件分组。全局窗口:在这种情况下,Flink将所有元素放在一个窗口中。这仅在定义定义窗口完成时间的自定义触发器时才有用。

除了选择如何将元素分配给不同的窗口外,我们还需要选择流类型。Flink有两种窗口类型:

密钥流:使用此流类型,Flink将通过一个键(例如,进行编辑的用户的名称)将单个流划分为多个独立的流。当我们在键控流中处理窗口时,我们定义的函数只能访问具有相同键的项。但是使用多个独立的流可以使Flink并行化工作。非键流:在这种情况下,流中的所有元素将一起处理,并且我们的用户定义函数将有权访问流中的所有元素。这种流类型的缺点是它不提供并行性,并且集群中只有一台机器能够执行我们的代码。

标签: #apache轮询怎样连接