2018年4月9日更新:現在、KafkaのイベントストリーミングデータベースであるksqlDBを使用して、Kafkaでデータを処理することもできます。ksqlDBはKafkaのStreamsAPIの上に構築されており、「ストリーム」と「テーブル」のファーストクラスのサポートも付属しています。
ConsumerAPIとStreamsAPIの違いは何ですか?
KafkaのStreamsライブラリ(https://kafka.apache.org/documentation/streams/)は、Kafkaのプロデューサーおよびコンシューマークライアントの上に構築されています。Kafka Streamsは、プレーンクライアントよりもはるかに強力で、表現力もあります。
普通の消費者よりも、Kafka Streamsで最初から最後まで、実際のアプリケーションを作成する方がはるかに簡単で迅速です。
Kafka Streams APIの機能の一部を次に示しますが、そのほとんどはコンシューマークライアントではサポートされていません(不足している機能を自分で実装する必要があり、基本的にKafka Streamsを再実装する必要があります)。
- Kafkaトランザクションを介した1回限りの処理セマンティクスをサポートします(EOSの意味)
- ストリーミング結合、集約、ウィンドウ処理など、フォールトトレラントなステートフル(もちろんステートレス)処理をサポートします。つまり、アプリケーションの処理状態の管理をすぐにサポートします。
- イベント時の処理だけでなく、処理時間と取り込み時間に基づく処理もサポートします。また、順不同のデータをシームレスに処理します。
- ストリームとテーブルの両方をファーストクラスでサポートします。これは、ストリーム処理がデータベースと出会う場所です。実際には、ほとんどのストリーム処理アプリケーションは、それぞれのユースケースを実装するためにストリームとテーブルの両方を必要とします。したがって、ストリーム処理テクノロジに2つの抽象化のいずれかがない場合(たとえば、テーブルのサポートがない場合)、行き詰まるか、この機能を自分で手動で実装する必要があります。 (それで頑張ってください...)
- サポートインタラクティブクエリ(また、「照会可能な状態」と呼ばれる)は、他のアプリケーションやサービスに、最新の処理結果を露出させます
- より表現ですが付属しています(1)関数型プログラミングスタイルのDSLのような操作で
map
、filter
、reduce
だけでなく、(2)が不可欠スタイルプロセッサのAPIなどが複合イベント処理(CEP)を行うため、および(3)あなたも組み合わせることができますDSLとプロセッサAPI。
- ユニットテストと統合テスト用の独自のテストキットがあります。
Kafka Streams APIの詳細でありながら高レベルの概要については、http://docs.confluent.io/current/streams/introduction.htmlを参照してください。これは、低レベルのKafkaコンシューマーとの違いを理解するのにも役立ちます。クライアント。
Kafka Streams以外に、イベントストリーミングデータベースksqlDBを使用してKafkaでデータを処理することもできます。ksqlDBは、KafkaStreamsの上に構築されています。基本的にKafkaStreamsと同じ機能をサポートしますが、JavaやScalaの代わりにストリーミングSQLを記述します。プログラムで、CLIまたはRESTAPIを介してksqlDBと対話できます。また、RESTを使用したくない場合に備えて、ネイティブJavaクライアントもあります。
では、Kafka Streams APIは、Kafkaからのメッセージを消費したり、Kafkaへのメッセージを生成したりするため、どのように異なりますか?
はい、Kafka Streams APIは、Kafkaへのデータの読み取りと書き込みの両方を行うことができます。Kafkaトランザクションをサポートしているため、たとえば、1つ以上のトピックから1つ以上のメッセージを読み取り、必要に応じて処理状態を更新し、1つ以上のトピックに1つ以上の出力メッセージをすべて1つとして書き込むことができます。アトミック操作。
また、Consumer APIを使用して独自のコンシューマーアプリケーションを作成し、必要に応じて処理したり、コンシューマーアプリケーションからSparkに送信したりできるのに、なぜ必要なのですか?
はい、独自のコンシューマーアプリケーションを作成できます-前述したように、Kafka Streams APIはKafkaコンシューマークライアント(およびプロデューサークライアント)自体を使用します-ただし、StreamsAPIが提供するすべての固有の機能を手動で実装する必要があります。「無料」で入手できるものはすべて、上記のリストを参照してください。したがって、ユーザーがより強力なKafka Streamsライブラリではなく、プレーンなコンシューマクライアントを選択することはかなりまれな状況です。