1

我有一个 python 脚本,它读取有关特定体育赛事的所有推文并将它们输入数据库。当我这个周末每次在游戏中发生重大事件时运行它时,脚本就会停止并且我会得到一个错误。它说它与代码有关,但我不相信是这种情况。我在 Twitter 的 api 网站上找到了这个:

“落后

无法足够快地处理消息的客户端将被断开连接。跟踪您的客户是否落后的一种方法是将您收到的推文的时间戳与当前时间进行比较。如果时间戳之间的差异随着时间的推移而增加,那么客户端处理推文的速度就没有传递它们的速度。另一种接收客户端落后通知的方法是在建立流连接时传递stall_warnings 参数。”

我想知道这是否是发生在我身上的事情,以及实施解决方案的最佳方法是什么。

4

1 回答 1

3

由于 straming API 创建了一个永久连接,Falling behind从技术上讲,这意味着将推文放入此连接的速度比您的客户端使用的速度要快。

解决方案很简单,您必须更快地处理推文,即优化您的景观。必须存在瓶颈/瓶颈,识别它们并妥善处理。例如,可能是数据库延迟,当您的数据库每秒无法处理足够的插入时,IO 延迟,当数据无法按需要快速存储到磁盘时;代码效率低下;CPU负载高;网络带宽限制等

没有适用于所有情况的灵丹妙药,但一些明显的步骤包括:

  • 按原样存储从 Twitter 接收的数据,并在负载较低的窗口中进行后处理;
  • 部署具有多个推文消费者(处理器)和数据分片的集群;
  • 使用更快的磁盘/一些 RAID 配置可以加快 IO;
  • 推文查询优化,确保请求和处理尽可能少的推文;
  • 代码优化;
  • 迁移到带宽更高的数据中心;
于 2013-11-13T17:39:22.550 回答