web-dev-qa-db-ja.com

Spring-KafkaとSpring-Cloud-Stream(Kafka)

マイクロサービスアーキテクチャのメッセージングシステムとしてKafka=を使用します。

Springクラウドストリームフレームワークは、より多くのメッセージングシステムをサポートするため、よりモジュール化された設計になっています。しかし、機能はどうですか? spring-kafkaとspring-cloud-stream + spring-cloud-starter-stream-kafkaの機能の間にギャップはありますか?どのAPIが適切に設計されていますか?

ご意見をお待ちしております

22
Eike Behrends

kafkaバインダーを使用したSpring Cloud Streamは、Spring-kafkaに依存しています。そのため、前者はすべての機能を後でサポートしますが、前者はよりヘビーウェイトになります。以下は、選択に役立ついくつかのポイントです。

  1. kafkaを将来別のメッセージミドルウェアに変更する可能性がある場合、kafkaの実装の詳細を隠すため、Spring Cloudストリームを選択する必要があります。
  2. 他のメッセージミドルをkafkaと統合する場合は、Spring Cloudストリームを使用する必要があります。そのセールスポイントは、そのような統合を容易にすることです。
  3. シンプルさを楽しみ、パフォーマンスのオーバーヘッドを受け入れたくない場合は、spring-kafkaを選択してください
  4. パブリッククラウドサービスへの移行を計画している場合は、Spring Cloudファミリーの一部であるSpring Cloudストリームを使用します。
6
Warren Zhu

oneチャネルが入力に使用されるシステムを作成しているときにSpring Cloud Streamを使用すると、処理が行われてone出力チャネルに送信されます。言い換えれば、RESTful API呼び出しなどをRPCシステムに置き換えることです。

イベントソーシングシステムを計画している場合は、同じストリームをパブリッシュおよびサブスクライブできるSpring-Kafkaを使用してください。これは、Spring Cloud Streamでは次のことが許可されていないため、簡単に行うことができないものです

public interface EventStream {
    String STREAM = "event_stream";

    @Output(EventStream.STREAM)
    MessageChannel publisher();

    @Input(EventStream.STREAM)
    SubscribableChannel stream();
}

Spring Cloud Streamを使用することで回避できることがいくつかあります。

  • シリアライザとデシリアライザの設定
4