建立流数据与批处理管道的7个最佳实践 – thenewstack


企业正在从传感器,智能手机,IT设备,网站和其他非传统来源获取越来越多的数据,并实时处理这些数据以改善运营并更好地为客户服务。
数据通常来自多个来源,并收集在一个开放的数据湖中,在这里它与现有的历史数据结合在一起,通常通过机器学习和AI来提供业务价值和结果。数据工程师面临的挑战是建立流数据管道,以进行快速实验并大规模可靠地运行。
当组装具有开放源代码和商业软件组合的流处理堆栈时,有几个障碍会阻碍项目的成功。本文探讨了一些最佳实践,以克服这些障碍并建立快速,可扩展和强大的流传输管道。
允许快速实验
试用新模型和数据集的能力至关重要。此处的重要步骤是减少获取和准备新数据源所需的时间,以便可以将它们与其他数据资产组合在一起。例如,使用预包装的连接器连接常见的流数据源,这使您无需编写代码即可快速试验不同的数据集。这些可以包括用于Kafka,Kinesis,S3,S3-SQS,GCS,HIVE,HIVE-ACID,Snowflake,BigQuery,ElasticSearch,MongoDB和Druid的连接器。
但是,使用连接器不足以进行快速实验。同样重要的是,使用能够使用自动生成的代码然后可以对其进行编辑的代码来开发管道的工具,例如,用于连接数据的代码以及通过UI驱动的界面构建业务逻辑的功能。
通过自动化控制总体降低成本
Spark结构化流传输管道是长期运行的,这意味着成本可能会迅速失去控制。将自动化应用于群集管理可以在确保维持业务SLA的同时显着降低成本。
关键是充分利用大型云能力,这些能力使您可以更经济地运行工作负载。对于数据工程师来说,选择正确的实例类型并知道何时进行缩放是一个猜谜游戏,他们往往会在配置过多和配置不足之间摇摆不定。关键是使用异构集群配置,以及自动化可以根据使用模式立即调整集群大小,甚至可以根据历史数据预测要部署的集群大小。
允许云可移植性
Gartner去年的一项调查发现,超过80%的受访者使用了不止一个公共云提供商。在一个数据生成并存储在多个云中的世界中,必须有一种流传输管道策略,该策略不会将您锁定在特定的存储库,存储格式,数据处理框架或用户界面中。适应能力是关键。
这就要求技术能够在您希望使用的每个公共云上提供相同的流管道功能。工程师应该能够携带自己的代码(JAR),并通过进行一些重新配置而在每个云中重新创建现有管道,而无需完全重写其代码。
易于测试和调试
由于构建管道是一个反复的,非周期性的过程,因此确保您拥有有效的方法来测试和调试管道是关键。工程师应该能够使用输入数据的一部分,以仅需几分钟的“空运行”来测试管道。这有助于验证连接性,确保数据架构正确以及确保业务逻辑完整且按预期执行。
确保数据准确性和一致性
长时间运行的管道可能会遇到一致性,准确性和质量方面的问题,这是因为数据没有按特定的顺序到达并且不会随架构的发展而变化。为了解决这个问题,请仔细查看数据传输过程以及如何管理管道更新。作为最佳实践,在将数据存储到数据湖之后,为数据建立预定义的定期“控制点”。这样可以确保您拥有可靠,有序和错误检查的数据(概念上类似于Internet数据包交换中的传输控制协议)。
通常,在更改数据管道或应用程序的代码时,消除复杂性和潜在的错误点。随着业务需求的发展,应用程序将随着时间而变化,这需要持续的数据工程。
允许重放和重新处理数据
在更新模型或更改业务逻辑时,用户可能需要编辑管道,进行更改并从特定检查点重播。
重要的是要具有在发生更改时有效地重放或重新处理流传输管道的能力,并且能够在流程的不同点内执行此操作。这类似于编辑视频-每次进行一次编辑时重播整个视频都是不切实际且耗时的。相同的原则适用于流数据管道。
解决此问题的一种方法是提供“错误接收器”。输入数据中的模式可能会演变并导致不一致。因此,具有检测架构不匹配和无效记录,过滤这些记录并在单独的存储位置中写入不良记录的元数据以及异常消息的能力非常重要。用户可以设置警报时间,并通过清除和重新处理这些错误记录来防止数据丢失。
最大限度减少本机流使用时间
一些应用程序需要真实的实时数据,因此重要的是减少接收数据与使用之间的延迟。一些数据仓库支持“微批处理”,该微批处理经常以小增量收集数据,但是对于真正的实时用例,这会引入过多的延迟。
数据湖更适合这些用例,因为它们支持本地流传输,数据流在处理时会处理并在到达时可供分析使用。数据管道会在接收到数据时对数据进行转换,并触发分析所需的计算。在本地流和微批处理之间进行选择取决于您的应用程序需求。