Operasi shard
DataHub menyediakan dua mode pengelolaan shard: skalabilitas horizontal shard dan pemisahan serta penggabungan (split and merge). Pilih mode yang sesuai dengan kebutuhan Anda:
Skalabilitas horizontal shard tidak mendukung penggabungan shard, sedangkan split and merge mendukungnya.
Untuk mengonsumsi topik menggunakan protokol Kafka, aktifkan skalabilitas horizontal shard.
Setelah mengaktifkan skalabilitas horizontal shard, fitur rentang kunci (key range) tidak tersedia. Nilai
BeginHashKeydanEndHashKeyidentik di semua shard, sehingga penulisan berdasarkanHashKeyatauPartitionKeytidak didukung. Implementasikan routing berbasis hash secara kustom pada lapisan aplikasi, dan pertimbangkan bahwa operasi penskalaan dapat mengubah shard target untuk penulisan Anda.
Mode skalabilitas horizontal shard
DataHub mendukung skalabilitas horizontal untuk shard topik. Aktifkan mode auto-scaling shard saat membuat topik untuk menggunakan fitur ini.
Langkah 1
Aktifkan toggle Shard Auto-scaling di bagian bawah kotak dialog New Topic.
Langkah 2
Klik ikon edit untuk mengubah jumlah shard.
Pada halaman detail topik, jumlah shard saat ini ditampilkan di atas tab Shard list. Klik ikon edit di sebelahnya untuk mengubah jumlah tersebut.
Langkah 3
Lihat shard setelah penskalaan. Shard list menampilkan jumlah shard yang telah diperbarui, dan status setiap shard baru adalah ACTIVE.
Pemisahan dan penggabungan shard
DataHub memungkinkan Anda menskalakan jumlah shard dalam suatu topik naik atau turun menggunakan operasi SplitShard dan MergeShard.
Kasus Penggunaan
Gunakan split and merge untuk merespons perubahan lalu lintas tanpa over-provisioning. Misalnya, selama acara promosi besar, lalu lintas data dapat melonjak dan jumlah shard saat ini mungkin tidak mencukupi. Gunakan operasi SplitShard untuk menskalakan ke atas. Anda dapat meningkatkan jumlah shard hingga maksimum 256, mendukung throughput hingga 1.280 MB/detik berdasarkan batas pengendalian aliran saat ini. Setelah acara berakhir dan lalu lintas kembali normal, gabungkan shard yang berdekatan menggunakan operasi MergeShard untuk mengurangi jumlah shard dan mereklaim kapasitas.
Shard properties
API ListShard mengembalikan informasi tentang semua shard dalam suatu topik. Setiap shard memiliki properti berikut:
{
"ShardId": "string",
"State": "string",
"ClosedTime": uint64,
"BeginHashKey": "string",
"EndHashKey": "string",
"ParentShardIds": [string,string,],
"LeftShardId": "string",
"RightShardId": "string"
}
SplitShard
Tentukan kunci hash 128-bit dan ID shard—baik melalui SDK maupun Konsol. Operasi SplitShard membagi shard yang ditentukan menjadi dua shard anak dan mengembalikan ID serta rentang kuncinya. Shard asli (induk) kemudian masuk ke status CLOSED.
Sebagai contoh, mulai dari shard berikut:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Untuk membaginya menggunakan SDK:
String shardId = "0";
SplitShardRequest req = new SplitShardRequest(projectName, topicName, shardId, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
SplitShardResult resp = client.splitShard(req);
Setelah pemisahan, Anda memiliki tiga shard:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ShardId:2 Status:ACTIVE BeginHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Menggabungkan shard
Tentukan dua ID shard yang berdekatan—baik melalui SDK maupun Konsol. Operasi MergeShard menggabungkan kedua shard tersebut menjadi satu shard baru dan mengembalikan ID serta rentang kuncinya. Kedua shard induk kemudian masuk ke status CLOSED.
Kedekatan shard
Dua shard dianggap berdekatan jika rentang kunci hash-nya membentuk rangkaian kontigu tanpa celah. Upaya menggabungkan shard yang tidak berdekatan akan gagal.
Sebagai contoh, mulai dari dua shard berikut:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Untuk menggabungkannya menggunakan SDK:
String shardId = "0";
String adjacentShardId = "1";
MergeShardRequest req = new MergeShardRequest(projectName, topicName, shardId, adjacentShardId);
MergeShardResult resp = client.mergeShard(req);
Setelah penggabungan, Anda memiliki tiga shard:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:CLOSED BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:2 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Catatan penggunaan
Setelah split atau merge, shard induk masuk ke status CLOSED dan melewati siklus hidup berikut:
CLOSED: Shard tidak lagi menerima penulisan, dan Anda tidak dapat melakukan operasi split atau merge lain padanya. Data yang ada tetap dapat dibaca oleh konsumen.
Reclaimed: Setelah periode
lifecycletopik berakhir, sistem secara otomatis mereklaim shardCLOSEDdan semua datanya menjadi tidak dapat diakses. Jika konektor dikonfigurasi, tugasnya akan secara otomatis dihentikan setelah selesai mereplikasi data dari shardCLOSED, dan tugas tersebut dihapus setelah shard direklaim.
Shard baru harus mencapai status ACTIVE sebelum menerima bacaan atau tulisan. Proses ini biasanya memakan waktu kurang dari 5 detik. Untuk memastikan shard siap digunakan, panggil ListShard dan periksa apakah nilai bidang State-nya adalah ACTIVE.