python - 将数据导入 S3 for Elasticsearch 和 RabbitMQ 的最佳方法是什么?
问题描述
在我的公司,我们开发了一些游戏,其中一些游戏的事件被发送到 Elasticsearch 和其他的 RabbitMQ。我们有一个本地 CLI,它从两者中获取数据,将消息编译成压缩 (Gzip) JSON 文件,然后另一个 CLI 将它们转换为 SQL 语句并将它们扔到本地 SQL Server 中。我们现在想扩大规模,但目前的设置很痛苦,而且离实时分析还差得很远。
我最近用 Python 构建了一个应用程序,我打算将它发布到 AWS 中的 docker 容器中。该脚本从 Elasticsearch 抓取数据,编译成小型压缩 JSONS 并发布到 S3 存储桶。从那里数据被摄取到雪花中进行分析。到目前为止,我能够很快地获取数据,并且看起来很有希望作为替代方案。
我计划用 RabbitMQ 做一些类似的事情,但我想找到一个更好的替代方案,它可以让这个摄取过程无缝地发生,并帮助我避免在 python 代码中实现各种异常调用。
我进行了一些研究,发现可能有一种方法可以将 RabbitMQ 链接到 Amazon Kinesis Firehose。我的问题是:如何将流从 RabbitMQ 发送到 Kinesis?
对于 Elasticsearch,实现这一目标的最佳方法是什么?我已经阅读了有关 S3 的 logstash 插件(https://www.elastic.co/guide/en/logstash/current/plugins-outputs-s3.html)和有关 kinesis 的 logstash 插件(https://www. elastic.co/guide/en/logstash/current/plugins-inputs-kinesis.html)。哪种方法最适合实时摄取?
解决方案
我的回答将非常有神论,需要在现实世界中进行调整测试并适应您的用例。对于近乎实时的行为,我会使用logstash
- 使用弹性搜索输入和一个简短的 cron。这篇文章可以帮助https://serverfault.com/questions/946237/logstashs-elasticsearch-input-plugin-should-be-used-to-output-to-elasticsearch
- S3 输出(支持 gzip)
- 也许 jdbc 输出到您的数据库
- RabbitMq 输出插件
您可以通过输出到 RabbitMQ 并使用其他管道来侦听队列并执行其他任务来创建更多可扩展的架构。
- 从logstash ES -> Rabbit MQ
- 从logstash RabbitMQ -> SQL
- 从logstash RabbitMQ -> Kinesis
- 从logstash RabbitMQ -> AWS
- ETC....
推荐阅读
- matlab - MATLAB:许多矩阵求逆速度更快
- java - 基于事件时间的窗口不触发
- nestjs - 无法运行测试,因为 Nest 找不到模块
- python - 是否有使用Python提取txt文件时间的功能
- matlab - MATLAB Coder:截断/连接元胞数组
- behat - 在 Behat 中是否有任何自定义函数可以传递用户凭据来测试 API 响应?
- android - 以粗体、斜体和下划线显示和保存 Edittext 的选择性文本,并发送到在 android 中编辑的服务器
- version-control - SSMS 的位桶源控制,团队资源管理器:无法创建 SSL/TLS 安全通道
- swift - Swift:确保来自具有关联类型的不同协议的等价性
- angular - Ionic 插件 BLE(和所有其他插件)不是函数错误 | Ionic4 和 Angular 7