[解決済み] カフカ コンシューマーAPIとストリームAPI
質問
最近Kafkaの勉強を始めたのですが、こんな質問をしてしまいます。
-
ConsumerとStreamの違いは何ですか?私としては、Kafkaからメッセージを消費するツール/アプリケーションがあれば、Kafkaの世界ではコンシューマとなります。
-
StreamもKafkaからメッセージを消費したり、Kafkaにメッセージを生成したりするので、どう違うのでしょうか?また、Consumer APIを使って独自のコンシューマーアプリケーションを書くことができるので、なぜそれが必要なのでしょうか? アプリケーションを作成し、必要に応じて処理したり、コンシューマーアプリケーションからSparkに送信することができるからです。
私はこれについてGoogleをしましたが、これに対する良い回答は得られませんでした。この質問があまりにも些細なことであれば申し訳ありません。
どのように解決するのですか?
2021年1月に更新しました。 を書きました。 Kafkaの基礎について4部構成のブログシリーズを書きました。 を書いたので、このような質問のために読むことをお勧めします。特にこの質問については、以下をご覧ください。 処理の基礎に関するパート3 .
2018年4月更新 : 現在では ksqlDB ksqlDBはKafkaのStreams API上に構築されており、こちらもStreamsとTableをファーストクラスでサポートしています。
Consumer APIとStreams APIの違いは何ですか?
KafkaのStreamsライブラリ( https://kafka.apache.org/documentation/streams/ ) は、Kafka プロデューサーおよびコンシューマークライアントの上に構築されています。Kafka Streamsは、プレーンクライアントよりもかなり強力であり、また表現力も豊かです。
Kafka Streamsを使えば、実際のアプリケーションを最初から最後まで書くのは、プレーンなコンシューマよりずっとシンプルで迅速です。
Kafka Streams APIの機能の一部を紹介します。そのほとんどはコンシューマークライアントではサポートされていません(足りない機能を自分で実装する必要があり、実質的にKafka Streamsを再実装することになります)。
- Kafka トランザクションによる exactly-once 処理セマンティクスをサポート ( EOSの意味するところ )
- フォールト・トレラントをサポートする ステートフル (もちろんステートレスも) 処理をサポートし、ストリーミングを含む に参加する , 集計 そして ウィンドウ . つまり、アプリケーションの処理状態をすぐに管理することができます。
- サポート内容 イベントタイム処理 に基づく処理だけでなく 処理時間 と インジェスチョン時間 . また、シームレスに アウトオブオーダーデータ .
- の両方に対するファーストクラスのサポートを持っています。 ストリームとテーブル 実際には、ほとんどのストリーム処理アプリケーションはそれぞれのユースケースを実装するためにストリームとテーブルの両方を必要とするので、ストリーム処理技術がこの 2 つの抽象化のいずれかを欠く場合 (たとえば、テーブルをサポートしない場合)、行き詰まるか、この機能を手動で自分で実装しなければなりません (頑張ってください...) 。
- サポート 対話型クエリ (「クエリ可能な状態」とも呼ばれます) をサポートし、リクエスト/レスポンス API を介して最新の処理結果を他のアプリケーションやサービスに公開します。これは、リクエスト-レスポンスのみを行うことができ、ストリーミング側を行うことができない従来のアプリに特に有用です。
-
より表現力が豊か:(1)関数型プログラミングスタイルで出荷されます。
DSL
のような操作で
map
,filter
,reduce
と同様に、(2) 命令文スタイル プロセッサAPI を使うことができ、(3) DSLとProcessor APIを組み合わせることもできます。 - 独自の テストキット があります。
参照 http://docs.confluent.io/current/streams/introduction.html を参照してください。また、Kafka Streams API の詳細については、高レベルの入門書であり、低レベルの Kafka コンシューマークライアントとの違いを理解する助けになるはずです。
Kafka Streamsの他にも、ストリーミングデータベースを利用することができます。 ksqlDB ksqlDBは、ストレージ層(Kafka)と計算層(ksqlDB自身、ここでは機能のほとんどにKafka Streamsを使用)を分離しています。基本的にはKafka Streamsと同じ機能をサポートしていますが、JavaやScalaのコードではなく、ストリーミングSQL文を記述します。ksqlDBとはUI、CLI、REST APIでやりとりできる。RESTを使いたくない場合は、ネイティブのJavaクライアントもある。最後に、インフラを自己管理する必要がないことを望むのであれば。 ksqlDBはフルマネージドサービスとして利用可能です。 を Confluent Cloud で利用できます。
Kafka Streams API も Kafka から消費したり、Kafka にメッセージを生成したりするので、どのように違うのですか?
Kafka Streams APIは、Kafkaへのデータの読み込みと書き込みの両方を行うことができます。Kafkaトランザクションをサポートしているので、例えば、1つまたは複数のトピックから1つまたは複数のメッセージを読み、必要に応じて処理状態を更新し、1つまたは複数のトピックに1つまたは複数の出力メッセージを書き込むことができます-すべて1つの原子操作としてです。
というのは、Consumer APIを使って独自のコンシューマーアプリケーションを書き、必要に応じて処理したり、コンシューマーアプリケーションからSparkに送ったりすることができるからです。
Kafka Streams APIはKafkaコンシューマークライアント(およびプロデューサークライアント)そのものを使用します。しかし、Streams APIが提供するユニークな機能をすべて手動で実装する必要があります。 しかし、Streams APIが提供するユニークな機能をすべて手作業で実装する必要があります。 したがって、ユーザーがより強力なKafka Streamsライブラリではなく、プレーンなコンシューマークライアントを選択することはまれな状況です。
関連
-
[解決済み] グループがリバランスしているため、ハートビートが失敗しました。
-
[解決済み] kafkaとnifiの違い
-
[解決済み] Kafkaのキー/バリューペアベースのメッセージングは何のためにあるのですか?[クローズド]
-
[解決済み] HDFスキーマレジストリとConfluentの主な違いは何ですか?
-
[解決済み] JAAS または Kafka の設定に serviceName が定義されていない (Kerberos ではない)
-
[解決済み] KafkaよりRabbitMQを使うべきタイミングは?[クローズド]
-
[解決済み】Kafkaコンシューマオフセットを決定するのは何ですか?
-
[解決済み】Kafkaのトピックとパーティションを理解する
-
[解決済み] Kafkaでデータモデリング?トピックとパーティション
-
[解決済み] カフカ コンシューマーAPIとストリームAPI
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kafkaメッセージにカスタムヘッダを追加する
-
[解決済み] kafkaのレプリケートパーティション下の修正
-
[解決済み] Kafkaのキー/バリューペアベースのメッセージングは何のためにあるのですか?[クローズド]
-
[解決済み] HDFスキーマレジストリとConfluentの主な違いは何ですか?
-
[解決済み] JAAS または Kafka の設定に serviceName が定義されていない (Kerberos ではない)
-
[解決済み] Zookeeperにアクセスせずに-zookeeperフラグを使用してKafka 0.10トピックをすべて一覧表示する
-
[解決済み] Apache Kafkaのコンテキストで「Rebalancing」とはどういう意味ですか?
-
[解決済み] KafkaよりRabbitMQを使うべきタイミングは?[クローズド]
-
[解決済み] Kafkaでデータモデリング?トピックとパーティション
-
[解決済み] カフカ コンシューマーAPIとストリームAPI