Kafka 以Parquet格式从MongoDB到Amazon S3的增量数据存储

pdtvr36n  于 2023-01-04  发布在  Apache
关注(0)|答案(2)|浏览(200)

我在MongoDB中有一个数据库。它每分钟都会从不同的用户PC上更新。现在我想将数据存储到Amazon S3存储桶中(最好是Parquet格式,否则是CSV格式)。但我不想每次都将完整的MongoDB数据存储到S3中。我只想将增量数据保存在S3中。
我想在MongoDB和S3之间使用Kafka。但这有两个问题:
问题1:我不知道如何在没有任何付费解决方案的情况下以Parquet/CSV格式存储从MongoDB到S3的增量数据
问题2:我不知道这是否是一个好的/实际的解决办法
有谁能提出任何解决方案来实现这种工作吗?

pw9qyyiw

pw9qyyiw1#

当你保存大量的数据时,比如说10k行, parquet 将是非常有利的。当你说增量记录时,我认为你将节省每一分钟,最多1 - 4k条记录。保存为 parquet 在这里没有帮助。相反
1.使用JSON--优点是你不必担心特殊的字符/编码、列的位置嵌套列等。Gson解析器将处理所有这些。这意味着每隔1分钟从mongo cdc读取并写入JSON(在分钟结束时写入将确保您有1个胖文件,而不是60个连续文件)。要理解,S3按您所做的文件读取次数计费。也就是说,如果存储60个文件并读取60个文件--这将比读取1个fat文件的成本更高
1.在 parquet 中有一个快照。继续使用一些spark作业将JSON合并到 parquet 文件中。
你也可以考虑使用delta brick--我自己没有用过,但它的优点是你可以用delta格式写入数据存储,并且delta brick会定期合并数据(使用vacuum命令)--确保你总是得到最新的Parquet地板。
希望这能有所帮助

irtuqstp

irtuqstp2#

存储来自MongoDB的增量数据(Kafka)
使用Debezium或Mongo CDC连接器
我不想存储完整的MongoDB
您可以禁用初始Debezium快照,但是在启动连接器之后的任何更新/删除都将无法正确处理。
至S3,采用 parquet /CSV格式
Mongo文档通常不是表格,所以不要使用CSV; Parquet处理嵌套数据要好得多。
您可以为此使用Confluent S3接收器连接器。
没有任何付费解决方案
以上都是免费/开源工具。除非你使用MinIO等替代解决方案,否则S3是要花钱的。但是,你仍然要为运行所有这些工具支付服务器费用,而且恢复/维护成本可能比直接使用AWS S3更高。

相关问题