我们正在设计一个ETL流程,我们将从客户端获得一个每日帐户文件(可能有50万条记录,可能会增长),然后将该文件加载到我们的数据库中。
我们当前的过程将文件拆分成较小的文件并将其加载到staging...sometime,或者如果该过程失败,我们将尝试计算出我们已经处理了多少条记录,然后从这一点重新开始。有没有其他更好的方法来解决这个问题?
我们正在考虑使用Kafka。我是卡夫卡的新手。如果kafka是可行的,或者我们只是过度杀死了一个简单的ETL过程,我们只需将数据加载到一个临时表,最后加载到目标表,我将非常感谢您的反馈。
发布于 2020-03-16 14:06:17
Apache Kafka®是一个分布式流媒体平台。这到底是什么意思?
流媒体平台有三个关键功能:
发布和订阅记录流,类似于消息队列或企业消息传递系统。
以容错持久的方式存储记录流。
在记录流出现时对其进行处理。
Kafka通常用于两大类应用程序:
构建实时流数据管道,以便在系统或应用程序之间可靠地获取数据
构建转换数据流或对数据流做出反应的实时流应用程序
https://kafka.apache.org/intro
如果你遇到错误,让你检查最后提交的记录到你的临时数据库,并需要系统自动管理这些东西,Kafka可以帮助你简化这一过程。
尽管Kafka是为处理海量数据负载而构建的,并分散在集群中,但您当然可以将其用于较小的问题,并利用其队列功能和偏移管理,即使只有一个代理(服务器)和较少的分区数量(并行级别)也是如此。
如果您根本没有预期到任何规模,我建议您考虑RabbitMQ。
RabbitMQ是一种消息排队软件,也称为消息代理或队列管理器。简单地说,它是定义队列的软件,应用程序连接到该软件以传输一条或多条消息。
https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html
Amit Rathi的“How to know if Apache Kafka is right for you”
https://link.medium.com/enGzNaNvT4
如果你选择了Kafka:
当你收到一个文件时,创建一个遍历它的所有行的进程,并将它们发送给Kafka (Kafka生产者)。
创建另一个进程,不断接收来自kafka (Kafka Consumer)的事件,并将它们以小批量的方式写入数据库(类似于您的小文件)。
设置Kafka:
https://dzone.com/articles/kafka-setup
Kafka Consumer/Producer简单示例:
http://www.stackframelayout.com/programowanie/kafka-simple-producer-consumer-example/
发布于 2020-03-19 02:15:14
不要假设导入数据就像将数据转储到数据库中并让计算机处理所有处理工作一样简单。正如您已经发现的,自动加载可能会有问题。
首先,数据库ELT过程会降低硬盘的价格。在将数据插入其本机表之前,不要将数据暂存到一个表中。您的进程应该只将数据导入其本机表一次,以保护硬件。
其次,你不需要第三方软件来中介这项工作。您需要控件,这样就不需要手动检查插入的内容。这意味着您的流程是在导入之前首先清理/转换数据。您希望在加载之前通过清理和结构化甚至处理数据来防止所有问题。加载应该只是SQL插入脚本。我拆解了许多T-SQL脚本,有些人认为将处理与数据库命令集成在一起很方便。不要这样做。
下面是我如何管理电子表格报表中的导入。Excel公式比学习像SSIS这样的ETL工具更好。我使用单元格公式来验证记录是否有效,可以进入我们的系统。这个结果是它自己的列,如果该列为true,则连接列将显示一个插入脚本。
=if(J1, concatenate("('", A1, "', ", B1, "),"), "")如果该列为false,则concat列不显示任何内容。这允许我将插入内容复制/粘贴到SSMS中,并通过"insert to table values“脚本进行批量插入。
如果这实际上是在更新现有记录,就像您的评论所建议的那样,那么您需要掌握数据,为用户组织日志中更改的内容。
同步步骤:
<>G214
我的同步数据源和处理创建/更新/删除的指南:sync local files with server files
https://stackoverflow.com/questions/60662899
复制相似问题