メインコンテンツへスキップ

はじめに

ストリーミングデータを利用する場合、接続時間を最大化し、マッチしたデータをすべて受信することが基本的な目標となります。つまり、冗長接続を活用し、自動的に切断を検知してすばやく再接続し、失われたデータを復旧するための計画を用意しておくことが重要です。 このインテグレーションガイドでは、冗長接続、バックフィル、リカバリといった、さまざまなリカバリおよび冗長化機能について説明します。   冗長接続 冗長接続を利用すると、Filtered stream に対して複数の同時接続を確立できます。これにより、2 つの別々のコンシューマーから同じストリームに接続し、両方の接続を通じて同じデータを受信できるため、冗長性が確保されます。したがって、1 つのストリームが切断された場合や、アプリケーションのプライマリサーバーが停止した場合など、さまざまな状況に対して、アプリをホットフェイルオーバー構成にできます。 現在、Filtered stream では Enterprise アクセス権を持つ Project のみが、最大 2 つまでの冗長接続を確立できます。冗長ストリームを利用するには、プライマリ接続で使用しているものと同じ URL に接続するだけです。ストリームのデータは両方の接続を通じて送信されます。

切断後の取り逃したデータの復旧: バックフィル

切断を検知したら、システムはストリームへ再接続できるようになっている必要があります。可能であれば、どの程度の時間切断されていたかを記録し、その情報を使って適切なリカバリー機能でデータをバックフィルできるようにしてください。  Enterprise アクセス権を持つ Project を使用していて、切断時間が 5 分以内だったと判別できた場合は、バックフィル用パラメータである backfill_minutes を使用できます。このパラメータを GET /tweets/search/stream リクエストに指定すると、過去 1~5 分の間で、ルールにマッチした投稿を取得できます。通常、これらの古い投稿は、新たにマッチした投稿よりも先に配信され、また投稿の重複排除は行われません。つまり、90 秒間切断されていたにもかかわらず 2 分分のバックフィルデータをリクエストした場合、30 秒分の重複した投稿を受け取ることになり、システム側でそれを許容できる必要があります。以下は、backfill パラメータを付与したリクエスト例です。 curl 'https://api.x.com/2/tweets/search/stream?backfill_minutes=5' -H "Authorization: Bearer $ACCESS_TOKEN" Enterprise アクセス権がない場合、または切断時間が 5 分を超えていたと判別された場合は、取り逃したデータをリクエストするために recent search endpoint かリカバリー機能を利用できます。ただし、投稿検索エンドポイントには sample:、bio:、bio_name:、bio_location: オペレーターは含まれておらず、キーワードおよび #hashtag オペレーターでアクセントやダイアクリティカルマークを使用した場合のマッチング動作にもいくつか違いがあります。これらの違いにより、filtered stream エンドポイント経由で受信できていたはずのすべての投稿を完全には復旧できない可能性があります。  切断後の取り逃したデータの復旧: Recovery Enterprise アクセス権を持つ Project を使用している場合、5 分のバックフィルウィンドウ内に再接続できなかったときでも、Recovery 機能を使用して直近 24 時間以内の取り逃したデータを復旧できます。 ストリーミングのリカバリー機能を使用すると、24 時間の拡張バックフィルウィンドウを利用できます。Recovery によって、取り逃した期間のデータを「再生」できます。Recovery ストリームは、‘start_time’ と ‘end_time’ リクエストパラメータを使って接続リクエストを行ったときに開始されます。接続されると、Recovery は指定された時間範囲のデータを再ストリームし、その後切断します。   Recovery に対して同時に 2 件のリクエスト、つまり「2 つのリカバリージョブ」を行うことができます。Recovery は、開始時刻と終了時刻が定義される点を除けば、技術的には backfill と同じように動作します。1 回のリカバリー期間は 1 つの時間範囲に対応します。
NameTypeDescription
start_timedate (ISO 8601)YYYY-MM-DDTHH:mm:ssZ (ISO 8601/RFC 3339).

復旧を開始する時刻を示す UTC の日時。
end_timedate (ISO 8601)YYYY-MM-DDTHH:mm:ssZ (ISO 8601/RFC 3339).

復旧を終了する時刻を示す UTC の日時。
リクエスト URL の例: https://api.x.com/2/tweets/search/stream?start_time=2022-07-12T15:10:00Z&end_time=2022-07-12T15:20:00Z