閱讀862 返回首頁    go 魔獸


擴容縮容Merge/Split__高級特性_DataHub實時數據通道_大數據計算服務-阿裏雲

DataHub 支持為Topic動態擴容/縮容,通過SplitShard/MergeShard來實現。

使用場景

Datahub具有服務彈性伸縮功能,用戶可根據實時的流量調整Shard數量,來應對突發性的流量增長或達到節約資源的目的。

例如在雙11大促期間,大部分Topic數據流量會激增,平時的Shard數量可能完全無法滿足這樣的流量增長,此時可以對其中一些Shard進行Split操作,一變二,二變四,最大可擴容至256個Shard,按目前的流控限製足以達到256MB/s的流量。

在雙11大促後,流量下降,多餘的Shard會占用沒有必要的quota,因此可以進行Merge操作,每兩個Shard合並為一個,直到合適為止。

Shard屬性

可以通過ListShard接口獲取所有Shard的信息,每個Shard擁有如下屬性, 樣例:

  1. {
  2. "ShardId": "string",
  3. "State": "string",
  4. "ClosedTime": uint64,
  5. "BeginHashKey": "string",
  6. "EndHashKey": "string",
  7. "ParentShardIds": [string,string,],
  8. "LeftShardId": "string",
  9. "RightShardId": "string"
  10. }

SplitShard

指定一個128 bit的HashKey以及一個ShardID,通過SDK或者Console進行操作.

SplitShard操作會將指定的Shard分裂為兩個ChildShard,並且返回ChildShard的Id以及Key信息,同時Parent Shard會被置為CLOSED狀態。

例如,Split之前存在如下一個Shard:

  1. ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000 EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

通過SDK進行Split操作:

  1. String shardId = "0";
  2. SplitShardRequest req = new SplitShardRequest(projectName, topicName, shardId, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
  3. SplitShardResult resp = client.splitShard(req);

最終將會變成如下3個Shard:

  1. ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000 EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  2. ShardId:1 Status:ACTIVE BeginHashKey:00000000000000000000000000000000 EndHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  3. ShardId:2 Status:ACTIVE BeginHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

MergeShard

指定兩個相鄰的ShardID,通過SDK或者Console進行操作.

MergeShard操作會將指定的兩個Shard合並為一個新的Shard,並且返回新Shard的ID以及Key信息,同時兩個ParentShard會被置為為CLOSED狀態。

例如,Merge之前存在如下兩個Shard:

  1. ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000 EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
  2. ShardId:1 Status:ACTIVE BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

通過SDK進行Merge操作:

  1. String shardId = "0";
  2. String adjacentShardId = "1";
  3. MergeShardRequest req = new MergeShardRequest(projectName, topicName, shardId, adjacentShardId);
  4. MergeShardResult resp = client.mergeShard(req);

最終將會變成如下3個Shard:

  1. ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000 EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
  2. ShardId:1 Status:CLOSED BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  3. ShardId:2 Status:ACTIVE BeginHashKey:00000000000000000000000000000000 EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

注意事項

當Shard進行Merge/Split後會被置為CLOSED狀態,該狀態可以繼續消費讀取數據,但是不可寫入,也不可再次進行Merge/Split操作,當到達Topic的lifecycle後該Shard會被回收。

如果配置了Connector,對應任務會在複製完該Shard數據後自動掛起,待該Shard回收後會自動刪除任務。

Topic在進行Merge/Split後新的Shard需要等待變為ACTIVE狀態後方可正常使用,通常不會超過5秒。

最後更新:2016-11-23 18:01:58

  上一篇:go 數據歸檔MaxCompute__高級特性_DataHub實時數據通道_大數據計算服務-阿裏雲
  下一篇:go 多方式寫入__高級特性_DataHub實時數據通道_大數據計算服務-阿裏雲