Apache Kafka のストリームコネクトの使用
ストリームコネクト for Apache Kafka を使用して、Apache Kafka 環境を ServiceNow インスタンスに接続します。
Apache Kafka は、複数のシステム間でデータを交換するための統一された方法を提供する分散イベントストリーミングプラットフォームです。Apache Kafka 向けストリームコネクトは Kafka 環境を ServiceNow インスタンスにリンクし、インスタンスと外部システム間でデータをストリーミングできるようにします。
メリット
-
Kafka イベントを大規模に公開して処理します。ServiceNow インスタンスから Kafka 環境にイベントを公開し、外部システムからの Kafka イベントを低レイテンシで大量に使用します。
- Kafka イベントを生成および消費するフローを構築します。ストリームコネクトはワークフロースタジオと統合されているため、ローコードで Kafka メッセージを公開および処理できます。
- Kafka 環境からデータをインポートし、既存の強力な変換エンジン (RTE) または変換マップ構成を使用してそのデータを処理します。
- 独自のスクリプトを使用して Kafka トピックからのデータを処理するコンシューマーを構成します。
- 統計情報とパフォーマンスメトリクスの詳細なレポートを使用して、コンシューマーのパフォーマンスを監視します。
- ダイレクト Kafka を使用して、オンプレミスの ServiceNow インスタンスをローカルの Kafka 環境と統合します。
用語
ストリームコネクト は、次の用語を使用します。
- 保険募集人
-
プロデューサーはイベントを Kafka 環境に公開します。ストリームコネクトには次の 2 つのプロデューサーがあります。
- ワークフロースタジオ の Kafka プロデューサーステップ
- ProducerV2 API
- コンシューマー
-
コンシューマーは Kafka 環境からイベントを読み取って処理します。ストリームコネクトには次のような複数のコンシューマーがあります。
- ワークフロースタジオ での Kafka メッセージトリガー
- 抽出変換ロード (ETL) コンシューマー
- 変換マップコンシューマー
- スクリプトコンシューマー
- トピックとトピックの名前空間
-
イベントはトピックに編成されて保存されます。1 つのトピックには同じタイプのイベントが格納されます。トピックはパーティションに分割されます。イベントにはキーがあります。同じキーを持つイベントは同じパーティションに格納されます。
トピックはトピックの名前空間にリンクされます。名前空間を使用して、論理的な方法でトピックを整理できます。たとえば、取得元の Kafka クラスターに基づいてトピックをグループ化できます。名前空間を使用して、どのドメインがドメインセパレーションされたインスタンスのどのトピックにアクセスできるかを設定することもできます。詳細については、「Managing namespaces and topics in Hermes」を参照してください。
- トピックエイリアス
- トピックエイリアスは、基礎となる任意のHermesまたはダイレクト Kafka トピックに接続できる一意のトピック名です。トピックエイリアスは、異なるインスタンスに移動し、各インスタンスの異なる基礎となるトピックに接続することができます。
- サブスクリプション
-
サブスクリプションは、コンシューマーに関連付けられたレコードです。メッセージを消費する Kafka トピックの名前やトピックが持つパーティションの数など、コンシューマーに関する構成情報が格納されます。サブスクリプションレコードは、Kafka ストリームがアクティブ化されると作成されます。
各サブスクリプションレコードにあるいくつかのメトリクスを使用すると、トピックからコンシューマー読み取りを行うパフォーマンスを表示できます。詳細については、「Kafka サブスクリプションと統計情報の表示」を参照してください。
- パーティショングループ
-
パーティショングループは、一連のトピックパーティションです。たとえば、トピックに 6 つのパーティションがある場合、各グループに 2 つのパーティションがある 3 つのパーティショングループに分割できます。
- Kafka コンシューマージョブ
-
トピック内に新しいイベントがないか Hermes を定期的にチェックするジョブ。ジョブは空きパーティショングループを選択し、そのサブスクリプションを取得します。サブスクリプションでトピック名が得られ、ジョブはそのトピックのメッセージのパーティションをチェックします。
- Kafka ストリーム
-
Kafka ストリームは、コンシューマーのデータストリームを定義するレコードです。ワークフロースタジオ で Kafka メッセージトリガーを使用している場合、Kafka ストリームが自動的に作成されます。別のコンシューマーを使用している場合は、手動で作成する必要があります。
Kafka 環境を ServiceNow インスタンスにリンクするために、ストリームコネクトは Hermes メッセージングサービス を使用します。Hermes メッセージングサービス を使用すると、インスタンスで大量の Kafka イベントを生成して消費できます。Kafka 環境とインスタンス間のデータフローを管理します。詳細については、「Hermes メッセージングサービス」を参照してください
次の図は、 ストリームコネクト の主要コンポーネントの一部を示しています。
ストリームコネクトのガイド付きセットアップの使用
ガイド付きセットアップには、 ストリームコネクトの構成に役立つ一連のタスクが用意されています。ガイド付きセットアップを開くには、次に移動します .
ガイド付きセットアップインターフェイスの使用の詳細については、「ガイド付きセットアップの使用」を参照してください。
ストリームコネクト および ワークフロースタジオ
ストリームコネクトとワークフロースタジオを使用して Kafka イベントを生成および消費するフローを構築します。ストリームコネクトには、Kafka イベントを消費するためのフロートリガーと、それらを生成するためのアクションステップがあります。
Kafka メッセージトリガーを使用して、Kafka イベントを処理するフローを作成します。Kafka からデータを消費してテーブルに挿入するフローをビルドするか、スポークを使用してサードパーティ環境にデータを伝達することができます。
フローがアクティブ化されると、トリガーが有効になります。アクティブ化されると、指定された Kafka トピックにメッセージがあるときはいつでもトリガーがフローを開始します。Kafka メッセージトリガーを使用する場合は、Kafka ストリームまたはサブスクリプションレコードを作成する必要はありません。フローがアクティブ化されると、どちらも自動的に作成されます。フローがアクティブである限り、トピックからメッセージが読み取られます。
Kafka プロデューサーステップを使用して、Kafka 環境のトピックにイベントを公開するアクションを作成します。たとえば、このステップを使用して ServiceNow 内のインシデントの更新に関するメッセージを作成し、そのメッセージを Kafka 環境のトピックにプッシュすることができます。
直接 Kafka
直接 Kafkaを使用して、オンプレミスのServiceNowインスタンスをローカルの Kafka 環境と統合します。エンタープライズシステム間の効率的な統合を構築し、アプリケーション間でデータを交換するための大量かつ堅牢な統合を可能にし、1 つの環境が一時的にオフラインになった場合にキューイングメカニズムを使用してデータ損失を削減します。
Direct Kafka を使用すると、カスタム Kafka 接続を構成して、オンプレミスインスタンスの ストリームコネクト をローカルの Kafka 環境と統合できます。この接続により、Hermes メッセージングサービスまたは別のメッセージレプリケーターを必要とせずに、ストリームコネクトとその機能を直接使用できます。
ストリームコネクト 警告
ストリームコネクトの統合に関するアラートとアラート通知を受信します。ストリームコネクトは、アクティブモニタリングとスケジュール済みモニタリングの両方を使用して、複数のコンポーネントにわたるイベントを検出します。問題が検出されると、システムはアラートを作成し、ストリームコネクトログにメッセージを記録して、アラート通知を送信します。詳細については、「ストリームコネクト 警告」を参照してください。
Avro 形式のメッセージのサポート
スキーマをインポートして作成し、Apache Avro 形式でメッセージを送受信します。Avro 形式を使用することで、ペイロードのサイズを減らし、ローカルの Kafka インスタンスへの統合を簡素化できます。
Avro スキーマを Confluent レジストリから直接インポートすることも、JSON ファイルまたは JSON 形式の文字列を使用して独自のスキーマを作成することもできます。スキーマは ServiceNow に保存され、プロデューサーとコンシューマーがプレーンテキストメッセージを Avro 形式に変換したり、その逆を行ったりすることができます。詳細については、「ストリームコネクトでのスキーマ管理」を参照してください。
ETL、変換マップ、およびスクリプトコンシューマー
既存の RTE または変換マップ構成を使用して、Kafka 環境からデータをインポートします。抽出変換ロード (ETL) コンシューマーおよび変換マップコンシューマーは、Kafka メッセージからのペイロードの取得、データの変換、テーブルのレコードの挿入または更新を効率的に行えるようにして、データのインポートを簡素化します。予定されているデータインポートからストリームコネクトを使用する方法に切り替え、同じ構成でデータを処理できます。
スクリプトコンシューマーを使用して、Kafka 環境からデータを処理することもできます。スクリプトコンシューマーは、メッセージ内のデータが構造化されていない場合、またはコードを使用したデータルックアップが必要な場合など、より高度なユースケース用です。
抽出変換ロード (ETL) コンシューマーの構成、変換マップコンシューマーの構成、または スクリプトコンシューマーの構成 を行う場合は、Kafka ストリームの作成 も行う必要があります。
ProducerV2 API
ProducerV2 API を使用して Kafka トピックにイベントを公開します。
ストリームコネクトメッセージレプリケーション
Kafka 環境と ServiceNow の間のデータを、ストリームコネクトメッセージレプリケーションを使用して、レプリケートできます。
ストリームコネクト メッセージレプリケーションを使用すると、 ServiceNow インスタンスから直接メッセージレプリケーションを構成および管理できます。MID サーバーまたはMID サーバークラスターを使用してデータレプリケーションを実行するため、追加のレプリケーションサービスを構成またはホストする必要はありません。また、必要な証明書が自動的に生成されるため、メッセージレプリケーションのセットアップが簡略化されます。
詳細については、「ストリームコネクト メッセージレプリケーション」を参照してください。
ストリームコネクト ログ
プロデューサーとコンシューマーのログメッセージは、 ストリームコネクト ログ [sys_consumer_log] テーブルに格納されます。各ログエントリには、ログが作成された日時が表示されます。そのレベル、メッセージ、ソース。関連するアラートレコードまたはサブスクリプションレコードへのリンク。
システムプロパティを追加 glide.ih.kafka.stream_connect.debugして true に設定することで、より詳細なログ記録を有効にすることができます。ログがいっぱいにならないように、このプロパティは 24 時間後に自動的に無効になります。24 時間を超える詳細なログ記録が必要な場合は、プロパティを手動で再度有効にすることができます。
未処理および未配信のメッセージ
メッセージを配信できない場合、メッセージは Kafka 未配信メッセージ [sys_kafka_delivered_messages] テーブルに格納されます。スケジュール済みジョブである Kafka プロデューサー再試行は、定期的にこのテーブルを読み取り、メッセージを再配信しようとします。
タイムアウトによりメッセージのバッチを処理できない場合、メッセージは Kafka 未処理メッセージ [sys_kafka_unprocessed_messages] テーブルに格納されます。メッセージバッチのタイムアウトは、com.glide.kafka_consumer.timeout プロパティで設定できます。デフォルト値は 60 秒です。このテーブルはローテーションされているため、レコードは自動的に消去されます。
プロデューサー圧縮形式
- なし
- GZIP
- LZ4
ドメインセパレーション
ストリームコネクトのトピックの名前空間を使用して、どのドメインがドメインセパレーションされたインスタンスの Kafka トピックにアクセスできるかを設定できます。トピックを ServiceNow の名前空間にグループ化してから、名前空間を特定のドメインにリンクします。詳細については、「ドメインセパレーションと ストリームコネクト」を参照してください。
アーキテクチャ図
次の図は、ストリームコネクトの主要なコンポーネントと、ServiceNow およびサードパーティのアプリケーションとのこれらのコンポーネントの関連性、さらに Hermes を介した Kafka 環境との接続方法を示しています。
プラグイン
ストリームコネクトには、ServiceNow ストリームコネクト Installer [com.glide.hub.stream_connect.installer] プラグインが必要です。このプラグインにより、ストリームコネクトでメッセージベースのストリーミングデータを操作するためのライセンスコンポーネントが有効になります。
ユースケースの例
ある通信会社は、何百万ものネットワーク、デバイス、施設運用システムおよび機器を監視しています。監視システムは、完全に運用されているネットワークを維持するために処理と対応が必要な何百万ものアラートを生成します。
メッセージは、モニタリングソースから Kafka 環境に内部的にプッシュされます。そこから、 ServiceNow Hermes Kafka クラスターに複製されます。これにより、メッセージを読み込み、ヘッダー、キー、およびペイロードのデータを解析して、新しいレコードをイベントテーブルに効率的に入力するスクリプトコンシューマーがトリガーされます。
関連する TSOM 製品機能はイベントデータを処理し、問題を解決するためのインシデントとフィールド作業指示書を迅速かつ効率的に作成することで、問題の解決までの時間を短縮します。
- 主要な仮定と意思決定基準
-
- データ量は増分かつ頻繁に発生します。
- データには、さまざまなツールからのさまざまなデバイスに関するメッセージが含まれています。
- データにプライマリレコードの要素のみが含まれているのか、それとも関連レコードの要素も含まれているのかを明確にします。
- データインポートがプロセス自動化に関連付けられているかどうかを確認します。
- ガイダンス
-
- 命名規則を使用してトピックを定義し、メッセージの処理を明確に指示します。たとえば、データが Solarwinds モニタリングツールソースから取得されている場合、トピックの名前は sn_streamconnect.solarwinds になります。トピックは、ナビゲーターの下にあります .
- Kafka にメッセージを生成する (および Hermes に複製する) 場合は、キーを定義して利用し、メッセージの配信と処理の順序を確保します。たとえば、メッセージを順番に保持するには、デバイス ID をキー値として使用して、メッセージをまとめて処理します。
- ヘッダー、キー、およびペイロード属性を利用して、複数のソースからの受信メッセージのスケーリングと効果的な解析を可能にします。
- スクリプトコンシューマーまたはフロートリガーコンシューマーを使用してトランザクションデータを取り込みます。例に従って、スクリプトコンシューマーにも同様の名前 (「Solarwinds スクリプトコンシューマー」など) を付けることができます。スクリプトコンシューマーは、ナビゲーターの下にあります .
- スクリプトコンシューマースクリプトは、メッセージコンテンツを解析して、メッセージが関連するデバイスを識別し、それに応じて処理します。注:上記のコードは、テーブルレコードに入力するためのメッセージデータの取り込みと解析に焦点を当てた部分的な代表的な例です。これは、実装をガイドするのに役立つことを目的としています。
- 命名規則を使用してトピックを定義し、メッセージの処理を明確に指示します。たとえば、データが Solarwinds モニタリングツールソースから取得されている場合、トピックの名前は sn_streamconnect.solarwinds になります。トピックは、ナビゲーターの下にあります .