thingsboard
第1章: thingsboardの展開シナリオとパフォーマンス要件
パフォーマンス要件
第2章: thingsboardのルールチェーンキューのパラメータ設定
Thingsboardはデフォルトで3つのキューを提供しており、主にその違いは送信と処理の戦略です。
HightPrority | tb_rule_engine.hp | BURST;batchSize:001 | type:RETRY_FAILED_TIMED_OUT;retries:0;failurePercentage:0. 0;pauseBetweenRetries:5;maxPauseBetweenRetries:5 | 0020 |
SequentialByOriginator | tb_rule_engine.sq | SEQUENTAL_BY_ORIGINATOR;batchSize :001 | type:RETRY_FAILED_TIMED_OUT;retries:3;failurePercentage:0.0;pauseBetweenRetries:3;maxPauseBetweenRetries:3 | 0020 |
キューの構成説明
送信設定 - メッセージがルールエンジンに送信される順序とロジックを定義します
- BURST - すべてのメッセージが順番にルールエンジンに送信されます
シーケンシャル:メッセージは1つずつ送信されます。新しいメッセージは、前のメッセージが送信された後にのみ送信できます。これは非常に非効率的です。
テナントごとのシーケンシャル:メッセージはテナントごとに順番に送信されます。
発信者ごとのシーケンシャル:メッセージは特定のデバイスに対して1つずつ送信されます。新しいメッセージは、前のメッセージが正常に送信された後にのみ送信できます。
処理設定の廃止 - メッセージの確認ロジックを定義します。再試行処理には、以下の6つの有効な戦略があります。
- 失敗およびタイムアウトの再試行 - メッセージパッケージ内の失敗およびタイムアウトしたメッセージをすべて再試行します
retry faild -- 処理パッケージ内の失敗したメッセージのみを再試行します。
retry timeout-- タイムアウトしたメッセージを再試行します。
再試行ポリシーのパラメータ
- 再試行回数: 再試行の回数、0は無制限を意味します
再試行までの時間(秒) -- 再試行までの時間、つまり、コンシューマスレッドが再試行を待機する時間です。 このパラメータは通常、操作またはタスクが失敗した後、一定の時間間隔で再試行するために使用されます。
追加の再試行までの時間(秒) -- 2回目以降の再試行までの待機時間です。
ポーリング設定
- バッチ処理
- ポーリング間隔:メッセージキューが新しいメッセージをポーリングする間隔(ミリ秒単位)。新しいメッセージが到着しない場合、メッセージポーリングメカニズムは定期的にメッセージキューを新しいメッセージの到着について確認します。
- パーティション -- メッセージキューに関連付けられたパーティションの数。メッセージの同時消費数を増やすことができます。
- タイムリーな処理
- 各コンシューマーに対してメッセージのポーリングを送信します。この項目は、UI構成ページで提供されています。選択されていない場合、デフォルトではすべてのパーティションに1つのコンシューマーのみが存在します。構成されている場合、各パーティションは独自のコンシューマーを指定します。
処理が割り当てられます。
ThingsboardでKafkaをキューエージェントとして使用する際の関連パラメータの設定説明
Kafkaの生成に関連するパラメータ- buffer.memoryは、Kafkaの生成で使用できるバッファのサイズを制限します。デフォルト値は32MBです。
- buffer.memoryが低く設定されていると、問題が発生する可能性があります。メッセージはすぐにメモリキャッシュに書き込まれますが、送信スレッドには送信する時間がなく、メッセージが蓄積され、最終的にキャッシュが満杯になり、スレッドがブロックされます。
Kafkaの生産に関連するパラメータ
- buffer.memoryが低く設定されていると、問題が発生する可能性があります。メッセージはすぐにメモリキャッシュに書き込まれますが、送信スレッドには送信する時間がなく、メッセージが蓄積され、最終的にキャッシュが満杯になり、スレッドがブロックされます。
- buffer.memoryは、Kafkaの生産者が使用できるバッファのサイズを制限します。デフォルト値は32MBです。
- buffer.memoryが小さく設定されていると、問題が発生する可能性があります。メッセージはすぐにメモリキャッシュに書き込まれますが、送信スレッドにはそれらを送信する時間がなく、メッセージが蓄積され、最終的にキャッシュが満杯になり、スレッドがブロックされます。 プロデューサーは、Kafkaへのメッセージの書き込みを継続できなくなります。
- batch.size プロデューサーがメッセージを送信する際に、一度に蓄積するメッセージのサイズです。プロデューサーはバッチ送信メカニズムを使用し、このパラメーターはバッチのサイズを制御します。デフォルトは16KBです
- aks=0 の場合、プロデューサーはサーバーからの応答を待たずに、単にリクエストを送信します。メッセージのエラーや損失を検出することはできません。これは最も信頼性の低いモードです。
- aks=1 の場合、プロデューサーはメッセージ送信後にサーバーから確認応答を受け取ります。これは、少なくとも1つのレプリカがメッセージを正常に受信したことを意味します。ただし、確認応答の受信後にレプリカに障害が発生し、データが失われる可能性があるため、プロデューサーは依然としてメッセージ損失のリスクにさらされています。デフォルトのモード
- acks=all または -1:プロデューサーはメッセージを送信した後、すべてのレプリカがメッセージを受信するまで待ちます。最も信頼性の高いメッセージ確認モードです。ただし、処理効率は最も遅くなります。
- linger.ms は、プロデューサーがメッセージを送信するまでの遅延時間を設定します。
- compression.type プロデューサーが Kafka サーバーに送信するメッセージの圧縮タイプを指定します。 圧縮が構成されている場合、Kafkaサーバーがデータを自ら解凍することができます。
- none: 圧縮なし
- gzip: GZIPアルゴリズムを使用してデータを圧縮
- snappy: Snappy圧縮アルゴリズムを使用してメッセージを圧縮。高速で、CPUリソースの使用も少なくなります。ただし、GZIP圧縮よりも効率は低くなります
- lz4 は lz4 圧縮アルゴリズムを使用します。
- max.in.flight.requests.per.connection は、サーバーへの単一接続でプロデューサーが送信できる未確認リクエストの最大数を制御します。
- 再試行回数 プロデューサーが再試行可能なエラーを送信する際にメッセージを送信する最大回数を指定します。
プロデューサーがメッセージを送信する際には、まずメッセージをメモリ内のキャッシュに送信し、その後でメッセージをバッチ化します。バッチサイズはbach.sizeパラメータで指定します。メッセージバッチのバイト数が指定した閾値に達すると、メッセージのバッチがまとめてKafkaサーバーに送信されます。
プロデューサーをメッセージ確認モードで送信するように設定するには、acksを使用します。デフォルトでは、プロデューサーはすぐにメッセージをサーバーに送信しますが、プロデューサーの効率とスループットを向上させるには、linger.ms パラメーターを設定します。 これは、しきい値に達したときにプロデューサーがバッファに蓄積されたメッセージを一度に送信するように遅延を設定します。バッファで待機する時間を指定します。メッセージが batch.size で定義されたしきい値サイズに達しなかった場合でも、すでに時間が経過している場合は、メッセージは送信されます。
パラメータの定義 プロデューサーがサーバーからの応答を受信せずに同じ接続に送信できる未確認リクエストの最大数。 プロデューサーがサーバーにメッセージを送信した後、サーバーがリクエストを受信したことを確認し、応答を送信するまで待ちます。応答を待っている間、プロデューサーはさらにリクエストを送信し続けることができます。このパラメータは、サーバーからの応答を受信せずに送信できるリクエストの最大数を指定します。設定を小さくすると、ネットワークとプロデューサーの負荷が軽減されます。
Thingsboard ローカルソースコードのコンパイルと実行
注意事項
- プラグインライセンスが無効になります
<!-- <plugin>--> <!-- <groupId>com.mycila</groupId>--> <!-- <artifactId>license-maven-plugin</artifactId>--> <!-- <version>3.0</version>--> <!-- <configuration>--> <!-- <header>${main.dir}/license-header-template.txt</header>--> <!-- <properties>--> <!-- <owner>The Thingsboard Authors</owner>--> <!-- </properties>--> <!-- <excludes>--> <!-- <exclude>**/.env</exclude>--> <!-- <exclude>**/*.env</exclude>--> <!-- <exclude>**/.eslintrc</exclude>--> <!-- <exclude>**/.babelrc</exclude>--> <!-- <exclude>**/.jshintrc</exclude>--> <!-- <exclude>**/.gradle/**</exclude>--> <!-- <exclude>**/nightwatch</exclude>--> <!-- <exclude>**/README</exclude>--> <!-- <exclude>**/LICENSE</exclude>--> <!-- <exclude>**/banner.txt</exclude>--> <!-- <exclude>node_modules/**</exclude>--> <!-- <exclude>**/*.properties</exclude>--> <!-- <exclude>src/test/resources/**</exclude>--> <!-- <exclude>src/vendor/**</exclude>--> <!-- <exclude>src/font/**</exclude>--> <!-- <exclude>src/sh/**</exclude>--> <!-- <exclude>packaging/*/scripts/control/**</exclude>--> <!-- <exclude>packaging/*/scripts/windows/**</exclude>--> <!-- <exclude>packaging/*/scripts/init/**</exclude>--> <!-- <exclude>**/*.log</exclude>--> <!-- <exclude>**/*.current</exclude>--> <!-- <exclude>.instance_id</exclude>--> <!-- <exclude>src/main/scripts/control/**</exclude>--> <!-- <exclude>src/main/scripts/windows/**</exclude>--> <!-- <exclude>src/main/resources/public/static/rulenode/**</exclude>--> <!-- <exclude>**/*.proto.js</exclude>--> <!-- <exclude>docker/haproxy/**</exclude>--> <!-- <exclude>docker/tb-node/**</exclude>--> <!-- <exclude>ui/**</exclude>--> <!-- <exclude>**/.browserslistrc</exclude>--> <!-- <exclude>**/yarn.lock</exclude>--> <!-- <exclude>**/.yarnrc</exclude>--> <!-- <exclude>**/.angular/**</exclude>--> <!-- <exclude>**/*.raw</exclude>--> <!-- <exclude>**/*.patch</exclude>--> <!-- <exclude>**/apache/cassandra/io/**</exclude>--> <!-- <exclude>.run/**</exclude>--> <!-- <exclude>**/NetworkReceive.java</exclude>--> <!-- <exclude>**/lwm2m-registry/**</exclude>--> <!-- </excludes>--> <!-- <mapping>--> <!-- <proto>JAVADOC_STYLE</proto>--> <!-- <cql>DOUBLEDASHES_STYLE</cql>--> <!-- <scss>JAVADOC_STYLE</scss>--> <!-- <jsx>SLASHSTAR_STYLE</jsx>--> <!-- <tsx>SLASHSTAR_STYLE</tsx>--> <!-- <conf>SCRIPT_STYLE</conf>--> <!-- <gradle>JAVADOC_STYLE</gradle>--> <!-- </mapping>--> <!-- </configuration>--> <!-- <executions>--> <!-- <execution>--> <!-- <goals>--> <!-- <goal>check</goal>--> <!-- </goals>--> <!-- </execution>--> <!-- </executions>--> <!-- </plugin>--> <!-- <plugins>--> <!-- <plugin>--> <!-- <groupId>com.mycila</groupId>--> <!-- <artifactId>license-maven-plugin</artifactId>--> <!-- </plugin>--> <!-- </plugins>-->-->
license-maven-plugin -->3.0 -->--> ${main.dir}/license-header-template.txt -->--> -->**/*.current-->-->-->The Thingsboard Authors -->
- ### msa の js-executor がエラーで実行
- 現象:
Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:yarn (yarn pkg) on project js-executor: Failed to run task: 'yarn run pkg' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 2 (Exit value: 2) -> [Help 1]Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.12.0:yarn (yarn pkg) on project js-executor: Failed to run task: 'yarn run pkg' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 2 (Exit value: 2) -> [Help 1]
- 解決策
1. yarn install -g pkgmarkdown