シャード操作
DataHub は、シャードを管理するために、シャードの水平スケーリング、および分割と結合の 2 つのモードを提供します。要件に応じて選択してください:
シャードの水平スケーリングではシャードの結合はサポートされていませんが、分割と結合ではサポートされています。
Kafka プロトコルを使用してトピックをコンシュームするには、シャードの水平スケーリングを有効にします。
シャードの水平スケーリングを有効にすると、キー範囲機能は使用できなくなります。 すべてのシャードで
BeginHashKeyとEndHashKeyの値が同一になるため、HashKeyまたはPartitionKeyに基づく書き込みはサポートされません。 アプリケーションレイヤーでカスタムのハッシュベースのルーティングを実装し、スケーリング操作によって書き込みのターゲットシャードが変更される可能性があることを考慮してください。
シャードの水平スケーリングモード
DataHub は、トピックのシャードに対する水平スケーリングをサポートしています。この機能を使用するには、トピックの作成時にシャードの自動スケーリングモードを有効にする必要があります。
ステップ 1
[新しいトピック] ダイアログボックスの下部にある [シャードの自動スケーリング] トグルを有効にします。
ステップ 2
編集アイコンをクリックして、シャード数を変更します。
トピック詳細ページでは、現在のシャード数が [シャード一覧] タブの上に表示されます。その横にある編集アイコンをクリックして、数を変更します。
ステップ 3
スケーリング後のシャードを確認します。 [シャード一覧] には更新されたシャード数が表示され、各新しいシャードのステータスは アクティブ になります。
シャードの分割と結合
DataHub では、SplitShard と MergeShard の操作を使用して、トピックのシャード数を増減させることができます。
ユースケース
分割とマージを使用して、過剰プロビジョニングすることなくトラフィックの変動に対応します。たとえば、大規模な販売イベント中にデータトラフィックが急増し、現在のシャード数が不十分になる可能性があります。SplitShard 操作を使用してスケールアップします。シャード数は最大 256 まで増やすことができ、現在のフロー制御の制限下では最大 1,280 MB/s のスループットがサポートされます。イベント後、トラフィックが通常に戻ったら、MergeShard 操作を使用して隣接するシャードをマージし、シャード数を減らしてキャパシティを解放します。
シャードのプロパティ
ListShard API は、トピック内のすべてのシャードに関する情報を返します。各シャードには次のプロパティがあります:
{
"ShardId": "string",
"State": "string",
"ClosedTime": uint64,
"BeginHashKey": "string",
"EndHashKey": "string",
"ParentShardIds": [string,string,],
"LeftShardId": "string",
"RightShardId": "string"
}
SplitShard
SDK またはコンソールを使用して、128 ビットのハッシュキーとシャード ID を指定します。SplitShard 操作は、指定されたシャードを 2 つの子シャードに分割し、それらの ID とキー範囲を返します。元の (親) シャードは、その後 CLOSED 状態に移行します。
たとえば、次のシャードから始めます:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
SDK を使用して分割するには:
String shardId = "0";
SplitShardRequest req = new SplitShardRequest(projectName, topicName, shardId, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
SplitShardResult resp = client.splitShard(req);
分割後、シャードは 3 つになります:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ShardId:2 Status:ACTIVE BeginHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
シャードの結合
SDK またはコンソールを使用して、隣接する 2 つのシャード ID を指定します。MergeShard オペレーションは、2 つのシャードを 1 つの新しいシャードに結合し、その ID とキー範囲を返します。その後、両方の親シャードは CLOSED 状態になります。
シャードの隣接性
ハッシュキー範囲がギャップなく連続したセットを形成する場合、その 2 つのシャードは隣接しています。隣接していないシャードを結合しようとすると失敗します。
たとえば、次の 2 つのシャードから始めます:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
SDK を使用してそれらを結合するには:
String shardId = "0";
String adjacentShardId = "1";
MergeShardRequest req = new MergeShardRequest(projectName, topicName, shardId, adjacentShardId);
MergeShardResult resp = client.mergeShard(req);
結合後、シャードは 3 つになります:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:CLOSED BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:2 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
注意事項
分割またはマージ後、親シャードは CLOSED 状態に移行し、次のライフサイクルに進みます:
クローズ:シャードは書き込みを受け付けなくなり、そのシャードに対して再度分割または結合の操作を実行できません。コンシューマーは既存のデータを引き続き読み取れます。
回収済み:トピックの
lifecycle期間が満了すると、システムは自動的にCLOSED状態のシャードを回収し、その中のすべてのデータにアクセスできなくなります。コネクタが設定されている場合、そのタスクはCLOSED状態のシャードからのデータ複製を完了すると自動的に一時停止され、シャードが回収された後に削除されます。
新しいシャードは、読み取りまたは書き込みを受け入れる前に ACTIVE 状態になる必要があります。通常、これにかかる時間は 5 秒未満です。シャードが準備できていることを確認するには、ListShard を呼び出し、その State フィールドが ACTIVE であることを確認してください。