我有一个应用程序,每次使用 SQS 运行我的程序时可能需要发送数十万条消息。该程序每次运行需要 1-2 小时,我每天运行 5-10 次。所以这大约是每天 100 万条消息。
我想快点做。是我最好的方法:
- 用自己的发送消息发送每个,但在另一个线程中发送它们,这样我的主线程就不会暂停?
- 使用 send-message-batch,它可以让我一次发送 10 条消息?
- 我的天啊。为什么我要发这么多消息?为什么不将它们全部写入一个大对象中,将对象保存在 S3 中,然后用 SQS 发送指向该对象的指针呢?
我的消息是在分布式系统中运行的程序的标准输出和标准错误。所以上面#3 的问题是在批处理发生之前我不会得到程序的输出。我想我可以每 60 秒进行一次批处理。
我敢肯定,这已经出现在其他人身上。在我缺少的 AWS SQS API 中是否有一种聪明的方法可以做到这一点?
Kinesis 在我的环境中不是一个选项。
我们目前正在从运行在 Apache Spark 工作人员(大约 2000 个内核/集群)和其他监控系统和大约 5-20 个集群上的 python 程序发送消息。消息将发送到 lambda 服务器。问题是一些节点在 10-20 秒内发送了几千条消息
我们尝试使用 Spark 本身来收集这些信息,将其存储在 RDD 中,将该 RDD 保存在 S3 中,等等。这种方法的问题是我们没有得到实时监控,我们增加了几个小时的处理时间。(我们不完全确定为什么它增加了这么多时间,但 Spark 可能最终重新计算了一些 RDD,因为有些东西不再适合 RAM 或溢出磁盘。)