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 を使用する場合にのみサポートされます。 |