簡體   English   中英

kinesis 數據流消費者的高可用性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM