2017-09-11 4 views
0

私は現在、Golang版でシンプルなKinesis Client Library(KCL)を作成しています。私が私の単純なKCLに求めている機能の1つは、複数のレコードプロセッサとEC2インスタンスにわたるシャードのロードバランシングです。たとえば、私は別のEC2インスタンスで動作する2つのレコードプロセッサと4つのKinesisシャードを持っています。負荷分散機能により、各レコードプロセッサはキネシスシャードを処理できます。いくつかのレコードプロセッサでキネシスシャードのバランスをとるにはどうすればいいですか?

Java KCLはこれを実装していますが、ライブラリの実装が見つかりません。私の質問は、Golangでこの機能を実装する方法です。ありがとうございました。

あなたが持っている別のオプションは次のとおりです。すでにこれを行っている何人かの人々があるように見える

答えて

0

独自のクライアントを書き始める前に... KCL MultiLangDaemon。バランスのとれた小さなランナープログラムをインストールして、デーモンから送られたメッセージを聞いてそれらをコミットするだけです。 KCLはすでに負荷があなたのためにバランスをとるん

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

+0

リソースありがとう、Ryan。しかし、あなたはここで私の質問に答えなかった。 –

0

。作業員は、(複数の破片を処理することができる)場合は

  • :ここ

    は、それが今日どのように動作するかの基本的な説明(これは単なる基本で、Amazonはロジックを改善して変更されることがあります覚えておいてください)です起動すると、ワーカーが所有しているシャードが必要な場合、そのデータベースを作成する中央のDynamoDBデータベースがチェックされます。これは「リース」テーブルです。

    • A「リース」は労働者と労働者は、「ハートビート」のために放出されていない場合
    • 労働者はそれが
    • リースの期限が切れていないリースを所有している破片のレコードに期限切れを処理します
    • シャード間の関係であります有効期限が切れる前にリースが(通常は数秒ごと) - このハートビートは、本質的にDDBレコード
  • を更新これは、破片が利用可能なキネシス・ストリームをチェックし、
  • 必要に応じて、任意のリース期限が切れている場合は、テーブルを更新します働く人リースの所有権を取得しようとします - データベースレベルでは、shardIdをキーとして使用し、そこにworkerIDを書き込みます。
  • 労働者が既に始まって、すべてのシャードがすでに取られている場合、「バランス」が何であるかをチェックします。 - 不均衡を検出した場合(つまり、「自分が0個のシャードを所有し、他の一部の労働者が10個のシャードを所有しています)プロトコル「シャードを盗む」 - 古い労働者は、そのシャードの処理を停止し、新しい労働者が

を開始もちろんgithubの上のKCLのためのソースコードを調べるのは自由です:https://github.com/awslabs/amazon-kinesis-clientを - うまくいけば、この説明はあなたを与えますKCLを理解し、それをあなたのニーズに適応させるためのより多くの状況。

関連する問題