Operasi shard
Operasi shard mencakup dua mode: horizontal scaling dan split/merge. Setiap mode sesuai untuk skenario yang berbeda:
Mode horizontal scaling tidak mendukung penggabungan shard. Untuk menggabungkan shard, Anda harus menggunakan mode split/merge.
Untuk mengonsumsi topik menggunakan Kafka, Anda harus mengaktifkan horizontal shard scaling.
Saat horizontal shard scaling diaktifkan, rentang kunci tidak tersedia karena semua shard memiliki BeginHashKey dan EndHashKey yang sama. Hal ini mencegah penulisan data menggunakan HashKey dan PartitionKey. Anda harus mengimplementasikan operasi modulo hash kustom pada lapisan aplikasi. Perhatikan bahwa scale-out mengubah shard target untuk penulisan.
Mode horizontal shard scaling
DataHub mendukung horizontal scaling untuk shard topik. Anda dapat mengaktifkan mode penskalaan shard saat membuat topik.
Langkah 1
Aktifkan mode penskalaan shard.
Langkah 2
Klik ikon yang ditunjukkan pada gambar berikut untuk mengubah jumlah shard.
Langkah 3
Lihat shard setelah proses horizontal scaling selesai.
Pemisahan dan penggabungan shard
DataHub mendukung scale-out dan scale-in dinamis untuk topik melalui operasi SplitShard dan MergeShard.
Skenario
DataHub menyediakan elastic scaling yang memungkinkan Anda menyesuaikan jumlah shard berdasarkan traffic real-time guna mengatasi lonjakan traffic mendadak atau menghemat sumber daya. Misalnya, selama promosi penjualan besar-besaran, traffic data untuk banyak topik meningkat tajam. Jumlah shard yang ada mungkin tidak cukup untuk menangani lonjakan tersebut. Anda dapat membagi shard untuk menambah jumlah total hingga maksimal 256 shard. Konfigurasi ini mendukung traffic hingga 1.280 MB/detik berdasarkan batas throttle saat ini. Setelah promosi berakhir dan traffic menurun, shard tambahan akan mengonsumsi kuota yang tidak perlu. Anda kemudian dapat menggabungkan shard untuk mengurangi jumlahnya ke angka yang sesuai.
Properti shard
Anda dapat menggunakan API ListShard untuk mengambil informasi tentang semua shard. Setiap shard memiliki properti berikut:
{
"ShardId": "string",
"State": "string",
"ClosedTime": uint64,
"BeginHashKey": "string",
"EndHashKey": "string",
"ParentShardIds": [string,string,],
"LeftShardId": "string",
"RightShardId": "string"
}SplitShard
Untuk melakukan operasi pemisahan, tentukan HashKey 128-bit dan ShardID. Operasi ini dapat dilakukan menggunakan kit pengembangan perangkat lunak (SDK) atau konsol. Operasi SplitShard membagi shard yang ditentukan menjadi dua shard anak dan mengembalikan ID shard anak beserta informasi kuncinya. Shard induk kemudian diatur ke status CLOSED. Sebagai contoh, asumsikan shard berikut ada sebelum pemisahan:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAnda dapat melakukan operasi Split menggunakan SDK:
String shardId = "0";
SplitShardRequest req = new SplitShardRequest(projectName, topicName, shardId, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
SplitShardResult resp = client.splitShard(req);Hasilnya adalah tiga shard berikut:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ShardId:2 Status:ACTIVE BeginHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFMergeShard
Untuk melakukan operasi penggabungan, tentukan dua ShardID yang bersebelahan. Operasi ini dapat dilakukan menggunakan SDK atau konsol. Operasi MergeShard menggabungkan dua shard yang ditentukan menjadi satu shard baru dan mengembalikan ID shard baru beserta informasi kuncinya. Kedua shard induk kemudian diatur ke status CLOSED. Sebagai contoh, asumsikan dua shard berikut ada sebelum penggabungan:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAnda dapat melakukan operasi Merge menggunakan SDK:
String shardId = "0";
String adjacentShardId = "1";
MergeShardRequest req = new MergeShardRequest(projectName, topicName, shardId, adjacentShardId);
MergeShardResult resp = client.mergeShard(req);Hasilnya adalah tiga shard berikut:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:CLOSED BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:2 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCatatan
Setelah shard digabung atau dibagi, statusnya diatur menjadi CLOSED. Anda masih dapat membaca data dari shard dengan status CLOSED, tetapi tidak dapat menulis ke dalamnya atau melakukan operasi penggabungan atau pemisahan lain padanya. Shard tersebut akan diklaim ulang setelah siklus hidup topik berakhir. Jika konektor dikonfigurasi, tugas terkait akan secara otomatis dihentikan setelah selesai menyalin data dari shard tersebut, lalu dihapus secara otomatis setelah shard diklaim ulang. Setelah operasi penggabungan atau pemisahan, shard baru harus berstatus ACTIVE sebelum dapat digunakan. Proses ini biasanya memerlukan waktu kurang dari 5 detik.