Kafka API の使用
Kafka は、広範囲の言語に渡る豊富な API とクライアントのセットを提供しています。 API には、コア API、Streams API、および Connect API が含まれます。
- Kafka のコア API (コンシューマー、プロデューサー、および Admin API) 1 つ以上の Kafka トピックとの間で直接メッセージを送受信するために使用します。 Kafka Admin クライアントは、Kafka リソースを管理するための Kafka API を通じてシンプルなインターフェースを提供します。 トピックを作成、削除、および管理できます。 コンシューマー・グループおよび構成の管理のためにも Admin クライアントを使用できます。
- ストリームAPI トピック間のイベントを簡単に消費、変換、生成するための、より高度なストリーム処理API。
- コネクトAPI 再利用可能な、または標準的な統合によって、データベースなどの外部システムとの間でイベントをストリーミングできるようにするフレームワーク。
以下の表に、Event Streams で使用可能なものを要約します。
| Enterprise プラン | 標準プラン | ライト・プラン | |
|---|---|---|---|
| クラスターの Kafka バージョン | Kafka 3.8 | Kafka 3.8 | Kafka 3.8 |
| 推奨される Kafka クライアントの最小バージョン | Kafka 2.6.0 またはそれ以降 | Kafka 2.6.0 またはそれ以降 | Kafka 2.6.0 またはそれ以降 |
| サポートされるクライアント・バージョン | すべての推奨クライアントのサポートの要約 を参照してください。 | ||
| Kafka Connect のサポート | ある | ある | いいえ |
| Kafka Streams のサポート | ある | ある | いいえ |
| ksqlDB のサポート | ある | いいえ | いいえ |
| 認証要件 | クライアントは、SASL Plainメカニズムを使用した認証をサポートし、 TLSv1.2 プロトコルのServer Name Indication(SNI)拡張を使用しなければならない。 | クライアントは、SASL Plainメカニズムを使用した認証をサポートし、 TLSv1.2 プロトコルのServer Name Indication(SNI)拡張を使用しなければならない。 | クライアントは、SASL Plainメカニズムを使用した認証をサポートし、 TLSv1.2 プロトコルのServer Name Indication(SNI)拡張を使用しなければならない。 |
Event Streams で使用する Kafka クライアントの選択
Kafka API の公式クライアントは Java で書かれており、最新の機能やバグ修正が含まれています。 このAPIの詳細については、 Kafka Producer API 3.8 および Kafka Consumer API 3.8 を参照のこと。
その他の言語の場合は、以下のいずれかのクライアントを実行します。すべてのクライアントは Event Streamsでテストされます。
すべての推奨されるクライアントのサポートの概要
| クライアント | 言語 | 推奨されるバージョン | サポートされる最小バージョン [1] | サンプルのリンク先 |
|---|---|---|---|---|
| 公式の Apache Kafka クライアント: | ||||
| Apache Kafka クライアント | Java | 3.8.1 またはそれ以降 | 2.5.0 | Java コンソール・サンプル |
| サード・パーティー・クライアント: | ||||
| confluent-kafka-javascript | Node.js | 最新バージョン | 1.0.0 | |
| confluent-kafka-python | Python | 最新バージョン | 1.4.0 | Kafka Python サンプル |
| confluent-kafka-go | Go | 最新バージョン | 1.4.0 | |
| librdkafka | C または C++ | 最新バージョン | 1.4.0 | |
| node-rdkafka | Node.js | 最新バージョン | 2.8.0 | Node.js サンプル |
| サラマ | Go | 最新バージョン | 1.40.0 | サラマの例 |
クライアントの Event Streams への接続
Event Streams に接続するように Java クライアントを構成する方法については、クライアントの構成を参照してください。
Kafka API クライアントの構成
接続を確立するために、クライアントは最低でも TLSv1.2 上で SASL PLAIN または SASL OAUTHBEARER を使い、ユーザー名とブートストラップ・サーバーのリストを要求するように設定されなければならない。 TLSv1.2 接続が暗号化されていることを確認し、ブローカーの信頼性を検証する(中間者攻撃を防ぐため)。 SASL により、すべての接続について認証が適用されます。
ユーザー名、パスワード、およびブートストラップ・サーバーのリストを取得するには、サービス・インスタンスに対してサービス・クレデンシャル・オブジェクトまたはサービス・キーが必要です。 これらのオブジェクトの作成について詳しくは、Event Streams への接続を参照してください。
SASL PLAIN の使用
以下のストリングとプロパティーを使用します。
bootstrap_endpointsストリングをブートストラップ・サーバーのリストとして使用し、このホストとポートのペアのストリングを Kafka クライアントに渡します。- ユーザー名とパスワードとして
userプロパティーとapi_keyプロパティーを使用します。
Java ク ラ イ ア ン ト に対 し て、 以下の例は、 プ ロ パテ ィ の最小セ ッ ト を示 し ます。 ${USERNAME}、 ${PASSWORD}、 ${BOOTSTRAP_ENDPOINTS} は、 以前に取得 し た値に置 き 換え ら れます。
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="${USERNAME}" password="${PASSWORD}";
security.protocol=SASL_SSL
ssl.protocol=TLSv1.2
ssl.enabled.protocols=TLSv1.2
ssl.endpoint.identification.algorithm=HTTPS
バージョン 0.10.2.1 より前の Kafka クライアントを使用する場合、 sasl.jaas.config プロパティはサポートされていませんので、代わりに JAAS 構成ファイルでクライアント構成を提供する必要があります。
Java クライアントで SASL OAUTHBEARER を使用する v3.4-. 4.0
Java クライアントのSASLメカニズムを設定する前に、2つの前提条件がある:
- Kafka Java クライアントの最低対応バージョンは 3.4 ( 3.6 以上が望ましい)。
- 追加のjarパッケージをMaven Centralからダウンロードし、クラスパスで利用できるようにする必要がある。
ビルド・システムにMavenを使用している場合は、依存関係セクションの pom.xml ファイルに以下の情報を追加する:
<dependency>
<groupId>com.ibm.cloud.eventstreams</groupId>
<artifactId>oauth-client</artifactId>
<version>1.4.0</version>
</dependency>
ビルドシステムで Gradle を使用する場合は、依存セクションの build.gradle ファイルに以下の情報を追加する:
implementation com.ibm.cloud.eventstreams:oauth-client:1.4.0
IBM Cloud® Identity and Access Management Identity Service はベアラートークンを生成する複数の方法をサポートしており、この oauth クライアントライブラリではそのうちの 2 つをサポートしている:
- API キー
- 信頼されたプロファイルとコンピュート・リソース・トークン
APIキーでSASL OAUTHBEARERを使用する
以下のストリングとプロパティーを使用します。
BOOTSTRAP_ENDPOINTSストリングをブートストラップ・サーバーのリストとして使用し、このホストとポートのペアのストリングを Kafka クライアントに渡します。IAMOAuthBearerLoginCallbackHandlerは、jar パッケージcom.ibm.cloud.eventstreams:oauth-client:+によって提供されます。- IBM Cloud® Identity and Access Management のトークンエンドポイント
https://iam.cloud.ibm.com/identity/tokenは、jaas config で指定されたグラントタイプを使用して API キーからトークンを生成するように設定されています。 これはクライアント・サイドで行われるため、APIキーがサーバー・サイドに送信されることはない。 - Cloud Identity and Access Managementの鍵エンドポイント
https://iam.cloud.ibm.com/identity/keysは、トークンを検証するように構成されています。 grant_typesasl.jaas.configはurn:ibm:params:oauth:grant-type:apikeyapikeyの は、クライアント側でベアラートークンを生成するために使用されるAPIキーです。sasl.jaas.configユーザーIDかサービスIDのどちらかである。
Java ク ラ イ ア ン ト に対 し て、 以下の例は、 プ ロ パテ ィ の最小セ ッ ト を示 し ます。 こ こ では、 ${BOOTSTRAP_ENDPOINTS} と ${APIKEY} を、 以前に取得 し た値に置 き 換え てい ます。
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.oauthbearer.token.endpoint.url=https://iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://iam.cloud.ibm.com/identity/keys
sasl.login.callback.handler.class=com.ibm.cloud.eventstreams.oauth.client.IAMOAuthBearerLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required grant_type="urn:ibm:params:oauth:grant-type:apikey" apikey="${APIKEY}";
信頼されたプロファイルとコンピュート・リソース・トークンを使用したSASL OAUTHBEARERの使用
すべてのプロパティは、 sasl.jaas.config が異なる以外は、 APIキーの 説明と同じである。
grant_typesasl.jaas.configは。urn:ibm:params:oauth:grant-type:cr-tokenprofile_idのsasl.jaas.configは、信頼されたプロファイルIDを格納するファイルの場所である。 このファイルは、 Kafka クライアント・コードを実行している Kubernetes ポッドに読み取り専用ボリュームとしてマウントし、 Kafka クライアント・コードが利用できるようにすることができる。cr_tokensasl.jaas.configにあるのは、 クライアント・コードを実行している ポッドからのサービス・アカウント・トークンを保存するファイルの場所です。 Kafka Kubernetes 詳細は サービス・ アカウント ・トークンとは を参照。
以下に例を示します。
bootstrap.servers=${BOOTSTRAP_ENDPOINTS}
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.oauthbearer.token.endpoint.url=https://iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://iam.cloud.ibm.com/identity/keys
sasl.login.callback.handler.class=com.ibm.eventstreams.oauth.client.IAMOAuthBearerLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required grant_type="urn:ibm:params:oauth:grant-type:cr-token" profile_id="${TRUSTED_PROFILE_ID_FILE_PATH}" cr_token="${SERVICE_ACCOUNT_TOKEN_FILE_PATH}";
信頼できるプロフィールを設定する方法については、こちらをご覧ください。
oauth クライアントのソースコードは Event Streams Java SDK を参照しています。
サンプルのクライアントコードは、 Event Streams のサンプルを参照してください。
v4.1 以降の Java クライアントで SASL OAUTHBEARER を使用する
v4.1 以上の Kafka Java クライアントを使用する場合、クライアントはより新しいバージョンの Event Streams oauth クライアントを使用する必要がある。このクライアントは Kafka のデフォルトのコールバックハンドラと適切なトークンレトリバーに依存する。
ビルド・システムにMavenを使用している場合は、依存関係セクションの pom.xml ファイルに以下の情報を追加する:
<dependency>
<groupId>com.ibm.cloud.eventstreams</groupId>
<artifactId>oauth-client</artifactId>
<version>2.0.0</version>
</dependency>
ビルドシステムで Gradle を使用する場合は、依存セクションの build.gradle ファイルに以下の情報を追加する:
implementation com.ibm.cloud.eventstreams:oauth-client:2.0.+
IBM Cloud® Identity and Access Management Identity Service は、ベアラートークンを生成する複数の方法をサポートしており、 この oauth クライアントライブラリではそのうちの 2 つをサポートしている:
- API キー
- 信頼されたプロファイルとコンピュート・リソース・トークン
APIキーでSASL OAUTHBEARERを使用する
必須の bootstrap.servers プロパティと、特定のプロデューサー、コンシューマー、管理者設定に加えて、以下の文字列とプロパティを使用します。
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \
grant_type="urn:ibm:params:oauth:grant-type:apikey" \
apikey="${YOUR_IBM_CLOUD_API_KEY}";
sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginCallbackHandler
sasl.oauthbearer.jwt.retriever.class=com.ibm.cloud.eventstreams.oauth.client.IAMTokenRetriever
sasl.oauthbearer.token.endpoint.url=https://private.iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://private.iam.cloud.ibm.com/identity/keys
コンテナ化された環境で、SASL OAUTHBEARERと信頼されたプロファイルおよびコンピュート・リソース・トークンを使用する
詳細は、 コンピュート・リソースのIAMトークンの生成を 参照してください。
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \
grant_type="urn:ibm:params:oauth:grant-type:cr-token" \
cr_token="/path/to/cr-token-file" \
profile_id="/path/to/profile-id-file";
sasl.login.callback.handler.class=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginCallbackHandler
sasl.oauthbearer.jwt.retriever.class=com.ibm.cloud.eventstreams.oauth.client.IAMTokenRetriever
sasl.oauthbearer.token.endpoint.url=https://private.iam.cloud.ibm.com/identity/token
sasl.oauthbearer.jwks.endpoint.url=https://private.iam.cloud.ibm.com/identity/keys
システム・プロパティー org.apache.kafka.sasl.oauthbearer.allowed.urls
Kafka 4.0 より、クライアントはSASL OAUTHBEARERトークンとjwksエンドポイントの許可されたURLを設定するシステムプロパティを必要とする。
詳細については、 システムのプロパティを 参照してください。
Apache Kafka ディストリビューションが提供する CLI クライアント・シェル・スクリプトを使用する場合、システム・プロパティは KAFKA_OPTS 環境変数を使用して設定することもできます。
export KAFKA_OPTS="-Dorg.apache.kafka.sasl.oauthbearer.allowed.urls=https://private.iam.cloud.ibm.com/identity/keys,https://private.iam.cloud.ibm.com/identity/token,https://api.metadata.cloud.ibm.com/identity/v1/iam_tokens"
Java 以外のクライアントで SASL OAUTHBEARER を使用する
その他の Kafka クライアント・リバーについては、OAUTHBEARER サポートの実装方法に関する資料を参照してください。 以下に例を示します。
- sarama:
AccessTokenProviderインターフェースの実装が必要です。 - librdkafka:
oauthbearer_token_refresh_cbコールバックの実装が必要です。
API キーを使用して IBM Cloud IAM トークンを生成する方法については、 IBM Cloud® Identity and Access Managementの 文書 を参照してください。
-
継続的なテストで検証された最も初期のバージョン。 一般的には、過去12ヶ月以内に入手可能な最初のバージョン、または重大な問題が存在することが知られている場合は新しいバージョンとなります。 リストにあるクライアントのいずれかを実行できない場合は、以下の最小要件を満たす他のサードパーティクライアント(例えば、 librdkafka )を使用することができます。 1. Kafka 1.40以降をサポートします。 2. TLSv1.2 で SASL PLAIN を使用して接続し、認証することができる。 TLS、サーバーのホスト名が TLS ハンドシェイクに含まれる場合のSNI拡張をサポート。 4. 楕円曲線暗号化をサポートします。 いずれの場合も、最新バージョンのクライアントを使用してください。 ↩︎