ストリームのパーティション化

この情報では、ストリームのパーティション化について説明します。

ストリーミング・サービスの大規模な運用機能を最大限に活用するには、次の考慮事項に基づいてストリーム内のパーティション数を構成します。

ストリームを作成する前に、予想されるストリーム・スループット、パーティション・キー戦略およびストリームの消費方法について検討してください。ほとんどの構成値は、ストリームの作成後は変更できません。たとえば、ストリームの作成後にメッセージ保持期間またはパーティション数を変更することはできません。

パーティションおよびスループット

ストリームを作成する場合、ストリームのパーティション数を指定する必要があります。アプリケーションの予想されるスループットは、ストリームのパーティション数を決定するのに役立ちます。

1秒当たりに書き込まれたメッセージの最大数を平均メッセージ・サイズに掛けて、予想されるスループットを見積ります。1つのパーティションには1MB/秒のデータ書込み速度とコンシューマ・グループ当たり5 GETリクエスト/秒の制限があるため、スループットが高いほど、スロットルを回避するために追加のパーティションが必要になります。設計上の決定を行う際は、追加のストリーミング制限を考慮してください。

ヒント

アプリケーションの急増を管理するために、パーティションを最大スループットより少し多く割り当てることをお薦めします。

パーティションへの公開

ストリームに公開するメッセージの内容も、ストリームに必要なパーティションの数を決定するのに役立ちます。

メッセージは、ストリームのパーティションに公開されます。複数のパーティションがある場合、メッセージが公開されるパーティションは、メッセージのキーを使用して計算されます。

詳細は、メッセージの公開を参照してください。

パーティション・マッピングのキー

同じキーを持つメッセージは、同じパーティションに移動されます。異なるキーを持つメッセージは、状況により異なるパーティションまたは同じパーティションに移動されます。キーを指定しない場合、ストリーミングはnullキーを認識し、ユーザーのかわりにランダム・キーを生成します。ユーザーが同じメッセージを2回公開すると、完全に新しいキーが生成されるため、異なるパーティションに移動される可能性があります。nullキーを持つすべてのメッセージが同じパーティションに移動されるとはかぎりません。

デフォルトでは、ストリーミングは、ストリームのパーティションにメッセージを均一で予測可能な形式で分散します。ストリーミングAPIでは、ユーザーがストリーミングの微妙な差異を認識していない場合、1つのパーティションがホットスポットになるリスクがあるため、どのパーティション・データが公開されるのかを正確に指定できません。ただし、Kafka APIを使用してストリーミングと対話する場合は、カスタムのパーティション化を実行し、メッセージをパーティションに明示的にマップすることもできますが、これはお薦めしません。

有効なパーティション・キー

メッセージを均一に分散するには、メッセージ・キーに有効な値が必要です。有効値を作成するには、ストリーミング・データの選択性とカーディナリティを考慮してください。

カーディナリティ: 特定のユース・ケースに基づいて生成される可能性のある一意キーの合計数を考慮します。通常、キー・カーディナリティが高いほど、適切に分散されます。

選択性: 各キーを持つメッセージの数を考慮します。選択性が高いほど、キー当たりのメッセージが増えるため、ホットスポットが発生する可能性があります。

常に高いカーディナリティと低い選択性を目標にしてください。

順序付け

同じキーを持つメッセージは、公開された順序で格納され、生成されたときと同じ順序でコンシューマに配信されることが保証されます。同じキーを持つメッセージは同じパーティションに移動されるため、この保証はパーティション・レベルでのみ適用されます。

パーティションおよびコンシューマ・グループ

ストリームが1つ以上のコンシューマ・グループによって消費される場合は、必要なパーティション数を決定する際にそれを考慮する必要があります。パーティション読取りは、コンシューマ・グループ内のインスタンス間で分散されます。

コンシューマ・グループは、ストリームのパーティションが1つのみの場合、一度に1つのインスタンスのみを使用できます。ストリームに複数のパーティションがある場合、インスタンスの数をパーティションの数までスケーリングして、グループの1つのインスタンスでストリーム内の1つのパーティションから読み取ることができます。

詳細は、コンシューマ・グループの使用を参照してください。