JMS Client

JMS(Java Message Service)は、広く使用されているメッセージング API で、Java Platform, Enterprise Edition に含まれています。Confluent JMS Client (kafka-jms-client)は、JMS 1.1 プロバイダーインターフェイス の実装の 1 つであり、これにより、Apache Kafka® や Confluent Platform を JMS メッセージブローカーとして使用することができます。

[kafka-jms-client] <--- kafka protocol ---> [kafka broker]

Confluent の kafka-jms-client を使用して記述されたアプリケーションは、kafka-jms-client を使用して記述された他のアプリケーション、およびその他の Kafka クライアントライブラリを使用してメッセージの生成や消費を行う任意のアプリケーションとメッセージのやり取りができます。

このクライアントの目的は、JMS API に対応して記述された既存のアプリケーションで、他の JMS ブローカーの代わりとして、Kafka へのパブリッシュとサブスクライブを行えるようにすることです。

(既存のブローカーを置き換えずに)|ak| と既存の JMS ブローカーを連携させたい場合は、Kafka Connect API または JMS 用のプレビルト型 Kafka ソースコネクターまたはシンクコネクターを確認することをお勧めします。

新規に Java アプリケーションを記述する場合は、Java Kafka プロデューサー/コンシューマー API を使用することをお勧めします。これらの API では、kafka-jms-client では利用できない高度な機能が提供されているためです。

JMS 1.1 の互換性

Kafka JMS Client は、JMS 1.1 仕様を可能な限り完全に実装したものです。ただし、JMS の概念の中には、Kafka と 1 対 1 で対応していないものや、Kafka では意味をなさないもの(非永続的メッセージなど)もあります。

JMS ブローカーは通常、JMS 仕様におけるトピックとキューの機能を反映した固有の Topic および Queue の機能を提供します。これに対して、Kafka が提供するのは、パーティション分割されたトピックという 1 つの抽象化のみです。これは、実際には分散型のコミットログであり、従来型メッセージングシステムにおけるトピックの概念とは動作が異なります。実際の場面では、Kafka トピックにより、従来のメッセージングシステムにおけるトピックやキューの動作を疑似的に実現することができます。

JMS 1.1 の互換性に関するその他の情報を以下に記載します。

機能

両方の JMS メッセージングモデルをサポート:

  • パブリッシュ/サブスクライブ(トピック)
  • ポイントツーポイント(キュー)

以下のものを含む、すべての JMS メッセージタイプをサポート:

  • TextMessage
  • BytesMessage
  • MapMessage
  • StreamMessage
  • ObjectMessage

JMS ヘッダーの値の処理:

  • JMSDestination - 送信時に設定(上書き)され、送信先ではメッセージ内で確認できます。
  • JMSDeliveryMode - 送信時に DEAULT_DELIVERY_MODE(PERSISTED)に設定(上書き)されます。
  • JMSExpiration - 無視されます。送信時に 0 で上書きされます。
  • JMSPriority - 無視されます。送信時に DEFAULT_PRIORITY(4)に設定(上書き)されます。
  • JMSMessageID - 送信時にメッセージの一意の ID に設定(上書き)され、送信先ではメッセージ内で確認できます。
  • JMSTimestamp - MessageProducer.setDisableMessageTimestamp を使用して無効にされていない場合、メッセージ送信時に設定(上書き)され、送信先に送信されます。
  • JMSCorrelationID - ユーザーが設定した値が送信先に送信されます。
  • JMSReplyTo - ユーザーが設定した値が送信先に送信されます。
  • JMSType - ユーザーが設定した値が送信先に送信されます。
  • JMSRedelivered - 無視されます。送信時に false に設定(上書き)されます。

永続トピック/キューのみがサポートされます。

未サポートの機能

以下の機能については、サポートが限定的であるか、サポートされていません。

セッション

メソッド 注意事項
createDurableSubscriber(Topic, String) 永続サブスクライバーはサポートされていません。
createDurableSubscriber(Topic, String, String, boolean) 永続サブスクライバーはサポートされていません。
getMessageListener() セッションベースの MessageListener はサポートされていません。
setMessageListener(MessageListener) セッションベースの MessageListener はサポートされていません。
rollback() Kafka ではトランザクションはサポートされていません。
recover() Kafka ではトランザクションはサポートされていません。
commit() Kafka ではトランザクションはサポートされていません。
createBrowser(Queue, String) メッセージセレクターを伴う QueueBrowser はサポートされていません。
unsubscribe(String) 永続サブスクライバーはサポートされていません。
createConsumer(Destination, String) メッセージセレクターはサポートされていません。設定された場合、例外がスローされます。
createConsumer(Destination, String, boolean) メッセージセレクターはサポートされていません。設定された場合、例外がスローされます。
createTemporaryTopic() Kafka では、一時的トピックの概念がありません。
getTransacted() トランザクションはサポートされていません。必ず false が返されます。
createTemporaryQueue() Kafka では、一時的トピックの概念がありません。

ConnectionFactory

メソッド 注意事項
createConnection(String, String) サポートされていません。認証は、Kafka 構成プロパティを使用する場合のみサポートされます。

接続

メソッド 注意事項
setClientID(String) クライアント ID の設定は、KafkaConnectionFactory に渡される設定で client.id を使用する場合にのみサポートされます。