KafkaおよびStream Processingのストリヌムずテヌブルに぀いお、パヌト1

* Michael G. Nollは、Apache KafkaやApache Stormを含むオヌプン゜ヌスプロゞェクトに積極的に貢献しおいたす。



この蚘事は䞻に、Apache Kafkaやストリヌム凊理[Stream Processing]に粟通しおいる人に圹立ちたす。



この蚘事では、おそらくミニシリヌズの最初の蚘事で、ストリヌミング凊理、特にApache Kafkaでのストリヌムずテヌブルの抂念に぀いお説明したいず思いたす。 珟圚および将来の問題をより良く、か぀/たたはより速く解決するのに圹立぀、より良い理論的理解ずアむデアがあればいいのですが。



内容



*動機

*プレヌン蚀語のストリヌムずテヌブル

*図解された䟋

*シンプルな蚀語のカフカストリヌムずテヌブル

* Kafka Streams、KSQL、およびScalaの同等物の詳现

*テヌブルは巚人の肩の䞊に立぀ストリヌム䞊

*デヌタベヌスの裏返し

*結論



動機、たたはなぜ気にする必芁がありたすか



私の日々の仕事では、倚くのApache Kafkaナヌザヌず、 Kafka StreamsおよびKSQL KafkaのストリヌミングSQLを介しおKafkaのストリヌミング凊理に関䞎しおいるナヌザヌず通信したす。 ストリヌミング凊理やKafkaの䜿甚経隓のあるナヌザヌもいれば、OracleやMySQLなどのRDBMSの䜿甚経隓のあるナヌザヌもいたせん。



よくある質問「StreamsずTablesの違いは䜕ですか」この蚘事では、より深く理解できるように、短いTL; DRず長い䞡方の答えを提䟛したいず思いたす。 以䞋の説明の䞀郚は、理解ず暗蚘を単玔化するため、若干単玔化されたすたずえば、アトラクションのより単玔なニュヌトンモデルは、ほずんどの日垞的な状況に十分であり、幞いなこずに、ストリヌム凊理は 、アむンシュタむンの盞察論的モデルずおも耇雑です。



別の䞀般的な質問「良い、しかしなぜそれが私を悩たせる必芁がありたすか これは日々の仕事でどのように圹立぀のでしょうか」芁するに、倚くの理由からです ストリヌミング凊理の䜿甚を開始するず、実際にはほずんどの堎合、ストリヌムずテヌブルの䞡方が必芁であるこずがすぐにわかりたす。 埌で説明するように、衚は状態を衚したす。 結合[たずえばたずえば、ファクトのフロヌをディメンションテヌブル[ ディメンションテヌブル ]ず組み合わせおリアルタむムでデヌタを匷化 [ デヌタ゚ンリッチメント ] たたは集玄[集箄] たずえば、リアルタむムで5分間で䞻芁なビゞネスむンゞケヌタの平均倀を蚈算する、その埌、テヌブルにストリヌミング画像が導入されたす。 そうでなければ、それはあなたが自分でそれをしなければならないこずを意味したす[倚くのDIYの苊痛] 。



おそらくこの゚リアの最初の「Hello World」である悪名高いWordCountの䟋でさえ、「状態」カテゎリに分類されたす。これは、単語カりントのために連続的に曎新されるテヌブル/マップに行のストリヌムを集玄する状態凊理の䟋です。 したがっお、単玔なWordCountストリヌミングを実装しおいるか、 䞍正怜出などのより耇雑なものを実装しおいるかに関係なく、基本的なデヌタ構造ず内郚に必芁なすべおのものを䜿甚したスト​​リヌム凊理のための䜿いやすい゜リュヌションが必芁ですヒントストリヌムずテヌブル もちろん、CassandraやMySQLなどのリモヌトストレヌゞずストリヌミング凊理テクノロゞヌを組み合わせお必芁に応じお、必芁に応じおHadoop / HDFSを远加しおフォヌルトトレランス凊理を提䟛する耇雑で䞍芁なアヌキテクチャを構築する必芁はありたせん[フォヌルトトレランス凊理] 3぀のこずが倚すぎたす。



プレヌン蚀語のストリヌムずテヌブル



ここに私が思い぀く最高の䟋えがありたす





たた、将来の投皿の食前酒ずしお䞖界ストリヌムのむベントの党履歎にアクセスできる堎合、い぀でも䞖界の状態、぀たりストリヌム内の任意の時点t



テヌブルを埩元できたす。ここで、 t



t=



。 蚀い換えれば、䞖界の状態テヌブルの「スナップショット」をい぀でも䜜成できたす。たずえば、ギザに倧ピラミッドが建蚭された玀元前2560幎、たたはペヌロッパの連合。



図解された䟋



最初の䟋は、ナヌザヌのゞオロケヌションを含むストリヌムを瀺しおいたす。これは、各ナヌザヌの珟圚の最埌の䜍眮を固定するテヌブルに集玄されたす 。 埌で説明したすが、Kafka [トピック]トピックをテヌブルに盎接読み蟌むず、これがテヌブルのデフォルトのセマンティクスになりたす。



ストリヌムカらのデヌタに埓っおテヌブルの最埌の䜍眮を保存する



2番目のナヌスケヌスは、同じナヌザヌゞオロケヌション曎新ストリヌムを瀺しおいたすが、ストリヌムは、各ナヌザヌが蚪れた堎所の数を蚘録するテヌブルに集玄されたす 。 集蚈関数が異なるためここでは数量のカりント、テヌブルの内容も異なりたす。 より正確には、他のキヌ倀。



珟圚の蚪問堎所の数をテヌブルに保存する



簡単な蚀語のKafkaのストリヌムずテヌブル



詳现を説明する前に、簡単なものから始めたしょう。



Kafka のトピックは、キヌず倀のペアの無制限のシヌケンスです。 キヌず倀は、通垞のバむト配列です。 <byte[], byte[]>



。



ストリヌムは、 [スキヌマ]スキヌムを䜿甚したトピックです。 キヌず倀はバむト配列ではなくなりたしたが、特定のタむプがありたす。

䟋 <byte[], byte[]>



トピックは、ナヌザヌの地理的䜍眮の<User, GeoLocation>



ストリヌムずしお読み取りたす。


テヌブルずは、通垞の意味でのテヌブルですすでにRDBMSに粟通しおいお、Kafkaだけを知っおいる皆さんの喜びを感じたす。 しかし、ストリヌム凊理のプリズムを通しお芋るず、テヌブルも集玄されたストリヌムであるこずがわかりたす 「テヌブルはテヌブルです」の定矩で停止するこずを本圓に期埅しおいなかったでしょう。

䟋ゞオデヌタの曎新を䌎う<User, GeoLocation>



ストリヌムは、ナヌザヌの最埌の䜍眮を远跡する<User, GeoLocation>



テヌブルに集玄されたす。 集蚈段階で、テヌブル内の[UPSERT]倀は、入力ストリヌムのキヌによっお曎新されたす。 これは、䞊蚘の最初の䟋で芋たした。
䟋 <User, GeoLocation>



ストリヌムは<User, Long>



テヌブルに集玄され、各ナヌザヌの蚪問枈みロケヌションの数を远跡したす。 集蚈段階では、テヌブル内のキヌの倀が継続的に蚈算および曎新されたす。 これは、䞊蚘の2番目の䟋で芋たした。


合蚈



トピックトトリヌムテヌブル



トピック、ストリヌム、およびテヌブルには、Kafkaで次のプロパティがありたす。

皮類 パヌティションがありたす 制限なし 泚文がありたす 倉曎可胜 キヌの䞀意性 スキヌム
トピック はい はい はい いや いや いや
ストリヌム はい はい はい いや いや はい
テヌブル はい はい いや はい はい はい


トピック、ストリヌム、およびテヌブルがKafka Streams APIおよびKSQLにどのように関連するかを芋おみたしょう。たた、プログラミング蚀語ずの類䌌性を匕き出したすたずえば、トピック/ストリヌム/テヌブルをパヌティション化できるなどは無芖したす。

皮類 カフカストリヌム KSQL Java スカラ Python
トピック - - List / Stream



List / Stream [(Array[Byte], Array[Byte])]



[]



ストリヌム KStream



STREAM



List / Stream



List / Stream [(K, V)]



[]



テヌブル KTable



TABLE



HashMap



mutable.Map[K, V]



{}





しかし、このレベルでのこの履歎曞は、ほずんど圹に立たないかもしれたせん。 それでは、詳しく芋おみたしょう。



Kafka Streams、KSQL、およびScalaの同等物の詳现



以䞋の各セクションは、Scalaストリヌミング凊理が同じマシンで行われるこずを想像しおくださいずScala REPLの類掚から始めお、コヌドをコピヌしお自分でプレむできるようにしたす。次に、Kafka StreamsずKSQLで同じこずを行う方法を説明したす分散マシンでの柔軟でスケヌラブルで耐障害性のあるストリヌミング凊理。 最初に述べたように、以䞋の説明を少し簡略化したす。 たずえば、Kafkaでのパヌティション分割の圱響は考慮したせん。

Scalaを知らない堎合恥ずかしがらないでください Scalaの類䌌物を詳现に理解する必芁はありたせん。 どの操䜜たずえばmap()



が結合されおいるか、それらが䜕であるかたずえばreduceLeft()



が集玄、およびストリヌムの「チェヌン」ずテヌブルの「チェヌン」ずの盞関関係に泚意を払うだけで十分です。


トピックス



Kafkaのトピックは、キヌず倀のメッセヌゞで構成されおいたす。 このトピックは、メッセヌゞのシリアル化圢匏や「タむプ」に䟝存したせん。メッセヌゞのキヌず倀は、通垞のbyte[]



配列のように扱われたす。 蚀い換えれば、この芳点からは、デヌタの䞭に䜕があるのか​​分かりたせん。



Kafka StreamsおよびKSQLには「トピック」の抂念はありたせん。 圌らはストリヌムずテヌブルに぀いおのみ知っおいたす。 したがっお、ここではScalaのアナログトピックのみを瀺したす。



 // Scala analogy scala> val topic: Seq[(Array[Byte], Array[Byte])] = Seq((Array(97, 108, 105, 99, 101),Array(80, 97, 114, 105, 115)), (Array(98, 111, 98),Array(83, 121, 100, 110, 101, 121)), (Array(97, 108, 105, 99, 101),Array(82, 111, 109, 101)), (Array(98, 111, 98),Array(76, 105, 109, 97)), (Array(97, 108, 105, 99, 101),Array(66, 101, 114, 108, 105, 110)))
      
      





ストリヌム



ここで、トピックをストリヌムに読み蟌み、スキヌムに関する情報を远加したすスキヌム[schema-on-read]を読み取りたす 。 蚀い換えれば、生の、型付けされおいないトピックを「型付きトピック」たたはストリヌムに倉換したす。



読み取りスキヌムず曞き蟌みスキヌマ[schema-on-write]  Kafkaずそのトピックは、デヌタのシリアル化圢匏に䟝存したせん。 したがっお、ストリヌムたたはテヌブルのデヌタを読み取る堎合はスキヌムを指定する必芁がありたす。 これは、読み取りスキヌムず呌ばれたす。 読み取り方匏には、長所ず短所の䞡方がありたす。 幞いなこずに、アプリケヌションずサヌビスでAPIコントラクトを定矩するのず同じように、デヌタのコントラクトを定矩するこずで、読み取りスキヌムず曞き蟌みスキヌムの䞭間を遞択できたす。 これは、 Apache Avroなどの構造化された拡匵可胜なデヌタ圢匏を遞択し、 Confluent Schema RegistryなどのAvroスキヌム甚のレゞストリ展開で実珟できたす。 そしお、もし興味があれば、Kafka StreamsずKSQLはAvroをサポヌトしおいたす。


Scalaでは、これは以䞋のmap()



操䜜を䜿甚しお実珟されたす。 この䟋では、ペア<String, String>



からストリヌムを取埗したす。 デヌタの内郚を確認する方法に泚目しおください。



 // Scala analogy scala> val stream = topic | .map { case (k: Array[Byte], v: Array[Byte]) => new String(k) -> new String(v) } // => stream: Seq[(String, String)] = // List((alice,Paris), (bob,Sydney), (alice,Rome), (bob,Lima), (alice,Berlin))
      
      





Kafka Streamsでは、 StreamsBuilder#stream()



介しおStreamsBuilder#stream()



トピックを読みたす。 ここでは、トピックからデヌタを読み取るずきにConsumed.with()



パラメヌタヌを䜿甚しお目的のスキヌマを決定する必芁がありたす。



 StreamsBuilder builder = new StreamsBuilder(); KStream<String, String> stream = builder.stream("input-topic", Consumed.with(Serdes.String(), Serdes.String()));
      
      





KSQLでは、次のようなこずをしお、トピックをSTREAM



ずしお読む必芁がありたす。 ここでは、トピックからデヌタを読み取るずきに列の名前ずタむプを指定するこずにより、目的のスキヌムを定矩したす。



 CREATE STREAM myStream (username VARCHAR, location VARCHAR) WITH (KAFKA_TOPIC='input-topic', VALUE_FORMAT='...')
      
      





テヌブル



珟圚、衚の同じトピックを読んでいたす。 たず、回線に関する情報を远加する必芁がありたす回線の読み取り。 次に、ストリヌムをテヌブルに倉換する必芁がありたす。 Kafkaのテヌブルのセマンティクスでは、最終的なテヌブルでは、このキヌの最埌の倀のトピックからの各メッセヌゞキヌを衚瀺する必芁があるず述べおいたす。



最初の䟋を䜿甚しおみたしょう。ここでは、サマリヌテヌブルが各ナヌザヌの最埌の堎所を远跡したす。



ストリヌムをテヌブルに倉換



Scalaの堎合



 // Scala analogy scala> val table = topic | .map { case (k: Array[Byte], v: Array[Byte]) => new String(k) -> new String(v) } | .groupBy(_._1) | .map { case (k, v) => (k, v.reduceLeft( (aggV, newV) => newV)._2) } // => table: scala.collection.immutable.Map[String,String] = // Map(alice -> Berlin, bob -> Lima)
      
      





スキヌムに関する情報の远加は、䞊蚘のストリヌムの䟋ず同様に、最初のmap()



操䜜を䜿甚しお実珟されたす。 ストリヌムは、集蚈ステップ 詳现は埌述を䜿甚しお[ストリヌムからテヌブル]テヌブルに倉換されたすが、この堎合はテヌブルのUPSERT操䜜状態なしで、これはgroupBy().map()



ステップgroupBy().map()



各キヌのreduceLeft()



操䜜が含たれたす。 集玄ずは、キヌごずに倚くの倀を1぀に圧瞮するこずを意味したす。 この特定のreduceLeft()



集箄-以前のaggV倀は、指定されたキヌの新しい倀の蚈算に䜿甚されないこずに泚意しおください。



ストリヌムずテヌブルの関係に぀いお興味深いのは、䞊蚘のコマンドが以䞋の短いオプションに盞圓するテヌブルを䜜成するこずです 参照透過性を思い出しおください。ストリヌムから盎接テヌブルを構築し、タむプ/スキヌムの指定をスキップできたすストリヌムは既に入力されおいるためです。 テヌブルは、ストリヌムの掟生 、集玄であるこずがわかりたす 。



 // Scala analogy, simplified scala> val table = stream | .groupBy(_._1) | .map { case (k, v) => (k, v.reduceLeft( (aggV, newV) => newV)._2) } // => table: scala.collection.immutable.Map[String,String] = // Map(alice -> Berlin, bob -> Lima)
      
      





Kafka Streamsでは、通垞StreamsBuilder#table()



を䜿甚KTable



単玔なワンラむナヌでKTable



のKafkaトピックを読み取りたす。



 KTable<String, String> table = builder.table("input-topic", Consumed.with(Serdes.String(), Serdes.String()));
      
      





ただし、わかりやすくするために、最初にKStream



でトピックを読んでから、䞊蚘に瀺したのず同じ集蚈手順を実行しおKStream



するこずもできたす。



 KStream<String, String> stream = ...; KTable<String, String> table = stream .groupByKey() .reduce((aggV, newV) -> newV);
      
      





KSQLでは、トピックをTABLE



ずしお読むために次のようなこずを行う必芁がありたす。 ここでは、トピックから読み取るずきに列の名前ずタむプを指定しお、目的のスキヌムを決定する必芁がありたす。



 CREATE TABLE myTable (username VARCHAR, location VARCHAR) WITH (KAFKA_TOPIC='input-topic', KEY='username', VALUE_FORMAT='...')
      
      





これはどういう意味ですか これは、最初に述べたように、テヌブルが実際に集玄されたストリヌムであるこずを意味したす。 これは、テヌブルがトピックから盎接䜜成されたずき、䞊蚘の特別なケヌスで盎接芋たした。 ただし、これは実際には䞀般的なケヌスです。



テヌブルは巚人の肩の䞊に立぀ストリヌム䞊



抂念的には、Kafkaの1次デヌタ構造はストリヌムのみです。 䞀方、テヌブルは、1 キヌごずの集玄を通じお既存のストリヌムから掟生するか、2垞に集玄されたストリヌムに拡匵される既存のストリヌムから削陀されたす最埌のテヌブルを「proto-streams」ず呌ぶこずができたす[ 「Ur-stream」] 。

テヌブルは、ストリヌムの具䜓化されたビュヌずしおも説明されたす。 このコンテキストでは、ストリヌミングは集玄にすぎたせん。


2぀のケヌスのうち、1は議論のためにより興味深いので、これに泚目したしょう。 それはおそらく、Kafkaで集蚈がどのように機胜するかを最初に把握する必芁があるこずを意味したす。



カフカの集蚈



集玄は、ストリヌム凊理の䞀皮です。 他のタむプには、たずえば、フィルタリング[filters]および結合[joins]が含たれたす。



前にわかったように、Kafkaのデヌタはキヌず倀のペアずしお衚瀺されたす。 さらに、Kafkaの集蚈の最初の特性は、それらがすべおkeyによっお蚈算されるこずです。 そのため、 groupBy()



Streamsの集玄フェヌズの前にgroupBy()



たたはgroupByKey()



介しおgroupBy()



グルヌプKStream



する必芁がありたす。 同じ理由で、䞊蚘のScalaの䟋ではgroupBy()



を䜿甚するgroupBy()



たした。

パヌティション化ずメッセヌゞキヌ Kafkaの等しく重芁な偎面は、この蚘事では無芖したすが、トピック、ストリヌム、およびテヌブルがパヌティション化されるこずです。 実際、デヌタはパヌティションごずにキヌごずに凊理および集玄されたす。 デフォルトでは、メッセヌゞ/レコヌドはキヌに基づいおパヌティション間で分散されたす。したがっお、実際には、技術的に耇雑でより正確な「キヌパヌティション分割」ではなく、「キヌ集玄」を簡玠化するこずは完党に受け入れられたす。 ただし、カスタムパヌティショニング割り圓おアルゎリズムを䜿甚する堎合は、凊理ロゞックでこれを考慮する必芁がありたす。


Kafkaの集蚈の2番目の特性は、新しいデヌタが着信ストリヌムに到着するず、集蚈が継続的に曎新されるこずです。 キヌによる蚈算のプロパティず共に、これにはテヌブルが必芁です。より正確には、結果ずしお、したがっお返される集蚈のタむプが倉曎可胜なテヌブルが必芁です。 キヌの以前の倀集蚈結果は、垞に新しい倀で䞊曞きされたす。 Kafka StreamsずKSQLの䞡方で、集蚈は垞にテヌブルを返したす。



2番目の䟋に戻り、ストリヌム内の各ナヌザヌが蚪れた堎所の数を蚈算したす。



ストリヌムをテヌブルに倉換



カりントは集蚈の䞀皮です。 倀を蚈算するには、前のセクションの集蚈ステヌゞを.reduce((aggV, newV) -> newV)



から.map { case (k, v) => (k, v.length) }



です。 戻り倀の型はテヌブル/マップであるこずに泚意しおくださいScalaではデフォルトで䞍倉map



䜿甚するため、Scalaコヌドではmap



䞍倉[䞍倉マップ]であるずいう事実を無芖しおください。



 // Scala analogy scala> val visitedLocationsPerUser = stream | .groupBy(_._1) | .map { case (k, v) => (k, v.length) } // => visitedLocationsPerUser: scala.collection.immutable.Map[String,Int] = // Map(alice -> 3, bob -> 2)
      
      





䞊蚘のScalaの䟋に盞圓するKafka Streamsコヌド



 KTable<String, Long> visitedLocationsPerUser = stream .groupByKey() .count();
      
      





KSQLの堎合



 CREATE TABLE visitedLocationsPerUser AS SELECT username, COUNT(*) FROM myStream GROUP BY username;
      
      





テヌブル-集玄されたストリヌム入力ストリヌム→テヌブル



䞊で芋たように、テヌブルは入力ストリヌムの集玄であり、芁するに、テヌブルは集玄ストリヌムです。 Kafka StreamsたたはKSQLで集蚈を実行するず、結果は垞にテヌブルになりたす。



集玄段階の特性により、状態なしでUPSERTセマンティクスを介しおストリヌムからテヌブルを盎接取埗するかどうかが決定されたすテヌブルは、ストリヌムの最埌の倀にキヌを衚瀺したす。これは、Kafkaトピックを盎接テヌブルに読み蟌むずきに集玄されたす。 ステヌトフルカりント 最埌の䟋を参照、たたは加算、平均化などのより耇雑な集蚈。 Kafka StreamsおよびKSQLを䜿甚する堎合、タンブリングりィンドり、ホッピングりィンドり、およびセッションりィンドりを䜿甚したりィンドり化された集蚈を含む、集蚈の倚くのオプションがありたす。



テヌブルに倉曎ストリヌムがありたすテヌブル→出力ストリヌム



テヌブルは入力ストリヌムの集合䜓ですが、独自の出力ストリヌムもありたす デヌタベヌスに倉曎デヌタCDCを蚘録するように、Kafkaのテヌブルのすべおの倉曎は、テヌブルのchangelogストリヌムず呌ばれる内郚倉曎ストリヌムに蚘録されたす。 Kafka StreamsおよびKSQLでの蚈算の倚くは、実際にはchangelogストリヌムで行われたす 。 これにより、たずえば、Kafka StreamsおよびKSQLは、 むベント時凊理のセマンティクスのセマンティクスに埓っお履歎デヌタを正しく凊理できたす。ストリヌムは珟圚ず過去の䞡方を衚したすが、衚は珟圚のみを衚すこずができるこずに泚意しおください正確に、固定された時間[スナップショットin time] 。

泚 Kafka Streamsでは、 KTable#toStream()



䜿甚しお、明瀺的にテヌブルを倉曎ストリヌム[changelog stream]に倉換できたす。


最初の䟋を次に瀺したすが、倉曎ログストリヌムを䜿甚したす 。



倉曎ログストリヌム



テヌブルのchangelogストリヌムは、このテヌブルの入力ストリヌムのコピヌであるこずに泚意しおください。 これは、察応する集玄関数UPSERTの性質によるものです。 「これはディスクスペヌスを消費する1察1のコピヌではありたせんか」-Kafka StreamsずKSQLは、䞍芁なデヌタコピヌずロヌカル/ネットワヌクIOを最小限に抑える最適化を実行したす。 基本的に䜕が起こっおいるかをよりよく説明するために、䞊の図のこれらの最適化を無芖したす。



そしお最埌に、 changelog streamを含む2番目のナヌスケヌス。 ここでは、 キヌごずのカりントを実行する別の集蚈関数があるため、テヌブルの倉曎のストリヌムは異なりたす。



倉曎ログストリヌム



ただし、これらの内郚倉曎ログストリヌムは、アヌキテクチャおよび運甚䞊の圱響も受けたす。 倉曎ストリヌムは継続的にバックアップされ、Kafkaのトピックずしお保存されたす。テヌマ自䜓は、Kafka StreamsおよびKSQLの匟力性ず埩元力を提䟛する魔法の䞀郚です。 これは、 [stateful]状態たたは[stateless]なしの凊理に関係なく、デヌタを倱うこずなく、すべおの操䜜を通じお、マシン/仮想マシン/コンテナ間で凊理タスクを移動できるためです。 テヌブルはアプリケヌション[Kafka Streams]たたはク゚リKSQLの[状態]状態の䞀郚であるため、Kafkaは凊理コヌド簡単だけでなく、テヌブルを含む凊理ステヌタスもマシン間で高速か぀信頌性の高い方法で転送する必芁がありたすはるかに耇雑です。 テヌブルをクラむアントマシンAからマシンBに移動する必芁があるずきはい぀でも、新しい宛先Bで、テヌブルはマシンAずたったく同じ状態の倉曎ログストリヌムからKafkaサヌバヌ偎に再構築されたす。䞊蚘の最埌の図では、入力ストリヌムを凊理するこずなく、倉曎ログストリヌムから「 カりントテヌブル」を簡単に取埗できたす。



双察ストリヌム衚



ストリヌムテヌブルの二重性ずいう甚語は、ストリヌムずテヌブルの間の䞊蚘の関係を指したす。 これは、たずえば、ストリヌムをテヌブルに、このテヌブルを別のストリヌムに、結果のストリヌムを別のテヌブルに、ずいうように倉換できるこずを意味したす。 詳现に぀いおは、Confluent Introducing Kafka StreamsStream Processing Made Simpleブログ投皿を参照しおください。



デヌタベヌスの裏返し



前のセクションで説明した内容に加えお、デヌタベヌスの裏返しに関する蚘事をご芧になった方もいらっしゃるかもしれたせんが、この党䜓を芋おみたいず思うかもしれたせん。 ここでは詳しく説明したせんので、Kafkaずストリヌミング凊理の䞖界をデヌタベヌスの䞖界ず簡単に比范しおみたしょう。 譊戒しおください以降、深刻な単玔化[癜黒の単玔化] 。



デヌタベヌスでは、 テヌブルは1次構造です。 これがあなたの仕事です。 「ストリヌム」は、たずえばMySQLのbinlogやOracleのGoldenGateのようなデヌタベヌスにも存圚したすが、通垞はそれらず盎接やり取りできないずいう意味であなたから隠されおいたす。 デヌタベヌスは珟圚に぀いおは知っおいたすが、過去に぀いおは知りたせん過去が必芁な堎合は、 バックアップテヌプからデヌタを埩元したす。これは単なるハヌドりェアストリヌムです。



Kafkaおよびストリヌム凊理では、 ストリヌムは1次構造です。 前に芋たように、テヌブルはストリヌムの掟生物です 。 ストリヌムは珟圚ず過去を知っおいたす。 䟋ずしお、 New York Timesは、1850幎代から160幎にわたるゞャヌナリズムのすべおの公開された蚘事を 、信頌できるデヌタの゜ヌスであるカフカに保管しおいたす。



芁するに、デヌタベヌスは最初にテヌブルずしお、次にストリヌムずしお考えたす。 カフカは最初にストリヌムで考え、次にテヌブルで考えたす。 , Kafka- , , — , WordCount, , . , Kafka , Kafka Streams KSQL, ( ). Kafka , , - [stream-relational] , [stream-only].

, — . Kafka , — .


おわりに



, , Kafka . , , « » « Kafka ».



- Kafka, Kafka Streams KSQL, :





, Kafka Streams KSQL, Kafka , , (, , , , , , ). , . :-)



, « , 1». , , . ? !



— , , .



All Articles