Sample
Ec2 Instance(Consumer)
|
+- Worker +
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
Ec2 Instance(Consumer)
|
+- Worker +
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
|- Processor <-- shard (shard 的 seqId, partictionId 會被記錄到 DynamoDB)
Concept
每一台 Ec2 可視為一個 Consumer,每個 Consumer 會有個 Worker 機制把 shard Stream 分配給 Processor,當 shard 的數量調大的時候,KCL(Kinesis Clinet Libary) 裡面的 IRecordProcessorFactory 就會自動建立對應, shard 的 processor。
當有新的 Consumer 被建立時,AWS 會自動做 loadbalance,去平衡每個 worker 要負責的 shards,這時候 Processor 裡面的 shutdown 會被執行。
切記 Consumer 不應該開的比 shard 的數量還大。
沒有留言:
張貼留言