新着情報
3.3 以降の 4.0 の新機能
このセクションでは、バージョン 3.3 からバージョン 4.0 への変更点について説明します。以前のバージョンの変更点については、変更履歴を参照してください。
Apache Kafka 4.0 クライアントのアップグレード
Spring for Apache Kafka は、Apache Kafka クライアントバージョン 4.0.0 を使用するようにアップグレードされました。このアップグレードにより、いくつかの重要な変更がもたらされます。
Kafka 4.0 が KRaft モードに完全に移行したため、ZooKeeper ベースの機能はすべて削除されました。
ZooKeeper 依存関係がプロジェクトから削除されました
組み込み Kafka テストフレームワークは KRaft モードのみを使用するようになりました
EmbeddedKafkaZKBrokerクラスは削除され、すべての機能はEmbeddedKafkaKraftBrokerによって処理されるようになりました。
埋め込み Kafka テストフレームワークの変更
テストインフラストラクチャが大幅に更新されました。
EmbeddedKafkaRuleJUnit 4 ルールは削除されました@EmbeddedKafkaアノテーションは、ZooKeeper 関連のプロパティが削除されて簡素化されました。KRaft モードが唯一のオプションになったため、
kraftプロパティは削除されました。zookeeperPort、zkConnectionTimeout、zkSessionTimeoutのような ZooKeeper 固有のプロパティは削除されましたKafkaClusterTestKit インポートは KRaft モード用の新しいパッケージを使用するようになりました
KRaft モードでの静的ポート割り当ての制限に対処するために、いくつかのテストが更新されました。
KRaft の要件を満たすために、テストの複製係数に調整が行われました。
ConsumerRecords コンストラクターの変更
ConsumerRecords コンストラクターに Map パラメーターが追加されましたが、これはフレームワーク全体で修正されています。このコンストラクターを直接使用するアプリケーションは、コードを更新する必要があります。
プロデューサーインターフェースの更新
Kafka プロデューサーインターフェースからの新しいメソッドが実装されました:
registerMetricForSubscriptionunregisterMetricFromSubscription
非推奨となりた機能の削除
いくつかの非推奨項目が削除されました:
非推奨の
partitionerクラスはランタイムヒントから削除されましたString consumerGroupIdを使用する非推奨のsendOffsetsToTransactionメソッドは削除されました
Kafka ストリーム API の変更
KafkaStreamBrancherは、非推奨となりたbranch()メソッドの代わりに新しいsplit()およびbranch()メソッドを使用するように更新されました。DeserializationExceptionHandlerは新しいErrorHandlerContextを使用するように更新されました
Apache Kafka 4.0.0 に関連する内部 API の更新
BrokerAddressクラスは、非推奨のkafka.cluster.BrokerEndPointの代わりにorg.apache.kafka.server.network.BrokerEndPointを使用するようになりました。GlobalEmbeddedKafkaTestExecutionListenerは KRaft モードでのみ動作するように更新されました
新しいコンシューマー再調整プロトコル
Spring for Apache Kafka 4.0 は、Kafka 4.0 の新しいコンシューマーリバランスプロトコルである KIP-848 [Apache] (英語) をサポートしています。詳細については、新しいコンシューマーリバランスプロトコルのドキュメントを参照してください。
複数値ヘッダーをサポート
JsonKafkaHeaderMapper および SimpleKafkaHeaderMapper は、Kafka レコードの複数値ヘッダーマッピングをサポートします。詳細については、複数値ヘッダーマッピングをサポートを参照してください。
追加の RecordInterceptor を構成する
リスナーコンテナーは、getRecordInterceptor() によるインターセプターのカスタマイズをサポートするようになりました。詳細はメッセージリスナコンテナーセクションを参照してください。
バッチリスナーにおけるレコードごとの監視
バッチリスナーの使用時に、各レコードの観測値を取得できるようになりました。詳細については、バッチリスナーの可観測性を参照してください。
Kafka キュー(共有コンシューマー)のサポート
Spring for Apache Kafka は、Apache Kafka 4.0.0 の一部であり KIP-932 を実装した共有コンシューマーを通じて、Kafka キューへの早期アクセスサポートを提供するようになりました。これにより、複数のコンシューマーが同じパーティションから同時に消費できる協調消費が可能になり、従来のコンシューマーグループと比較して優れた負荷分散が実現します。詳細については、Kafka キュー (シェアコンシューマー) を参照してください。
Jackson 3 サポート
Spring for Apache Kafka は、既存の Jackson 2 サポートに加え、Jackson 3 も包括的にサポートするようになりました。Jackson 3 は自動的に検出され、利用可能な場合は優先的にサポートされるため、パフォーマンスが向上し、最新の JSON 処理機能も提供されます。
すべての Jackson 2 クラスに、一貫した命名と型の安全性が向上した Jackson 3 の対応するクラスが追加されました。
JsonKafkaHeaderMapperはDefaultKafkaHeaderMapperに取って代わりますJacksonJsonSerializer/DeserializerはJsonSerializer/Deserializerに取って代わりますJacksonJsonSerdeはJsonSerdeに取って代わりますJacksonJsonMessageConverterファミリーがJsonMessageConverterファミリーに取って代わるJacksonProjectingMessageConverterはProjectingMessageConverterに取って代わりますDefaultJacksonJavaTypeMapperはDefaultJackson2JavaTypeMapperに取って代わります
新しい Jackson 3 クラスは、型の安全性を強化するために汎用 ObjectMapper の代わりに JsonMapper を使用し、Jackson 3 の改善されたモジュールシステムとパフォーマンスの最適化を活用します。
移行パス : 既存のアプリケーションは Jackson 2 でも変更なく動作し続けます。Jackson 3 に移行するには、クラスパスに Jackson 3 を追加し、クラス参照を更新して新しい Jackson 3 相当のものを使用するだけです。フレームワークは両方のバージョンが存在する場合、自動的に Jackson 3 を検出し、優先的に使用します。
下位互換性 : すべての Jackson 2 クラスは非推奨ですが、完全に機能します。将来のメジャーバージョンで削除される予定です。
設定例については、直列化、逆直列化、メッセージ変換を参照してください。
Spring Retry 依存関係の削除
Spring for Apache Kafka は Spring Retry への依存を廃止し、Spring Framework 7 で導入されたコアリトライサポートを採用しました。これはフレームワーク全体のリトライ設定と API に影響を与える重大な変更です。
必要な BackOff 値を事前に生成する BackOffValuesGenerator は、BackOffPolicy ではなく Spring Framework の BackOff インターフェースと直接連携するようになりました。これらの値はリスナーインフラストラクチャによって管理され、Spring Retry は関与しなくなりました。
設定の観点から見ると、Spring、Kafka は Spring Retry の @Backoff アノテーションに大きく依存していました。Spring Framework には同等のアノテーションがないため、以下の改善を加えて、このアノテーションは Spring、Kafka に @BackOff として移行されました。
統一された命名: 一貫性を保つために
@Backoffではなく@BackOffを使用する式の評価: すべての文字列属性は SpEL 式とプロパティプレースホルダーをサポートします
期間形式のサポート: 文字列属性は
java.util.Duration形式を受け入れます (例: 「2 秒」、「500 ミリ秒」)強化されたドキュメント: より明確な説明を備えた Javadoc の改善
移行例:
// Before
@RetryableTopic(backoff = @Backoff(delay = 2000, maxDelay = 10000, multiplier = 2))
// After
@RetryableTopic(backOff = @BackOff(delay = 2000, maxDelay = 10000, multiplier = 2))
// With new duration format support
@RetryableTopic(backOff = @BackOff(delayString = "2s", maxDelayString = "10s", multiplier = 2))
// With property placeholders
@RetryableTopic(backOff = @BackOff(delayString = "${retry.delay}", multiplierString = "${retry.multiplier}"))RetryingDeserializer は RecoveryCallback を提供しなくなりましたが、RetryException を入力として受け取る同等の機能を提供します。これには、スローされた例外と再試行回数が含まれます。
// Before
retryingDeserializer.setRecoveryCallback(context -> {
return fallbackValue;
});
// After
retryingDeserializer.setRecoveryCallback(retryException -> {
return fallbackValue;
});BinaryExceptionClassifier の使用は、新たに導入された洗練された API を提供する ExceptionMatcher に置き換えられました。
その他の変更点は以下のとおりです。
DestinationTopicPropertiesFactoryはBinaryExceptionClassifierの代わりにExceptionMatcherを使用するRetryTopicConfigurationBuilderにおけるuniformRandomBackoff方式は、ジッタサポートの導入に伴い非推奨となりました。エラー処理ユーティリティが、新しい例外マッチングシステムに対応するように更新されました。
Kafka Streams のリトライテンプレートは、Spring Framework のリトライサポートを使用するようになりました。
アプリケーションは、新しい Spring Framework リトライ API を使用するために構成を更新する必要がありますが、リトライの動作と機能は変更されません。