この記事では、Event Hubs for Apache Kafka を使用するときに発生する可能性がある問題のトラブルシューティングのヒントを示します。
サーバー ビジー例外
Kafka の調整が原因で ThrottledRequests メトリックが表示される場合があります。 AMQP クライアントでは、サービスの調整時に Event Hubs から直ちにサーバー ビジー例外が返されます。 これは、"後でもう一度お試しください" というメッセージと同じです。 Kafka では、受信メッセージは受信確認されるまでに遅延が発生しますが、送信メッセージでは配信が遅れます。 遅延の長さは、生成およびフェッチ応答の throttle_time_ms
として、ミリ秒単位で返されます。 ほとんどの場合、これらの遅延要求は、Event Hubs ダッシュボードの ThrottledRequests メトリックとしてログに記録されません。 代わりに、スループットがプロビジョニングされたクォータを超えたことを示すインジケーターとして、応答の throttle_time_ms
値を使用する必要があります。
トラフィックが過剰な場合、サービスの動作は次のようになります。
- 要求の生成の遅延が要求タイムアウト (request.timeout.ms) を超えた場合、Event Hubs は ポリシー違反 エラー コードを返します。
- フェッチ要求の遅延が要求タイムアウトを超えた場合、Event Hubs は要求を制限された状態としてログに記録し、エラーコードを返さず、空のレコードセットで応答します。
レコードを受信していない
コンシューマーがレコードを取得しておらず、継続的に再調整している場合があります。 このシナリオでは、コンシューマーはレコードを取得しておらず、継続的に再調整しています。 この発生時に例外やエラーは生じませんが、Kafka ログには、グループへの再参加とパーティションの割り当てを試行しているときにコンシューマーがスタックしていることが示されます。 次のいくつかの原因が考えられます。
-
request.timeout.ms
が推奨値の 60000 以上であることと、session.timeout.ms
が推奨値の 30000 以上であることを確認します。 これらの設定が低すぎると、コンシューマーのタイムアウトが発生し、再調整が発生する可能性があります (これによりタイムアウトが増え、再調整が増えるなど)。 - 構成がこれらの推奨値と一致し、継続的な再調整が引き続き発生する場合は、問題を自由に開くことができます (デバッグに役立つよう、構成全体を問題に含めてください)。
圧縮とメッセージ形式バージョンの問題
Kafka 用 Event Hubs では現在、 gzip
圧縮アルゴリズムのみがサポートされています。 他のアルゴリズムが使用されている場合、クライアント アプリケーションにはメッセージ形式のバージョン エラー ( The message format version on the broker does not support the request.
など) が表示されます。
サポートされていない圧縮アルゴリズムを使用する必要がある場合は、ブローカーに送信する前にその特定のアルゴリズムでデータを圧縮し、受信後に展開することは有効な回避策です。 メッセージ本文はサービスの単なるバイト配列であるため、クライアント側の圧縮とその解除によって問題が発生することはありません。
UnknownServerException
次の例のような Kafka クライアント ライブラリから UnknownServerException を受け取る場合があります。
org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request
Microsoft サポートのチケットを開きます。 デバッグレベルのログ記録と例外のタイムスタンプ (UTC) は、問題のデバッグに役立ちます。
その他の問題
Event Hubs で Kafka を使用するときに問題が発生する場合は、次の項目を確認してください。
- ファイアウォールによるトラフィックのブロック - ポート 9093 がファイアウォールによってブロックされていないことを確認してください。
-
TopicAuthorizationException - この例外の最も一般的な原因は次のとおりです。
- 構成ファイル内の接続文字列の入力ミス。または、
- Basic レベルの名前空間で Kafka 用 Event Hubs を使用しようとしている。 Kafka 機能の Event Hubs は、Basic 層ではサポートされていません。
- Kafka バージョンの不一致 - Kafka エコシステム用 Event Hubs では、Apache Kafka バージョン 1.0 以降がサポートされます。 Kafka バージョン 0.10 以降を使用する一部のアプリケーションは、Kafka プロトコルの下位互換性のために動作することがありますが、古い API バージョンを使用しないことを強くお勧めします。 Kafka バージョン 0.9 以前では、必要な SASL プロトコルがサポートされず、Event Hubs に接続できません。
- Kafka で使用するときの AMQP ヘッダーでの異常なエンコーディング - AMQP 経由でイベント ハブにイベントを送信するときに、AMQP ペイロード ヘッダーが AMQP エンコードでシリアル化されます。 Kafka コンシューマーでは、AMQP からヘッダーを逆シリアル化しません。 ヘッダー値を読み取るには、AMQP ヘッダーを手動でデコードします。 または、Kafka プロトコルを使用していることがわかっている場合は、AMQP ヘッダーの使用を回避できます。 詳細については、こちらの GitHub の問題のページを参照してください。
- SASL 認証 - Event Hubs で必要な SASL 認証プロトコルと連携するフレームワークを取得することは、見かけ以上に難しい場合があります。 SASL 認証でフレームワークのリソースを使用して、構成のトラブルシューティングを行うことができるかどうかを確認してください。
制限
Apache Kafka と Event Hubs Kafka。 ほとんどの場合、Azure Event Hubs の Kafka インターフェイスには、Apache Kafka の場合と同じ既定値、プロパティ、エラー コード、一般的な動作があります。 これら 2 つのインスタンスが明示的に異なる (または Event Hubs が Kafka に課さない制限を課す) インスタンスを次に示します。
-
group.id
プロパティの最大長が 256 文字である -
offset.metadata.max.bytes
の最大サイズは 1,024 バイトです - オフセット コミットは、最大内部ログ サイズが 1 MB のパーティションごとに、1 秒あたり 4 回の呼び出しに調整される
次のステップ
Event Hubs と Kafka 用 Event Hubs の詳細については、次の記事を参照してください。