将数据导入 Elasticsearch 和 RabbitMQ 的 S3 的最佳方法是什么?

What is the best approach to getting data into S3 for Elasticsearch and RabbitMQ?

在我的公司,我们开发了一些游戏,其中一些游戏的事件被发送到 Elasticsearch,而其他游戏则被发送到 RabbitMQ。我们有一个本地 CLI,它从两者中获取数据,将消息编译成压缩 (Gzip) JSON 文件,然后另一个 CLI 将它们转换为 SQL 语句并将它们扔到本地 SQL服务器。我们现在想扩大规模,但目前的设置很痛苦,而且离实时分析还很远。

我最近在 Python 中构建了一个应用程序,我计划将其发布到 AWS 中的 docker 容器。该脚本从 Elasticsearch 抓取数据,编译成小型压缩 JSONS 并发布到 S3 存储桶。数据从那里被提取到 Snowflake 中进行分析。到目前为止,我能够相当快地获取数据并且看起来很有希望作为替代方案。

我打算用 RabbitMQ 做一些类似的事情,但我想找到一个更好的替代方案,让这个摄取过程无缝发生,并帮助我避免在 python 代码中实现各种异常调用。

  1. 我研究了一下,发现可能有一种方法可以将 link RabbitMQ 连接到 Amazon Kinesis Firehose。我的问题是:如何将流从 RabbitMQ 发送到 Kinesis?

  2. 对于 Elasticsearch,实现这一点的最佳方法是什么?我读过 S3 的 logstash 插件 (https://www.elastic.co/guide/en/logstash/current/plugins-outputs-s3.html) and about logstash plugin for kinesis (https://www.elastic.co/guide/en/logstash/current/plugins-inputs-kinesis.html)。哪种方法最适合实时摄取?

我的回答将非常有理论性,需要在现实世界中进行调整测试并适应您的用例。 对于接近实时的行为,我会使用 logstash

您可以通过输出到 RabbitMQ 来创建更多可扩展的 archi,并使用其他管道来侦听队列并执行其他任务。

  • 从 logstash ES -> Rabbit MQ
  • 来自 logstash RabbitMQ -> SQL
  • 从 logstash RabbitMQ -> Kinesis
  • 从 logstash RabbitMQ -> AWS
  • 等等……