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

はじめに

ストリーミングデータを利用する際、接続時間を最大化し、マッチしたデータを漏れなく受信することが基本目標となります。そのためには、冗長接続を活用し、切断を自動検知して迅速に再接続し、欠損データの回復計画を用意しておくことが重要です。 このインテグレーションガイドでは、復旧と冗長性に関する各種機能(冗長接続、バックフィル、リカバリー)について説明します。   冗長接続 冗長接続により、Filtered Stream に対して同時に複数の接続を確立できます。これは、同じストリームに2つの別個のコンシューマーで接続し、両方の接続から同一のデータを受信することで冗長性を確保するものです。これにより、1つのストリームが切断された場合やアプリケーションのプライマリサーバーが障害を起こした場合などに、アプリはホットフェイルオーバーで継続できます。 現在、Filtered Stream では、エンタープライズアクセスを持つプロジェクトのみ、最大2本の冗長接続を確立できます。冗長ストリームを利用するには、プライマリ接続と同じ URL に接続するだけです。ストリームのデータは両方の接続を通じて配信されます。

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

切断を検知したら、システムはストリームへ再接続できるようにしておく必要があります。可能であれば、適切な復旧機能でデータをバックフィルできるよう、切断がどのくらい続いたかを記録してください。  エンタープライズのアクセス権を持つ Project を使用しており、切断が5分以下だったと判定した場合は、バックフィル用パラメータ backfill_minutes を使用できます。 このパラメータを GET /tweets/search/stream リクエストに渡すと、直近1~5分の間にルールに一致した Post を受け取ります。一般的に、これらの過去の Post は新たに一致した Post よりも先に配信され、また Post の重複排除は行いません。つまり、90秒間切断されていたのに2分分のバックフィルデータを要求した場合、30秒分の重複した Post を受け取ることになり、システム側で許容する必要があります。以下はバックフィルパラメータを付与したリクエスト例です: curl 'https://api.x.com/2/tweets/search/stream?backfill_minutes=5' -H "Authorization: Bearer $ACCESS_TOKEN" エンタープライズのアクセス権がない場合、または切断時間が5分を超えていたと判定した場合は、recent search エンドポイント またはリカバリ機能を利用して取り逃したデータをリクエストできます。ただし、search Posts エンドポイントには sample:、bio:、bio_name:、bio_location: の各オペレーターが含まれず、keyword および #hashtag オペレーターでアクセントやダイアクリティカルマークを使用する場合のマッチング動作にもいくつかの差異があります。これらの差異により、filtered stream エンドポイント経由で受信できた可能性のあるすべての Post を完全には復旧できない場合があります。  切断後の取り逃したデータの復旧: リカバリ エンタープライズのアクセス権を持つ Project を使用している場合、5分のバックフィルウィンドウ内に再接続できない際に、過去24時間の取り逃したデータを復旧するためにリカバリ機能を使用できます。 ストリーミングのリカバリ機能により、バックフィルウィンドウを24時間に拡張できます。リカバリは取り逃したデータの期間を「再生」できるようにします。リカバリストリームは、‘start_time’ と ‘end_time’ リクエストパラメータを使用して接続リクエストを行ったときに開始されます。接続されると、リカバリは指定された期間を再ストリームし、その後切断します。   同時に2件のリカバリへの並行リクエスト、すなわち「2つのリカバリジョブ」を行うことができます。リカバリは、開始時刻と終了時刻が定義される点を除き、技術的にはバックフィルと同様に機能します。リカバリ期間は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