2017-09-11 57 views
0

我目前正在Golang版本中編寫簡單的Kinesis客戶端庫(KCL)。我希望爲我的簡單KCL提供的功能之一是跨多個記錄處理器和EC2實例的負載均衡分片。例如,我有兩個記錄處理器(將在單獨的EC2實例中運行)和四個Kinesis碎片。負載平衡功能將允許每個記錄處理器處理兩個Kinesis碎片如何在多個記錄處理器之間平衡kinesis碎片?

我讀到Java KCL實現了這一點,但我無法在庫中找到實現。我的問題是我將如何在Golang中實現此功能?謝謝。

回答

0

在您開始編寫自己的客戶端...它看起來像有一些人誰已經做到了這一點:

你有另一種選擇是KCL MultiLangDaemon。你可以安裝一個小型的runner程序,爲你做所有的平衡,然後你只聽守護進程發送給你的消息並將它們提交回去。

https://github.com/awslabs/amazon-kinesis-client#amazon-kcl-support-for-other-languages

+0

謝謝你的資源,瑞安。但你在這裏沒有回答我的問題。 –

0

KCL已經做負載均衡爲您服務。

下面是今天如何工作的基本描述(記住這僅僅是基礎,並隨時更改,如亞馬遜提高了邏輯):

  • 當工人(可處理多個碎片)啓動時,它會檢查一箇中央DynamoDB數據庫,該數據庫中的工作人員擁有這些碎片(必要時可創建該數據庫)。這是「租賃」表。
    • A「租賃」是工人和碎片
    • 工人將處理碎片它擁有爲
    • 租約未到期租約到期的記錄,如果操作者未發出的「心跳」的之間的關係其到期前的租賃(通常每隔幾秒鐘) - 此心跳基本上會更新DDB記錄
  • 它檢查的Kinesis流,用於其碎片是可用的,並且如果需要的話
  • 如果任何租約到期更新表,工人將試圖獲得租約的所有權 - 在數據庫級別,使用shardId作爲密鑰並在那裏寫入workerId。
  • 如果一個工人啓動並且所有碎片都已被佔用,它會檢查是否有「餘額」 - 如果它檢測到不平衡(即:「我擁有0個碎片並且其他工人擁有10個碎片」),它會啓動一個「偷碎片」協議 - 老工人停止處理該碎片,以及新的工作開始

你當然可以自由檢查GitHub上的KCL的源代碼:https://github.com/awslabs/amazon-kinesis-client - 希望這個解釋給你更多關於如何理解KCL並使其適應您的需求的上下文。