簡體   English   中英

Kinesis如何實現Kafka風格的消費者群體?

[英]How does Kinesis achieve Kafka style Consumer Groups?

在Kafka中,我可以將我的主題分成許多分區。 我不能擁有比Kafka中的分區更多的消費者,因為分區用作擴展主題的一種方式。 如果我有更多的負載,我可以增加分區的數量,這將允許我增加消費者的數量,這將允許我在給定主題上有更多的線程/進程處理。

在卡夫卡,有一個消費者群體的概念。 如果我們在一個主題上有10個消費者組,則每個消費者組將有機會處理主題中的每條消息。 消費者群體仍然利用分區的可擴展性(即每個消費者群體可以擁有最多'n'個消費者,其中'n'是主題上的分區數量)。 這是卡夫卡的美感,可擴展性和多聲道閱讀是兩個獨立的概念,有兩個單獨的旋鈕可以轉動。

在Kinesis中,我們被告知,如果您使用Kinesis Library Client,您可以通過定義不同的Kinesis應用程序獲得與使用者組相同的功能。 換句話說,我們可以讓不同的Kinesis應用程序獨立地流式傳輸來自同一流和不同時間的所有記錄。

我們還被告知“Amazon Kinesis客戶端庫(KCL)會自動為每個Amazon Kinesis應用程序創建一個Amazon DynamoDB表,以跟蹤和維護狀態信息,例如重新分片事件和序列號檢查點。”

好的,所以我准備開始閱讀這里的KCL代碼 ,但是我希望有人可以回答這些問題,以節省一些時間。

  1. KCL如何實際做到這一點?
  2. 有沒有解釋過程的圖表?
  3. 如果我在所有先前的Kinesis應用程序已經生成並使用了記錄后啟動了新的Kinesis應用程序(MyKinesisApp1),那么新的Kinesis應用程序(MyKinesisApp1)是否仍有機會使用該記錄? 換句話說,Kinesis在處理完成后會從其流中刪除記錄,還是將記錄留在那里7天,無論如何?

在這里看到了這個問題但它沒有回答我的問題。 特別是第三個問題! 此外,這個問題直接比較了兩種類似的技術。 它將幫助了解卡夫卡的人,更快地學習Kinesis。

  1. 在KCL配置中,有一個“appName”部分,它對應於“Application Name”,與Kafka中的“consumer group”相同。 對於每個使用者組(即Kinesis Streams Consumer Application),都有一個DynamoDB表。 你可以在這里看到一個示例DynamoDB(KCL appName是'quickstats-development'): AWS Kinesis leaseOwner confusion

  2. 不,據我所知,沒有。 “Kinesis Streams”類似於Kafka,但除此之外,沒有太多的圖形表示。

  3. 是。 每個Kafka Consumer-Group都表示為Kinesis中的不同DynamoDB表。 這樣,不同的Kinesis Consumer Applications可以獨立地使用相同的記錄。 Kinesis中的檢查點是Kafka的Offset值。 DynamoDB中的檢查點是Kinesis分片中讀取點的光標。 閱讀此答案的類似示例: https//stackoverflow.com/a/42833193/1622134

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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