2.12.1 Kafka受付の機能
Kafka受付を利用することで,KafkaからKafkaインバウンドアダプタを経由してメッセージを取得し,ビジネスプロセスに渡すことができます。また,ビジネスプロセス内でデータ変換アクティビティなどを使用してメッセージのデータを編集することもできます。
Kafka受付を利用したデータの流れを次に示します。ここでは,Kafkaから取得したメッセージを「レコード」と表記します。
図中の1.〜6.について説明します。
-
Kafkaインバウンドアダプタから,インバウンドアダプタ連携を使用してレコードを受け取ります。
Kafkaインバウンドアダプタの詳細については,「2.12.3 Kafkaインバウンドアダプタの機能」を参照してください。
-
受け取ったレコードから要求電文を作成します。
要求電文の作成については,「(3) 要求電文の作成」を参照してください。
-
Kafka受付からビジネスプロセスに作成した要求電文を渡します。
-
ビジネスプロセスから応答が返ります。
-
Kafkaインバウンドアダプタに返却する応答データを作成します。
Kafka受付やビジネスプロセスで例外が発生した場合は,メッセージ処理でエラーとなったレコードの情報(トピック・パーティション・オフセット)を応答データに設定して,Kafkaインバウンドアダプタに返却します。すべてのレコードの処理が正常終了した場合,応答データには何も設定されません。
-
Kafkaインバウンドアダプタに応答データを返却します。
- 〈この項の構成〉
(1) Kafka受付の同時実行数
Kafka受付の同時実行数は1つです。同時実行数は変更できません。
(2) Kafka受付で使用できる通信モデル
Kafka受付の通信モデルは,非同期通信です。通信モデルに「同期」を設定した場合の動作は保証されません。
(3) 要求電文の作成
Kafka受付は,Kafkaインバウンドアダプタから渡されたレコードから,要求電文を作成します。
Kafka受付の要求電文の形式については,マニュアル「サービスプラットフォーム 開発ガイド 受付・アダプタ定義編」の「2.8.2 Kafka受付の電文フォーマットを作成する」を参照してください。
(a) レコードのキーおよび値の設定
Kafkaインバウンドアダプタから渡されたレコードのキーおよび値には,Kafka受付定義ファイルで指定したデシリアライザ(urecp-kafka.record-binary.encoding)によってデシリアライズされた値が設定されます。要求電文(ヘッダ)に設定するレコードのキー,および要求電文(ボディ)に設定するレコードの値には,レコードから取得した値を設定します。
レコードのキーがバイナリ形式のデータの場合は,バイナリ形式のデータのエンコーディングを行い,エンコーディング後の値を要求電文に設定します。
デシリアライザの設定については,マニュアル「サービスプラットフォーム リファレンス」の「3.14.1 Kafka受付定義ファイル」を参照してください。
(b) バイト配列形式のデータのエンコーディング
レコードのキーがバイト配列形式の場合は,Kafka受付定義ファイルのurecp-kafka.record-binary.encodingの設定値に応じてエンコードされます。エンコードされたレコードのキーの値は,要求電文の対応する要素値に設定されます。エンコードは,バイト配列の長さが1以上のときに行います。
また,レコードのヘッダの値は,文字セット「UTF-8」を使用してデコードされます。デコードされたレコードのヘッダの値は,ヘッダ電文の対応する要素値に設定されます。
(c) レコードのデータ型とデシリアライザの対応
レコード送信時のシリアライズする前のレコードのキーおよびレコードの型と,Kafka受付定義ファイルで設定するデシリアライザの対応を次に示します。レコードのキーおよびレコードの型と,デシリアライザの設定が一致しない場合は,値の取得時にエラーが発生する,または意図しない値になることがあります。
レコードのキーおよびレコードの型 |
デシリアライザの設定 |
---|---|
java.lang.String |
StringDeserializer |
byte[] |
ByteArrayDeserializer |
(d) レコードの値とデシリアライザの対応
電文形式およびレコードの値に応じて,次のデシリアライザを設定してください。
電文形式 |
レコードの値 |
デシリアライザの設定 |
---|---|---|
XML |
JSON形式 |
StringDeserializer |
XML形式 |
||
バイナリ |
CSV形式 |
ByteArrayDeserializer |
文字列 |
||
バイナリデータ |
||
any |
文字列 |
ByteArrayDeserializer |
バイナリデータ |
(4) ビジネスプロセスで処理できるレコード数
Kafkaインバウンドアダプタから渡されるレコードには,1つのレコードの情報が格納されています。そのため,ビジネスプロセスで処理できるレコード数は1つです。
(5) ビジネスプロセスとの関係
ビジネスプロセスとKafka受付が構築できる接続関係は次のどちらかです。
-
ビジネスプロセスとKafka受付の接続関係が1:1の場合
-
ビジネスプロセスとKafka受付の接続関係が1:nの場合
例を次に示します。
(例1)ビジネスプロセスとKafka受付の接続関係が1:1の場合
- 説明
-
-
1つのKafka受付に関連づけるビジネスプロセスは1つ
-
1つのビジネスプロセスに関連づけるKafka受付は1つ
-
(例2)ビジネスプロセスとKafka受付の接続関係が1:nの場合
- 説明
-
-
1つのKafka受付に関連づけるビジネスプロセスは1つ
-
1つのビジネスプロセスに関連づけるKafka受付は複数
-
(6) Kafkaインバウンドアダプタとの関係
KafkaインバウンドアダプタとKafka受付が構築できる接続関係は次のどちらかです。
-
KafkaインバウンドアダプタとKafka受付が1:1の接続関係の場合
-
KafkaインバウンドアダプタとKafka受付が1:nの接続関係の場合
例を次に示します。
(例1)KafkaインバウンドアダプタとKafka受付が1:1の接続関係の場合
- 説明
-
-
1つのKafkaインバウンドアダプタに関連づいているKafka受付は1つ
-
1つのKafka受付に関連づいているKafkaインバウンドアダプタは1つ
-
(例2)KafkaインバウンドアダプタとKafka受付が1:nの接続関係の場合
- 説明
-
-
1つのKafkaインバウンドアダプタに関連づいているKafka受付は複数
-
1つのKafka受付に関連づいているKafkaインバウンドアダプタは1つ
-
(7) Kafka受付使用時のトランザクション
ビジネスプロセスを呼び出すときのKafka受付のトランザクションを次に示します。