[英]high availability for kinesis data stream consumer
我想制作以下用於數據發送的架構。
生產者 --> Kinesis 數據流 --> 消費者
消費者服務器可以關閉,因此我認為至少應該有2個消費者。 這樣對嗎?
當一個數據流有兩個消費者時,有沒有辦法處理每個消費者一半的數據? 據我所知,沒有辦法。 如果每個消費者都消費相同的數據,那就是浪費時間,浪費成本。 因為我只是為了高可用性而創建了 2 個消費者。 (用於故障轉移)
在 web-was 架構中,ELB 或 L4 可以幫助通過負載平衡向每個服務器發送一半數據。
我想知道 kinesis 數據流的類似方式。
當一個數據流有兩個消費者時,有沒有辦法處理每個消費者一半的數據? 據我所知,沒有辦法。
你錯了。
您應該閱讀Kinesis 開發人員指南或更具體地說https://docs.aws.amazon.com/streams/latest/dev/kinesis-record-processor-scaling.html 。
運動流由 1 個或多個分片組成。 每個分片都可以獨立處理。
引用上面鏈接的例子,
以下示例說明了 KCL 如何幫助您處理縮放和重新分片:
例如,如果您的應用程序在一個 EC2 實例上運行,並且正在處理一個具有四個分片的 Kinesis 數據流。 這個實例有一個 KCL 工作線程和四個記錄處理器(每個分片一個記錄處理器)。 這四個記錄處理器在同一進程中並行運行。
接下來,如果您擴展應用程序以使用另一個實例,您將有兩個實例處理一個具有四個分片的流。 當 KCL 工作器在第二個實例上啟動時,它會與第一個實例進行負載平衡,以便每個實例現在處理兩個分片。
如果您隨后決定將四個碎片分成五個碎片。 KCL 再次協調跨實例的處理:一個實例處理三個分片,另一個處理兩個分片。 合並分片時會發生類似的協調。
您只需要確保兩個 Kinesis Consumer 應用程序(在不同機器上運行)都配置有相同的應用程序名稱。 KCL 跟蹤應用程序名稱、分片檢查點作為 Dynamo DB 表。 此 dynamo db 表還用於定義使用者應用程序之間的分片所有權。
因此,如果您的 Kinesis Stream 具有 4 個分片和兩個在不同機器上運行的消費者應用程序。 然后分片平衡將按以下方式完成。
----Shard1---> application-instance-1
----Shard2---> application-instance-1
----Shard3---> application-instance-2
----Shard4---> application-instance-2
假設application-instance-1
出現故障。 然后application-instance-2
將開始處理所有分片。
----Shard1---> application-instance-2
----Shard2---> application-instance-2
----Shard3---> application-instance-2
----Shard4---> application-instance-2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.