使用Apache Flink和MinIO进行流处理
机器学习,深度学习,人工智能和物联网等现代技术趋势推动了对可靠,可扩展的存储平台的需求,该平台的功能足以满足这些应用程序生成的海量数据流的需求。
在本文中,我们将介绍Apache Flink(Apache Flink)的介绍,Apache Flink是当今最流行的流处理引擎之一,并试图了解它的价值,使其在全球范围内被Enterprise广泛采用。稍后,我们还将探讨Minio如何与Flink一起为各种用例建立私有云数据管道。
什么是流处理?
流处理可以分析连续的数据流。在这种方法中,数据被视为连续流,处理引擎可以在几毫秒到几分钟的短时间内摄取,分析并返回响应。
响应时间通常基于用例和响应时间的关键程度。例如,您希望与来自用户网站访问的数据相比,可以在更短的时间内处理来自核反应堆的IoT传感器数据。
与批处理分析相比,在几种情况下,流分析方法更适合数据分析:
利用现代技术(IoT,事务日志,应用程序日志,活动日志,访问日志)生成连续的数据流,以类似的连续方式处理数据是自然的方法。
批处理将占用更大的数据块,并立即对其进行处理,而流处理将在输入数据时对其进行处理,从而随着时间的流逝扩展了处理过程。与批处理相比,这允许使用更少的计算资源进行流处理工作。
有时数据太庞大,存储所有数据在经济上并不明智。流处理使您可以处理大型的消防软管样式数据,并且仅保留有用的位。
流式传输可以检测模式,检查结果,还可以轻松地同时查看来自多个流的数据。这意味着您可以在较短的时间内获得近似结果。相反,使用批处理,您需要处理多个批并汇总这些批中的结果以获得更好的结果,但是需要更长的时间。
流处理用例
正如我们所讨论的,在处理数据时快速(有时是近似)答案最适合的情况下,流处理是有益的。现在让我们看一下流处理方法在现实世界中的常见应用:
异常检测:流分析可以应用于连续的数据流,并几乎实时地检测异常。例如,在金融交易数据流中,欺诈性交易可被视为异常-流处理可以检测到这些异常,从而保护银行和客户免受财务损失。
业务流程监视:业务流程涉及特定域中的多个事件,例如,在电子商务业务中,所有开始的事件CHECK_OUT_FROM_CART都ITEM_RECEIVED_BY_CUSTOMER可以被视为一个业务流程,这在其中是至关重要的。流处理可用于监视此类过程中的异常情况,例如未在一定时间内完成,交付伙伴处理不当的物品等。
基于规则的警报:流处理可用于基于某些规则触发警报。这意味着只要满足特定条件,便可以将警报发送到其他目标。
在Apache Flink网站上了解有关流处理用例的更多信息。
Apache Flink
Apache Flink是一个分布式处理引擎,用于对数据流进行有状态的计算。Flink擅长处理无边界和有边界的数据集。
Flink被设计为可在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
虽然众所周知Apache Spark提供流处理支持作为其功能之一,但流处理是Spark中的事后考虑,而众所周知,Spark使用迷你批处理来模拟流处理。
另一方面,Apache Flink被设计为流处理引擎。这意味着Flink
更好的内存管理,避免偶尔出现内存使用高峰。
通过允许在同一节点上进行迭代处理,而不是让群集独立运行它们来管理更快的速度。
Minio与Apache Flink
Apache Flink在其典型的处理流程中支持三种不同的数据目标-数据源,接收器和检查点目标。尽管数据源和接收器相当明显,但检查点目标用于在处理过程中以一定间隔保持状态,以防止数据丢失并从节点故障中持续恢复。
借助AWS S3 API支持Apache Flink中的一等公民,可以将所有三个数据目标配置为与任何与AWS S3 API兼容的对象存储一起使用,包括当然是Minio。
Minio可以使用Flink进行四种广泛的配置,下面让我们看一下这四个:
Minio事件通知:Minio事件日志可以作为事件流通过Kafka发送到Flink。在对象访问日志对于企业了解某些用户行为趋势或数据访问趋势很重要的情况下,此类事件数据很有用。
像Minio这样的远程对象存储目标使状态与Flink的计算节点解耦。这意味着Flink变为无状态,即在状态安全地存储在Minio上时根据需要自由增长和收缩(节省成本)。
Minio性能(每个节点高达10 GBps)确保即使状态已解耦,状态仍然易于使用,并且不会对Flink处理造成任何延迟。
通过可配置的擦除编码,可扩展的设计,服务器端加密,Minio以经济高效的方式确保了数据的安全,可扩展和可靠存储。
Flink中的本机AWS S3 API支持意味着即开即用的集成和对Minio的支持,从而降低了配置和维护成本。
使用Flink配置Minio
现在让我们看一下如何使用Minio将Apache Flink配置为远程存储后端。在此示例中,我们将Minio用作源和接收器。
首先,您需要部署Minio服务器,有关详细信息,请参阅此文档。接下来,按照快速入门文档中的说明下载Flink二进制文件。
然后更新$FLINK_DIR/conf/flink-conf.yaml并添加以下部分:state.backend:文件系统
s3.endpoint:http ://127.0.0.1: 9000
s3.path-style:true
s3.access-key:minio
s3.secret-key:minio123
$FLINK_DIR这是您解压缩Flink tar文件的目录。另外,不要忘记s3.根据您的Minio服务器部署中的实际情况来更新字段。
现在,启动Flink。现在可以使用Minio作为默认存储系统了。为了测试这一点,我使用了WordCountFlink文档中的示例。/bin/flink运行examples / batch / WordCount.jar-输入s3://input/test.txt-输出s3:// testbucket / output
这test.txt是一个示例文本文件(使用具有大量文本数据的任何文件)。作业完成后,您可以在testbucket/output文件中看到字数统计。
结论
在这篇文章中,我们了解了流处理以及它如何有可能帮助企业加速其数据处理方法。我们了解了为什么流处理越来越受欢迎,并看到了一些流行的用例。最终,我们了解了Minio与Flink结合如何能够帮助创建基于私有云的流数据基础架构。
随着流数据成为使用和处理事件的最流行方法之一,我们希望本文能帮助您了解Flink如何很好地处理这种方法,以及为什么使用Minio作为此类流数据基础结构的存储引擎是有意义的。