此端点已更新,现包含 Post 编辑元数据。请在“编辑 Posts”基础知识页面了解这些元数据的详细信息。
Decahose 流
- 扩展与增强的 URL: - 完整展开短链接,并提供额外的元数据(页面标题和描述)
- 流分区 - 2 个分区,每个分区包含 Decahose 流量的 50%
- 更高的可靠性 - 后端系统具备地域多样性
ENTERPRISE
流式传输点赞
- 点赞通过独立的、单独的流进行传送
- 点赞历史上被称为“Favorites”。增强的原生格式负载保留此命名
- 流仅包含公开点赞
- 公开指点赞用户、Post 创建者以及 Post 本身在平台上均为公开
- 点赞与转发非常相似,代表一种公开的互动信号
- 负载元素包括:
- 原始 Post 对象
- 创建原始 Post 的参与者(Actor)对象
- 执行点赞操作的参与者(Actor)对象
- 只能为原始内容点赞
- 转发不能被点赞。对转发的点赞将应用于原始 Post
- 引用的 Tweets 可以 被点赞
- 点赞活动包含适用的 Gnip 增强(如已购买/应用)
- 支持的产品 / 功能
- 点赞流支持回填(如已购买/应用)
- 点赞流不支持回放
- 点赞不支持搜索或历史
- 目前暂无将点赞支持添加到 PowerTrack 的计划
- 对于在 Decahose 中分发的 10% 抽样 Post,流将包含 100% 的适用公开点赞
- 分区: 2
- URL 结构
使用指南
恢复与冗余
- 为支持多环境,我们可以为你的账户部署附加流。这些流彼此独立,并具有不同的 stream_label 以便区分。
- 为帮助保持稳定连接,每个 Decahose 流都支持冗余连接。最常见的架构是一个流配有两个连接,客户端侧有两个相互独立的消费进程——理想情况下位于不同网络。通过这种设计,可在客户端侧的网络、服务器与数据存储链路上实现冗余。请注意,每个连接都会提供完整的数据副本,客户端必须具备容忍并去重的能力。
- 系统每 10 秒会发送一次“心跳”;然而,对于 Decahose 流而言,数据量足够大,即便是短时间(例如几秒钟)没有 Post 也可能表明连接异常。因此,“数据静默”以及缺少心跳都可用于检测断连。
额外流
概述
Recovery 是一款数据恢复工具(不用于主数据采集),可提供对最近 X 历史数据的滚动 5 天窗口的流式访问。它适用于在以下情况下进行数据补采:当你的消费端应用在实时流中漏数时——无论是因短时断开连接,还是任何其他导致一段时间内未能摄取实时数据的情况。使用 Recovery
数据可用性
回填
- 你可以在每次连接时始终使用“backfillMinutes=5”,然后在客户端处理可能出现的重复 data。
- 如果断开超过 5 分钟,你可以使用 Recovery 来恢复 data。
- 确定断开持续时间。
- 5 分钟或更短?
- 如果你的流启用了 Backfill,准备包含合适“backfillMinutes”参数的连接请求。
- 超过 5 分钟?
- 如果你有 Recovery 流,请针对断开时段发起 Recovery 请求(理想情况下使用你当前的实时规则集,必要时可使用 Rules API)。
- 5 分钟或更短?
- 发起新的连接请求。
- 实施回填 回填允许你从断开前的时间点重新连接,覆盖最长 5 分钟的断开。通过在连接请求中包含一个参数来实现。
- 从其他位置消费冗余流 如果冗余流可以导入同一在线环境并进行去重,你将无需恢复,除非主流和冗余流同时发生停机或断开。如果冗余流无法实时导入生产环境,可将其写入单独的“应急”数据存储。这样,当主流连接发生断开或停机时,你的系统可以用该数据填补主数据库在缺失时段的空白。
- 实施 Recovery 当断开或停机同时影响主流和冗余流时,使用 Decahose Recovery 恢复任何遗漏的数据。该 API 提供覆盖 5 天归档的滚动窗口,最佳做法是每次请求不超过 1 小时的窗口并以流式方式导入。这与实时流并行进行。请注意,我们无法提供超出 Recovery 所提供 5 天窗口之外的 Decahose 数据恢复方案,因此,使用冗余流十分重要,以确保在你方出现重大停机时,你方拥有完整的数据副本。
- 统计入站 Post 数量 你的系统应在摄取应用的最初阶段统计接收到的原始 Post 数量,并提供方式将这些数字与你最终数据存储中到达的 Post 数量进行对比。任何差异都可以被监控,并提醒你的团队关注接收后导致数据丢失的问题。
- 分析异常的存储量 你也可以分析最终数据库中的存储数据量,查找异常下降。这同样可能表明存在问题,尽管在某些情况下,量的下降是正常的(例如,当 X 平台不可用,用户在一段时间内无法创建 Post)。
API 参考文档
Decahose 流
方法
| 方法 | 描述 |
|---|---|
| GET /{stream-type}/:stream | 连接到流式数据 |
GET :stream
建立到 Firehose 流的持久连接,通过该连接传输实时 data。请求规范
| 请求方法 | HTTP GET |
| 连接类型 | Keep-Alive 应在请求的请求头中指定。 |
| URL | 可在你的控制面板中该流的 API Help 页面找到,结构如下: Decahose: https://gnip-stream.x.com/stream/sample10/accounts/:account_name/publishers/twitter/:stream_label.json?partition=1 |
| 分区(必填) | partition=\{#} - 为获取完整流,现在必须使用分区。连接到流时需要指定 partition 参数。以下是每个流的分区数量:* Decahose:2 个分区 |
| 压缩 | Gzip。若要使用 Gzip 压缩连接到流,只需在连接请求中发送 Accept-Encoding 请求头。该请求头应如下所示: Accept-Encoding: gzip |
| 字符编码 | UTF-8 |
| 响应格式 | JSON。你的请求头应指定响应为 JSON 格式。 |
| 速率限制 | 每 60 秒最多 10 个请求。 |
| 回填参数 | 如果你购买了启用 Backfill 的流,需要在 GET 请求中添加 “backfillMinutes” 参数以启用它。 |
| 读取超时 | 在客户端设置读取超时,并确保其值大于 30 秒。 |
| 对 Tweet 编辑的支持 | 所有 Tweet 对象都会包含描述该 Tweet 编辑历史的 Tweet 编辑元数据。详情参见 “Edit Tweets” 基础页面。 |
响应
| Status | Text | Description |
|---|---|---|
| 200 | Success | 连接已成功建立,新的活动将在产生时通过连接推送。 |
| 401 | Unauthorized | 由于凭据无效导致 HTTP 认证失败。使用你的凭据登录 console.gnip.com,确认你在请求中正确使用了它们。 |
| 406 | Not Acceptable | 通常发生在客户端未正确包含用于从流中接受 gzip 编码的请求头时,但也可能由其他情况导致。 将包含类似于 “This connection requires compression. To enable compression, send an ‘Accept-Encoding: gzip’ header in your request and be ready to uncompress the stream as it is read on the client end.” 的 JSON 消息。 |
| 429 | Rate Limited | 你的应用已超出连接请求的配额。 |
| 503 | Service Unavailable | X 服务器问题。请使用指数退避策略重新连接。若 X API 状态页 未发布相关通知,且在 10 分钟后仍无法连接,请联系支持或紧急渠道。 |