ML 管道的批处理 - 有关数据摄取和数据存储的问题

问题描述 投票:0回答:1

我正在为 ML 应用程序(大规模)开发批量数据管道,并且有一些问题

  1. 数据摄取层:到目前为止,在我读过的大多数来源中,建议使用 Kafka 从原始来源(在我的例子中为 CSV)中提取数据。但是,当仅阅读有关 Kafka 的内容时,它被描述为主要用于流处理的工具。那么为什么我应该使用 Kafka 进行批处理,这真的是最佳实践吗?有哪些替代方案?

  2. 数据存储:对于批处理管道的数据存储,我也很犹豫。大多数微服务似乎都超出了我的实际需求,我想知道是否有一个精益的解决方案。例如。我有一个包含结构化数据的数据集,因此 MongoDB 可能有点过多。

进一步评论:到目前为止,我已经决定使用 PySpark 进行数据处理和聚合。用于调度和编排的 Airflow 和 Docker

我必须决定使用某些微服务,并为整个数据管道制定流程图。 .

database apache-kafka architecture batch-processing data-engineering
1个回答
0
投票

如果您有静态 CSV 文件,不,您不应该真正使用 Kafka。如果您对此文件进行任何更新,我什至建议您使用 Postgres/MySQL,而不是 MongoDB。仅当您要更新此数据时(在 SQL 数据库中,或者如果您选择使用 Mongo),您才可以使用 Debezium 将特定更改作为事件流拉入 Kafka 主题。

如果您有一个永远不会更改的静态文件,则将其作为

--files
标志提供给
spark-submit
,或上传到 S3/HDFS,在代码中读取它(作为文件),或使用 Spark JDBC reader / SparkSQL MongoDB上传到该数据库后阅读器,就完成了。

如果您在某个计划的时间间隔运行生产者/消费者任务并且一次只处理几条记录,

Kafka可以用于批处理,但这不是我在日志之外看到的常见用例 -归档目的(消耗大量事件,并将大块存储在 HDFS/S3 中)。但即便如此,也很少有几个月前搜索过这些数据的情况,所以在我看来,这还是浪费存储。

您也并不严格需要 Docker,甚至“微服务”,因为 Airflow 可以调度普通的 Python 或 Bash 进程,而 Spark 本身会将您的代码分离到管道(执行器任务)中

© www.soinside.com 2019 - 2024. All rights reserved.