メインコンテンツへ移動

ワークフローの継続的なキューイング

ワークフローイベントがトリガーされると、Kafkaメッセージキューにメッセージとして入り、その後、ワークフローの消費サービスによって処理されます。

プラットフォーム上でワークフローのキュー滞留が発生している場合、まず「キューは多いが徐々に消費されている」ケースと、「キューが停滞し全く消費されていない」ケースを切り分けることが重要です。

以下の2つのシナリオを想定してください:

ワークフローがキューされ消費されている場合​

ワークフローのモニタリングページで、何万件~数百万件規模の非常に大きなキューが発生しているか確認してください。これは、業務担当者によるトリガーロジックの誤設定や、ループによる大量のワークフロートリガーが原因となる場合があります。

消費能力にもさまざまな要因が影響します。例えば、通常は1分間に1万件のワークフローを処理できますが、何十万件ものワークフローが同時にトリガーされると、消費が追いつかずキューが膨らむことがあります。

一部のワークフローだけが数万件以上のキューになって全体のワークフローが著しく滞留している場合、これらのキューの多いワークフローが再度処理不要であれば非一時停止状態で直接クローズしてください。

  • ワークフローを直接クローズすると、キュー内のワークフローはノードロジックを経由せず即座に消費され、早急に処理されます。
  • 多量キューのワークフローを消費する必要がある場合は、一時停止し、業務の閑散時間帯に再開してください。

意図しない大量トリガーが発生していない場合は、サーバーにログインしてリソース利用状況を確認してください。topコマンドでリアルタイムのCPUおよびメモリ消費量を監視できます。

  • CPUを大量に消費しているプロセスが mongod であれば、これはスロークエリが原因であることが多いです。解決策はスロークエリ最適化をご参照ください。
  • dotnet や java プロセスがCPUを大量利用している場合、ワークフローノードの複雑なロジックがリソース消費増加の要因です。
  • サーバーリソースが逼迫している場合は、スケールアウトを行う、または複雑なロジックを含むワークフローの実行を業務の閑散時間帯に延期してください。
  • Kubernetesクラスター型の環境でリソースに余裕があれば、消費量の多いサービスインスタンスのスケールアップを検討できます。

ワークフローがキューされているが消費されていない場合​

ワークフローが継続的にキューされて消費されない場合、サーバーディスクのフルやKafkaサービスの障害が主な原因です。

  • サーバーで df -Th コマンドを使い、システムディスクおよびデータディスクの利用状況を確認します。
  • Kafkaサービスが正常稼働しているか確認してください。

ストレージコンポーネントのコンテナのヘルスチェックログを確認します。

docker logs $(docker ps | grep sc | awk '{print $1}')
  • 通常はすべてINFOログです。Kafkaサービスが継続的に再起動し続けている場合、Kafkaサービスに障害が発生しています。まず全体の再起動をお試しください。Kafkaが起動しない場合は、Kafkaエラーデータのクリア手順をご参照ください。

ディスクフルやKafka障害などで、トリガーされたワークフローがKafkaキューに正常に書き込めなかった場合、これらヒストリ上の「キュー済み」ワークフローは、今後も消費されません。


極めて稀なケースとして、Kafkaコンシューマグループがリバランス状態に入ることがあります。これは主にプロセス遅延によるタイムアウトや、コンシューマサービスインスタンスのリソース問題による再起動が発生した場合に、グループリバランスが発生します。

各トピックパーティションでの実際のメッセージ滞留状況やリバランス状態かどうかを、次のコマンドで確認できます。

  1. ストレージコンポーネントのコンテナに入ります。
docker exec -it $(docker ps | grep sc | awk '{print $1}') bash
  1. md-workflow-consumerコンシューマグループの消費状況を確認します。
/usr/local/kafka/bin/kafka-consumer-groups.sh --bootstrap-server ${ENV_KAFKA_ENDPOINTS:=127.0.0.1:9092} --describe --group md-workflow-consumer

正常出力例は以下の通りです。Warning: Consumer group 'md-workflow-consumer' is rebalancing. と表示されている場合は、現在コンシューマグループがリバランス中です。

  • LAG列はトピックパーティション内で現在滞留しているメッセージ数を表します。
  • ワークフローでよく利用されるTopic名
    • WorkFlow:メインワークフロー実行
    • WorkFlow-Process:サブワークフロー実行
    • WorkFlow-Router:ワークフロー実行の遅延キュー
    • WorkFlow-Batch:バルクワークフロー実行
    • WorkFlow-Button:ボタントリガーワークフロー実行
    • WorkSheet:ワークフロートリガーとなる行データ検証
    • WorkSheet-Router:行データ検証の遅延キュー