Cygnusの設定例

コンテンツ :

基本構成

基本的な構成は、単一のリスナ/ソースと、一度 NGSI 通知がソースで処理されると取得された同じ内部 NGSI イベントのコピーを受信する1つ以上のシンクを含みます。

最も単純なシナリオ

単一のソース、単一のチャネル、および単一のシンクに基づく Cygnus エージェント。

+-----------------------------------+
|                               JVM |
|  +-----+     +----+     +------+  |
|  | src |-----| ch |-----| sink |  |
|  +-----+     +----+     +------+  |
+-----------------------------------+

そのエージェント設定ファイルは普通のものです :

$ cat /usr/cygnus/conf/agent_simplest.conf
# declarations
cygnus-ngsi.sources = src
cygnus-ngsi.sinks = sink
cygnus-ngsi.channels = ch

# sources
cygnus-ngsi.sources.src.type = http
cygnus-ngsi.sources.src.channels = ch
cygnus-ngsi.sources.src.port = 5050
cygnus-ngsi.sources.src...

# sinks
cygnus-ngsi.sinks.sink.type = ...
cygnus-ngsi.sinks.sink.channel = ch
cygnus-ngsi.sinks.sink...

# channels
cygnus-ngsi.channels.ch.type = ...
cygnus-ngsi.channels.ch...

トップ

複数の永続性バックエンドを含むシナリオ

前の例と同様に、この場合、宛先のバックエンドごとに1つのチャネルと1つのシンクがあります。

+-------------------------------------+
|                                 JVM |
|              +-----+     +-------+  |
|        +-----| ch1 |-----| sink1 |  |
|        |     +-----+     +-------+  |
|  +-----+     +-----+     +-------+  |
|  | src |-----| ch2 |-----| sink2 |  |
|  +-----+     +-----+     +-------+  |
|        |       ...          ...     |
|        |     +-----+     +-------+  |
|        +-----| ch3 |-----| sink3 |  |
|              +-----+     +-------+  |
+-------------------------------------+

そのエージェント構成ファイルは次のとおりです :

$ cat /usr/cygnus/conf/agent_multibackend.conf
# declarations
cygnus-ngsi.sources = src
cygnus-ngsi.sinks = sink1 sink2 ... sinkN
cygnus-ngsi.channels = ch1 ch2 ... chN

# sources
cygnus-ngsi.sources.src.type = http
cygnus-ngsi.sources.src.channels = ch1 ch2 ... chN
cygnus-ngsi.sources.src.port = 5050
cygnus-ngsi.sources.src...

# sinks
cygnus-ngsi.sinks.sink1.type = ...
cygnus-ngsi.sinks.sink1.channel = ch1
cygnus-ngsi.sinks.sink1...

cygnus-ngsi.sinks.sink2.type = ...
cygnus-ngsi.sinks.sink2.channel = ch2
cygnus-ngsi.sinks.sink2...

...

cygnus-ngsi.sinks.sinkN.type = ...
cygnus-ngsi.sinks.sinkN.channel = chN
cygnus-ngsi.sinks.sinkN...

# channels
cygnus-ngsi.channels.ch1.type = ...
cygnus-ngsi.channels.ch1...

cygnus-ngsi.channels.ch2.type = ...
cygnus-ngsi.channels.ch2...

...

cygnus-ngsi.channels.chN.type = ...
cygnus-ngsi.channels.chN...

同じバックエンドのそれぞれに同じ NGSI コンテキスト・データを複製させたい場合は、マルチバック・エンド構成を使用してください。これは、内部の NGSI イベントをソースに接続されているすべてのチャネルにレプリケートするデフォルトのチャネル・セレクタのおかげで可能です。このようなレプリケーションは、FIWARE service 内で所有する FIWARE service paths の数、または所有しているエンティティ・タイプの数とは無関係に常に実行されます。

注意 : Flume のレプリケート・チャネル・セレクタは、イベントのコピーを構成されたチャネルのいずれかに入れることができない場合に失敗するように設計されています。この振る舞いを避けたいのであれば、セレクタが複製していると明示した後で、すべてのチャネルをオプションのチャネルとして設定してください。

cygnus-ngsi.sources.src.channels = ch1 ch2 ... chN
cygnus-ngsi.sources.src.selector.type = replicating
cygnus-ngsi.sources.src.selector.optional = ch1 ch2 ... chN

トップ

高度な設定

複数の FIWARE services を含むシナリオ

Cygnus NGSI は、多くの FIWARE コンポーネントと同様に、FIWARE service コンセプトによりマルチテナンシーをネイティブにサポートしています。 Cygnus によって消費される NGSI 通知には、サービスごとに専用の MySQL/MongoDB/STHデータベース、HDFS ユーザ空間、または CKAN organization の形式で履歴バックエンドのコンテキスト情報をセグメント化するために使用されるような値を持つ HTTP ヘッダーが含まれています。

そのようなセグメンテーションは、いくつかのスーパー・ユーザの資格情報で構成されている場合、単一のシンクによって完全に実行できます。シンクは、データベース、HDFSユーザ空間、CKAN organization などを作成できるスーパー・ユーザとして認証されたバックエンド API とやりとりします。クライアントがデータをクエリできるようにするには、特定のバックエンド・ユーザを有効にすることだけです。

それにもかかわらず、たとえばサービスごとにシンクを追加してパフォーマンスを向上させたい場合はどうなりますか? または、サービスごとに名前マッピングを適用することを決定したい場合は? そのような場合、単一のスーパー・シンクでは不十分です。

次のセクションでは、高度な設定を実装することで、これを達成する方法について説明します。

トップ

複数のエージェント

最初の、そして明らかなソリューションは、複数の Cygnus エージェント(複数の JVM プロセス、それぞれが専用の TCP ポートで待機する)を、FIWARE service ごとに1つずつインスタンス化することです。このソリューションは、各 FIWARE service が特定の名前マッピング、専用シンクまたはシンクなどを持つことを保証します。

+-----------------------------------------------------+
|                                                JVM1 |
|  +-----------+     +----------+     +------------+  |
|  | src-svc-1 |-----| ch-svc-1 |-----| sink-svc-1 |  |
|  +-----------+     +----------+     +------------+  |
+-----------------------------------------------------+

+-----------------------------------------------------+
|                                                JVM2 |
|  +-----------+     +----------+     +------------+  |
|  | src-svc-2 |-----| ch-svc-2 |-----| sink-svc-2 |  |
|  +-----------+     +----------+     +------------+  |
+-----------------------------------------------------+

                           ...

+-----------------------------------------------------+
|                                                JVMN |
|  +-----------+     +----------+     +------------+  |
|  | src-svc-N |-----| ch-svc-N |-----| sink-svc-N |  |
|  +-----------+     +----------+     +------------+  |
+-----------------------------------------------------+

<id> と呼ばれるクライアント/FIWARE service ごと、agent_<id>.conf 構成ファイルとが必要です :

$ cat /usr/cygnus/conf/agent_<id>.conf
# declarations
cygnus-ngsi-<id>.sources = src-svc-<id>
cygnus-ngsi-<id>.sinks = sink-svc-<id>
cygnus-ngsi-<id>.channels = ch-svc-<id>

# sources
cygnus-ngsi-<id>.sources.src-svc-<id>.type = http
cygnus-ngsi-<id>.sources.src-svc-<id>.channels = ch-svc-<id>
cygnus-ngsi-<id>.sources.src-svc-<id>.port = <svc-port>
cygnus-ngsi-<id>.sources.src-svc-<id>...

# sinks
cygnus-ngsi-<id>.sinks.sink-svc-<id>.type = ...
cygnus-ngsi-<id>.sinks.sink-svc-<id>.channel = ch-svc-<id>
cygnus-ngsi-<id>.sinks.sink-svc-<id>...

# channels
cygnus-ngsi-<id>.channels.ch-svc-<id>.type = ...
cygnus-ngsi-<id>.channels.ch-svc-<id>...

マルチ・インスタンスのサポートは、Cygnus をサービスとして実行するときに使用される cygnus_instance_<id>.conf 設定ファイルを通して、Cygnus の最初から利用できます :

$ cat /usr/cygnus/conf/cygnus_instance_<id>.conf
CYGNUS_USER=cygnus
CONFIG_FOLDER=/usr/cygnus/conf
CONFIG_FILE=/usr/cygnus/conf/agent_<id>.conf
AGENT_NAME=cygnus-ngsi-<id>
LOGFILE_NAME=cygnus_<id>.log
ADMIN_PORT=<client_admin_port>
POLLING_INTERVAL=30

代わりに、このコマンドを必要な回数実行することで、複数のインスタンスの Cygnus を単一のプロセス(single processes)として実行することもできます :

$ APACHE_FLUME_HOME/bin/cygnus-flume-ng agent --conf APACHE_FLUME_HOME/conf -f APACHE_FLUME_HOME/conf/agent_<id>.conf -n <agent_name> -Dflume.root.logger=INFO,console -Duser.timezone=UTC [-p <mgmt-if-port>] [-g <web-app-port>] [-t <polling-interval>]

ハードウェアと公開 TCP ポートに制限がない場合、この種の高度な構成を使用してください。各 JVM には CPU とメモリに関して独自のリソースが必要であることに注意してください。

トップ

単一エージェント、複数のソース

前者に関しては、1つのエージェント(1つの JVM プロセス)と複数の HTTP ソース(1つはFIWARE service ごとに1つ)を持つことです。

+-----------------------------------------------------+
|                                                 JVM |
|  +-----------+     +----------+     +------------+  |
|  | src-svc-1 |-----| ch-svc-1 |-----| sink-svc-1 |  |
|  +-----------+     +----------+     +------------+  |
|  +-----------+     +----------+     +------------+  |
|  | src-svc-2 |-----| ch-svc-2 |-----| sink-svc-2 |  |
|  +-----------+     +----------+     +------------+  |
|       ...               ...                ...      |
|  +-----------+     +----------+     +------------+  |
|  | src-svc-N |-----| ch-svc-N |-----| sink-svc-N |  |
|  +-----------+     +----------+     +------------+  |
+-----------------------------------------------------+

このようなアーキテクチャは、次のエージェント構成を使用して実現されます :

$ cat /usr/cygnus/conf/agent_all.conf
# declarations
cygnus-ngsi.sources = src-svc-1 src-svc-2 ... src-svc-N
cygnus-ngsi.sinks = sink-svc-1 sink-svc-2 ... sink-svc-N
cygnus-ngsi.channels = ch-svc-1 ch-svc-2 ... ch-svc-N

# sources
cygnus-ngsi.sources.src-svc-1.type = http
cygnus-ngsi.sources.src-svc-1.channels = ch-svc-1
cygnus-ngsi.sources.src-svc-1.port = <svc-1-port>
cygnus-ngsi.sources.src-svc-1...

cygnus-ngsi.sources.src-svc-2.type = http
cygnus-ngsi.sources.src-svc-2.channels = ch-svc-2
cygnus-ngsi.sources.src-svc-2.port = <svc-2-port>
cygnus-ngsi.sources.src-svc-2...

...

cygnus-ngsi.sources.src-svc-N.type = http
cygnus-ngsi.sources.src-svc-N.channels = ch-svc-N
cygnus-ngsi.sources.src-svc-N.port = <svc-N-port>
cygnus-ngsi.sources.src-svc-N...

# sinks
cygnus-ngsi.sinks.sink-svc-1.type = ...
cygnus-ngsi.sinks.sink-svc-1.channel = ch-svc-1
cygnus-ngsi.sinks.sink-svc-1...

cygnus-ngsi.sinks.sink-svc-2.type = ...
cygnus-ngsi.sinks.sink-svc-2.channel = ch-svc-2
cygnus-ngsi.sinks.sink-svc-2...

...

cygnus-ngsi.sinks.sink-svc-N.type = ...
cygnus-ngsi.sinks.sink-svc-N.channel = ch-svc-N
cygnus-ngsi.sinks.sink-svc-N...

# channels
cygnus-ngsi.channels.ch-svc-1.type = ...
cygnus-ngsi.channels.ch-svc-1...

cygnus-ngsi.channels.ch-svc-2.type = ...
cygnus-ngsi.channels.ch-svc-2...

...

cygnus-ngsi.channels.ch-svc-N.type = ...
cygnus-ngsi.channels.ch-svc-N...

関連する cygnus_instance_all.conf は次のようになります :

$ cat /usr/cygnus/conf/cygnus_instance_all.conf
CYGNUS_USER=cygnus
CONFIG_FOLDER=/usr/cygnus/conf
CONFIG_FILE=/usr/cygnus/conf/agent_all.conf
AGENT_NAME=cygnus-ngsi
LOGFILE_NAME=cygnus.log
ADMIN_PORT=8081
POLLING_INTERVAL=30

ハードウェア面で制限がある場合は、この種の高度な構成を使用しますが、複数の TCP ポートを公開することはできます。

トップ

単一エージェント、単一ソース、FIWARE service ごとの多重化

最後に、TCP ポートごとの通知(つまり、FIWARE service ごとに1つのポート)を多重化することで、単一の TCP ポートを介してすべての種類の通知の受信を有効にし、Flume の多重化チャネル・プロセッサを使用して単一の Cygnus エージェントに内部的に多重化を実行できます。

+---------------------------------------------------+
|                                               JVM |
|            scv-1 +----------+     +------------+  |
|       +----------| ch-svc-1 |-----| sink-svc-1 |  |
|       |          +----------+     +------------+  |
|       |    svc-2 +----------+     +------------+  |
|       |    +-----| ch-svc-2 |-----| sink-svc-2 |  |
|       |    |     +----------+     +------------+  |
|  +---------+                                      |
|  | src-all |          ...               ...       |
|  +---------+                                      |
|       |    |     +----------+     +------------+  |
|       |    +-----| ch-svc-N |-----| sink-svc-N |  |
|       |    svc-N +----------+     +------------+  |
|       |          +----------+     +------------+  |
|       +----------|  ch-def  |-----|  sink-def  |  |
|                  +----------+     +------------+  |
+---------------------------------------------------+

つまり、このエージェント設定を使用します :

$ cat /usr/cygnus/conf/agent_all.conf
# declarations
cygnus-ngsi.sources = src-all
cygnus-ngsi.sinks = sink-svc-1 sink-svc-2 ... sink-svc-N sink-def
cygnus-ngsi.channels = ch-svc-1 ch-svc-2 ... ch-svc-N ch-def

# sources
cygnus-ngsi.sources.src-all.type = http
cygnus-ngsi.sources.src-all.channels = ch-svc-1 ch-svc-2 ... ch-svc-N ch-def
cygnus-ngsi.sources.src-all.selector.type = multiplexing
cygnus-ngsi.sources.src-all.selector.header = fiware-service
cygnus-ngsi.sources.src-all.selector.mappings.<svc-1> = ch-svc-1
cygnus-ngsi.sources.src-all.selector.mappings.<svc-2> = ch-svc-2
...
cygnus-ngsi.sources.src-all.selector.mappings.<svc-N> = ch-svc-N
cygnus-ngsi.sources.src-all.selector.mappings.default = ch-def
cygnus-ngsi.sources.src-all.port = 5050

cygnus-ngsi.sources.src-all...

# sinks
cygnus-ngsi.sinks.sink-svc-1.type = ...
cygnus-ngsi.sinks.sink-svc-1.channel = ch-svc-1
cygnus-ngsi.sinks.sink-svc-1...

cygnus-ngsi.sinks.sink-svc-2.type = ...
cygnus-ngsi.sinks.sink-svc-2.channel = ch-svc-2
cygnus-ngsi.sinks.sink-svc-2...

...

cygnus-ngsi.sinks.sink-svc-N.type = ...
cygnus-ngsi.sinks.sink-svc-N.channel = ch-svc-N
cygnus-ngsi.sinks.sink-svc-N...

cygnus-ngsi.sinks.sink-def.type = ...
cygnus-ngsi.sinks.sink-def.channel = ch-def
cygnus-ngsi.sinks.sink-def...

# channels
cygnus-ngsi.channels.ch-svc-1.type = ...
cygnus-ngsi.channels.ch-svc-1...

cygnus-ngsi.channels.ch-svc-2.type = ...
cygnus-ngsi.channels.ch-svc-2...

...

cygnus-ngsi.channels.ch-svc-N.type = ...
cygnus-ngsi.channels.ch-svc-N...

cygnus-ngsi.channels.ch-def.type = ...
cygnus-ngsi.channels.ch-def...

関連する cygnus_instance_all.conf は次のようになります :

$ cat /usr/cygnus/conf/cygnus_instance_all.conf
CYGNUS_USER=cygnus
CONFIG_FOLDER=/usr/cygnus/conf
CONFIG_FILE=/usr/cygnus/conf/agent_all.conf
AGENT_NAME=cygnus-ngsi
LOGFILE_NAME=cygnus.log
ADMIN_PORT=8081
POLLING_INTERVAL=30

ハードウェアポートと公開ポートの両方が非常に限られている、または非常に貴重な、最も制限の厳しいシナリオでは、この種の高度な構成を使用します。

トップ

Orion Context Broker のサブスクリプション

複数のエージェントを使用するか、複数のリスナーを持つ単一のエージェントを使用するかのいずれかによって、クライアントごとのリスナーが Cygnus 用に構成されている場合は、クライアントごとのサブスクリプションが必要であることは明らかです。その場合、各サブスクリプションは異なるエンドポイント URL を指します。

それにもかかわらず、単一のリスナーを持つ単一の Cygnus エージェントが、通知されたコンテキストデータを FIWARE service に基づいて内部的に多重化した場合、サブスクリプションがどのように見えるかはあまり明確ではないかもしれません。その場合、クライアントごとのサブスクリプションも必要です(セキュリティ上の理由により、OrionはすべてのFIWARE serviceに加入することができないため)。ただし、すべてのサブスクリプションは同じ単一エンドポイント URL を指している必要があります。

いずれにしても、可能な限り最小限の Orion サブスクリプション (Orion のパフォーマンスに関するサブスクリプション番号の影響)の使用と、最大 JVM/Cygnus エージェント (各 JVM にはメモリと CPU に関して独自のリソースがあります)を使用とのトレードオフを検討してください。

トップ

複数の FIWARE service paths を含むシナリオ

別のヘッダ、FIWARE service path を使用して、単一のテナントまたはクライアントに属するデータをセグメント化することができます。このようなヘッダは、データベースベースのシンク内のテーブルやコレクションの名前の前に Cygnus によって使用されるか、HDFS ユーザ空間内のサブフォルダとして、または CKAN のパッケージ/データセットとして使用されます。

FIWARE service と同様に、FIWARE service path を使用して、Orion Context Broker から通知されたコンテキストデータの処理を Cygnus にパラレル化することができます。ペア(service、service path)ごとに1つのリスナーを作成するか(リスナーごとに Cygnus エージェントを作成することも、複数のリスナーを持つ単一の Cygnus エージェントを作成することもできます)、すべてのペア(service、service path)に対して単一のリスナーを作成し、内部的に Cygnus のデータを FIWARE service path ヘッダに基づいて多重化します。

トップ

複数のエージェント

この場合、単一の FIWARE service 内の各 FIWARE service path に対して、Cygnus エージェントがデプロイされます。

+-----------------------------------------------------------------+
|                                                            JVM1 |
|  +---------------+     +--------------+     +----------------+  |
|  | src-svcpath-1 |-----| ch-svcpath-1 |-----| sink-svcpath-1 |  |
|  +---------------+     +--------------+     +----------------+  |
+-----------------------------------------------------------------+

+-----------------------------------------------------------------+
|                                                            JVM2 |
|  +---------------+     +--------------+     +----------------+  |
|  | src-svcpath-2 |-----| ch-svcpath-2 |-----| sink-svcpath-2 |  |
|  +---------------+     +--------------+     +----------------+  |
+-----------------------------------------------------------------+

                              ...

+-----------------------------------------------------------------+
|                                                            JVMN |
|  +---------------+     +--------------+     +----------------+  |
|  | src-svcpath-N |-----| ch-svcpath-N |-----| sink-svcpath-N |  |
|  +---------------+     +--------------+     +----------------+  |
+-----------------------------------------------------------------+

トップ

単一のエージェント、複数のソース

上記の場合と同様に、単一の Cygnus エージェントは、単一の FIWARE service 内の各FIWARE service path に対して HTTP リスナーを開始します。

+-----------------------------------------------------------------+
|                                                             JVM |
|  +---------------+     +--------------+     +----------------+  |
|  | src-svcpath-1 |-----| ch-svcpath-1 |-----| sink-svcpath-1 |  |
|  +---------------+     +--------------+     +----------------+  |
|  +---------------+     +--------------+     +----------------+  |
|  | src-svcpath-2 |-----| ch-svcpath-2 |-----| sink-svcpath-2 |  |
|  +---------------+     +--------------+     +----------------+  |
|         ...                   ...                   ...         |
|  +---------------+     +--------------+     +----------------+  |
|  | src-svcpath-N |-----| ch-svcpath-N |-----| sink-svcpath-N |  |
|  +---------------+     +--------------+     +----------------+  |
+-----------------------------------------------------------------+

トップ

単一のエージェント、単一のソース、FIWARE service path ごとの多重化

単一の Cygnus エージェントは、通知された NGSI コンテキストデータを FIWARE service path ヘッダに基づいて多重化します。

+-----------------------------------------------------------+
|                                                       JVM |
|        svcpath-1 +--------------+     +----------------+  |
|       +----------| ch-svcpath-1 |-----| sink-svcpath-1 |  |
|       |          +--------------+     +----------------+  |
|       |svcpath-2 +--------------+     +----------------+  |
|       |    +-----| ch-svcpath-2 |-----| sink-svcpath-2 |  |
|       |    |     +--------------+     +----------------+  |
|  +---------+                                              |
|  | src-all |            ...                   ...         |
|  +---------+                                              |
|       |    |     +--------------+     +----------------+  |
|       |    +-----| ch-svcpath-N |-----| sink-svcpath-N |  |
|       |svcpath-N +--------------+     +----------------+  |
|       |          +--------------+     +----------------+  |
|       +----------|    ch-def    |-----|    sink-def    |  |
|                  +--------------+     +----------------+  |
+-----------------------------------------------------------+

トップ

Orion Context Broker のサブスクリプション

Orion Context Brokerサブスクリプションに関して、複数のリスナー(複数のエージェント、多数のリスナーを持つ単一のエージェント)が使用されている場合(複数のエージェントのいずれかが複数のリスナーを持つエージェントのいずれか)、各ペア(service、service path)ごとにサブスクリプションが必要です。それにもかかわらず、FIWARE service path に基づいてコンテキスト・データを内部的に多重化する1つのリスナーを持つ単一の Cygnus エージェントが使用されている場合、クライアントの FIWARE service 内のすべてのサービス・パスに対して単一のサブスクリプションを行うことができます。これは特別な FIWARE service path ヘッダの値を使用することによって達成されます : /#

いずれにしても、可能な限り最小限の Orion サブスクリプション(Orion のパフォーマンスに関するサブスクリプション番号の影響)の使用と、最大 JVM/Cygnus エージェント(各 JVM にはメモリと CPU に関して独自のリソースがあります)を使用とのトレードオフを検討してください。

トップ

それぞれが複数の FIWARE service path を含む複数の FIWARE service を含むシナリオ

前のセクションで説明した構成には、次の2つの可能性があります :

  • 各ペア(service、service path)ごとに Cygnus エージェントを作成します。これにより、JVM のペアごとに HTTP リスナーがペアごとに確実に設定されます
  • サービスごとに Cygnus エージェントを作成し、FIWARE service 内のFIWARE service paths と同数の HTTP リスナーを構成します

それにもかかわらず、Flume テクノロジの現在のステータスは2つのヘッダに基づく多重化を許可していないため、すべての FIWARE service と FIWARE service paths に対して単一の HTTP リスナを持つことはできません。現在の Flume の 多重化チャネル・セレクタ は、単一のヘッダに基づいて多重化を有効にします。この目的のためにカスタム・チャネル・セレクタを実装する必要があります

もう1つの可能性は、2レベルアーキテクチャを持つことです。第1レベルには、FIWARE service ごとの多重化を担当する単一の Cygnus エージェントが持ちます。そのシンクは、単に NGSI コンテキスト情報を次のレベルに転送するだけです。これには、Flume の Avro シンクソース, for instance)を使用します。次に、第2レベルには、FIWARE service ごとに Cygnus エージェントが含まれ、コンテキスト情報を FIWARE service path 単位で多重化します。

                    +--------------------------+   
              +-----| JVM-all-svcpath-in-svc-1 |
              |     +--------------------------+
+-------------+     +--------------------------+
| JVM-all-svc |-----| JVM-all-svcpath-in-svc-2 |
+-------------+     +--------------------------+
              |                  ...
              |     +--------------------------+   
              +-----| JVM-all-svcpath-in-svc-N |
                    +--------------------------+

トップ

永続化バックエンドごとのシンクのプールを伴うシナリオ

Cygnus エージェントのパフォーマンスを向上させるために、シンクのプールを設定することができます。このようなプールは、ラウンドロビン方式で動作します。つまり、シンクが使用可能になるまで、共通チャネルから NGSI イベントを順次取得します。

+------------------------------------+
|                                JVM |
|                         +-------+  |
|                   +-----| sink1 |  |
|                   |     +-------+  |
|  +-----+     +----+     +-------+  |
|  | src |-----| ch |-----| sink2 |  |
|  +-----+     +----+     +-------+  |
|                   |        ...     |
|                   |     +-------+  |
|                   +-----| sinkN |  |
|                         +-------+  |
+------------------------------------+

この構成は、デフォルトの構成を使用して Flume のネイティブのロード・バランシング・シンク・プロセッサを構成することで有効になります。

$ cat /usr/cygnus/conf/agent_simplest.conf
# declarations
cygnus-ngsi.sources = src
cygnus-ngsi.sinks = sink1 sink2 ... sinkN
cygnus-ngsi.channels = ch

# sources
cygnus-ngsi.sources.src.type = http
cygnus-ngsi.sources.src.channels = ch
cygnus-ngsi.sources.src.port = 5050
cygnus-ngsi.sources.src...

# sinks
cygnus-ngsi.sinks.sink1.type = ...
cygnus-ngsi.sinks.sink1.channel = ch
cygnus-ngsi.sinks.sink1...

cygnus-ngsi.sinks.sink2.type = ...
cygnus-ngsi.sinks.sink2.channel = ch
cygnus-ngsi.sinks.sink2...

...

cygnus-ngsi.sinks.sinkN.type = ...
cygnus-ngsi.sinks.sinkN.channel = ch
cygnus-ngsi.sinks.sinkN...

# sink processor
cygnus-ngsi.sinkgroups = sg
cygnus-ngsi.sinkgroups.sg.sinks = sink1 sink2 ... sinkN
cygnus-ngsi.sinkgroups.sg.processor.type = load_balance
cygnus-ngsi.sinkgroups.sg.processor.selector = round_robin

# channels
cygnus-ngsi.channels.ch.type = ...
cygnus-ngsi.channels.ch...

トップ