私は現在、 Akka Stream Kafka と協力してkafkaと対話し、 Kafka Streams 。
Akkaベースのアプローチは、リアクティブ仕様を実装し、バックプレッシャーを処理することを知っています。kafkaストリームは欠けているようです。
kafka= akkaストリームkafkaよりもストリームを使用する利点は何でしょうか?
あなたの質問は非常に一般的ですので、私の観点から一般的な回答をします。
まず、2つの使用シナリオがあります。
これにより、すでに背圧に関する部分に答えることができます。上記の最初のシナリオでは、kafkaストリームに背圧メカニズムがあります。
ここで、上記の最初のシナリオのみに焦点を当てましょう。 Kafkaストリームの使用をやめることにした場合、私が失うものを見てみましょう:
それらは私にとって重要な最大の違いです、私はそれがあなたにとって意味があることを願っています!
Kafka Streamsに対するAkka Streamの大きな利点は、ファンのイン/アウトとフィードバックループで循環できる非常に複雑な処理グラフを実装できることです。Kafka =ストリームは、私が間違っていない場合にのみ非巡回グラフを許可します。Kafka streams
この記事は、Kafka Streams
は(補完するAkka Streams
)。
https://www.beyondthelines.net/computing/kafka-streams/
メッセージの順序付け:Kafkaは、すべてのメッセージを保存する一種の追加専用ログを保持し、各メッセージにはシーケンスがありますidはオフセットとも呼ばれます。オフセットは、ログ内のメッセージの位置を示すために使用されます。Kafkaストリームは、これらのメッセージオフセットを使用して順序を維持します。
partitioning:Kafkaはトピックをパーティションに分割し、各パーティションは異なるブローカー間で複製されます。パーティション化により、ロードとレプリケーションはアプリケーションをフォールトトレラントにします(ブローカーがダウンしている場合でもデータは利用可能です)。これはデータの分割には適していますが、同様の方法でプロセスを分散する必要があります。Kafka Streamsは、Kafkaグループ管理に依存するプロセッサトポロジを使用します。これは、Kafka=コンシューマーがブローカー間で負荷を均等に分散するために使用するグループ管理と同じです。この作業は主にブローカーによって管理されています)。
耐障害性:データ複製により、データの耐障害性が保証されます。グループ管理には、残りのライブブローカインスタンス間でワークロードが再分配されるため、フォールトトレランスが組み込まれています。
状態管理:Kafka=ストリームは、kafkaログ圧縮を使用するchange-logトピック(特定のキーの最新値のみを保持します)。Kafkaログ圧縮
Reprocessing:アプリの新しいバージョンを起動するとき、ログを最初から再処理して新しい状態を計算し、トラフィックを新しいインスタンスにリダイレクトしてシャットダウンすることができます古いアプリケーション。
時間管理:「ストリームデータは決して完全ではなく、常に順不同で到着する可能性がある」ため、イベント時間と処理時間を区別して処理する必要があります正しく。
また、著者は「この変更ログトピックを使用してKafka Streamはアプリケーション状態の「テーブルビュー」を維持できます。」
私の考えでは、これは主に「アプリケーションの状態」が小さいエンタープライズアプリケーションに当てはまります。
「ビッグデータ」で動作するデータサイエンスアプリケーションの場合、データ変更、機械学習モデル、およびこれらすべてを調整するビジネスロジックの組み合わせによって生成される「アプリケーション状態」は、Kafka Streams
。
また、「純粋な機能的イベントソーシングランタイム」を使用して https://github.com/notxcain/ aecor は、突然変異を明示的にし、状態の突然変異とIO "効果"の原則的な管理を通じて、状態の永続的なフォームを管理するために使用されるテクノロジーからアプリケーションロジックを分離するのに役立ちます(関数型プログラミング)。
言い換えると、ビジネスロジックはKafka
apiに絡みつきません。