19.3. クライアントをアップグレードするストラテジー
Kafka クライアントをアップグレードすると、Kafka の新しいバージョンで導入された機能、修正、改善の恩恵を受けることができます。アップグレードされたクライアントは、他のアップグレードされた Kafka コンポーネントとの互換性を維持します。クライアントのパフォーマンスと安定性も向上する可能性があります。
スムーズな移行を確保するために、Kafka クライアントとブローカーをアップグレードするための最適なアプローチを検討してください。選択するアップグレード戦略は、ブローカーを最初にアップグレードするかクライアントを最初にアップグレードするかによって異なります。Kafka 3.0 以降、ブローカーとクライアントを独立して任意の順序でアップグレードできるようになりました。クライアントまたはブローカーをアップグレードするかどうかは、最初に、アップグレードする必要があるアプリケーションの数や許容できるダウンタイムの量など、いくつかの要因によって決まります。
ブローカーより前にクライアントをアップグレードすると、一部の新機能はブローカーによってまだサポートされていないため、機能しない可能性があります。ただし、ブローカーは、異なるバージョンで実行され、異なるログメッセージバージョンをサポートするプロデューサーとコンシューマーを処理できます。
Kafka 3.0 より古いバージョンの Kafka を使用する場合のクライアントのアップグレード
Kafka 3.0 より前では、log.message.format.version プロパティー (またはトピックレベルの message.format.version プロパティー) を使用して、ブローカーの特定のメッセージ形式を設定していました。これにより、ブローカーは、古いメッセージ形式を使用していた古い Kafka クライアントをサポートできるようになりました。そうしないと、ブローカーは古いクライアントからのメッセージを変換する必要があり、これには大幅なパフォーマンスコストがかかります。
Apache Kafka Java クライアントは、バージョン 0.11 以降、最新のメッセージ形式バージョンをサポートしています。すべてのクライアントが最新のメッセージバージョンを使用している場合は、ブローカーをアップグレードするときに、log.message.format.version または message.format.version のオーバーライドを削除できます。
ただし、古いメッセージ形式バージョンを使用しているクライアントがまだある場合は、まずクライアントをアップグレードすることを推奨します。コンシューマーから始めて、ブローカーのアップグレード時に log.message.format.version または message.format.version のオーバーライドを削除する前に、プロデューサーをアップグレードします。これにより、すべてのクライアントが最新のメッセージ形式バージョンをサポートできるようになり、アップグレードプロセスがスムーズに進むようになります。
次のメトリックを使用して、Kafka クライアントの名前とバージョンを追跡できます。
-
kafka.server:type=socket-server-metrics,clientSoftwareName=<name>,clientSoftwareVersion=<version>,listener=<listener>,networkProcessor=<processor>
次の Kafka ブローカーメトリックは、メッセージのダウンコンバージョンのパフォーマンスを監視するのに役立ちます。
-
kafka.network:type=RequestMetrics,name=MessageConversionsTimeMs,request={Produce|Fetch}はメッセージ変換の実行にかかる時間に関するメトリックを提供します。 -
kafka.server:type=BrokerTopicMetrics,name={Produce|Fetch}MessageConversionsPerSec,topic=(-.\w+)は一定期間に変換されたメッセージの数に関するメトリックを提供します。