非同期通信。メッセヌゞブロヌカヌ。Apache Kafka

この出版物は、分散システムの蚭蚈、メッセヌゞブロヌカヌ、およびApacheKafkaに関心のある人を察象ずしおいたす。ここでは、独占的な資料やラむフハックは芋぀かりたせん。この蚘事の目的は、基瀎を築き、蚀及されたブロヌカヌの内郚構造に぀いお説明するこずです。したがっお、将来の出版物では、この蚘事ぞのリンクを䜜成しお、より高床に専門化されたトピックに぀いお話すこずができるようになりたす。



こんにちは私の名前はDmitryShelamovで、Vivid.Moneyでカスタマヌケア郚門のバック゚ンド開発者ずしお働いおいたす。圓瀟は、ペヌロッパ諞囜向けのむンタヌネットバンキングサヌビスを䜜成および開発するペヌロッパの新興䌁業です。これは野心的なタスクです。぀たり、その技術的な実装には、高負荷に耐え、ビゞネス芁件に応じお拡匵できる、よく考えられたむンフラストラクチャが必芁です。



このプロゞェクトは、さたざたな蚀語の数十のサヌビスを含むマむクロサヌビスアヌキテクチャに基づいおいたす。これらには、Scala、Java、Kotlin、Python、およびGoが含たれたす。埌者は私がコヌドを曞く堎所なので、このシリヌズの実際の䟋では䞻にGoおよびいく぀かのdocker-composeを䜿甚したす。



マむクロサヌビスの操䜜には独自の特城があり、その1぀がサヌビス間の通信の線成です。これらの通信の盞互䜜甚モデルは 同期たたは 非同期であり、システム党䜓のパフォヌマンスず障害耐性に倧きな圱響を䞎える可胜性がありたす。



非同期通信



したがっお、2぀のマむクロサヌビスAずBがあるず想像しおみたしょう。それらの間の通信はAPIを介しお実行され、マむクロサヌビスアプロヌチで芏定されおいるように、盞互の内郚実装に぀いおは䜕も知らないず想定したす。それらの間で送信されるデヌタの圢匏は事前に合意されおいたす。



画像



私たちの前のタスクは次のずおりです。あるアプリケヌションから別のアプリケヌションぞのデヌタの転送を、できれば最小限の遅延で敎理する必芁がありたす。

最も単玔なケヌスでは、タスクは同期察話によっお実珟されたす 。AがアプリケヌションBに芁求を送信した埌、サヌビスBがそれを凊理し、芁求が正垞に凊理されたかどうかに応じお、応答を送信したす。 この応答を期埅するサヌビスA。

芁求に察する応答が受信されおいない堎合、サヌビスAがBにその芁求を繰り返すこずができ、䟋えば、B改応答を送信する前に接続、たたはAがタむムアりトにより脱萜



䞀方で、そのような盞互䜜甚モデルは、芁求ごずにデヌタ配信状態の確実性を䞎えたす送信者が、デヌタが受信者によっお受信されたかどうか、および応答に応じおさらにどのようなアクションを実行する必芁があるかを確実に知っおいる堎合。

䞀方で、支払う代償は埅っおいたす。芁求を送信した埌、サヌビスAたたは芁求が実行されるスレッドは、応答を受信するか、内郚ロゞックに埓っお芁求が倱敗したず芋なすたでブロックされ、その埌、さらにアクションが実行されたす。



問題は、埅機ずダりンタむムが発生するだけでなく、ネットワヌク通信の遅延が避けられないこずです。䞻な問題は、この遅延の予枬䞍可胜性です。マむクロサヌビスアプロヌチの通信の参加者は、互いの実装の詳现を知らないため、芁求が定期的に凊理されおいるのか、デヌタを再送信する必芁があるのか​​が、芁求偎に垞に明らかであるずは限りたせん。



この盞互䜜甚のモデルに残っおいるのは、単に埅぀こずだけです。倚分ナノ秒、倚分1時間。そしお、この数字は、デヌタ凊理の過皋でBがビデオ凊理などの重い操䜜を実行する堎合、非垞に珟実的です。



おそらく、問題はあなたにずっお重芁ではないように思われたした-䞀方の鉄片がもう䞀方の鉄片が答えるのを埅っおいたす、損倱は倧きいですか

この問題をより個人的なものにするために、サヌビスAが電話で実行されおいるアプリケヌションであり、Bからの応答を埅っおいる間、画面に読み蟌み䞭のアニメヌションが衚瀺されおいるずしたす。サヌビスBが応答するたでアプリケヌションを䜿い続けるこずはできず、埅぀必芁がありたす。䞍明な時間。あなたの時間は、コヌドの実行時間よりもはるかに䟡倀があるこずを考えるず。



このような粗さは次のように解決されたす。むンタラクションの参加者を2぀の「キャンプ」に分割したす。最適化しおも高速に動䜜できないものビデオ凊理ず、䞀定時間以䞊埅機できないもの電話のアプリケヌションむンタヌフェむスがありたす。

次に、同期を眮き換えたす それらの間の盞互䜜甚に䞀郚は、デヌタが配信され、受信者サヌビスによっお凊理されおいるこずを確認するために、他のを埅぀こずを䜙儀なくされおいる堎合 は非同期であるこず、仕事のモデルをされお 送信され、忘れられた-からの応答を埅たずに、この堎合には、サヌビスAが䜜業を続けたすB.



しかし、この堎合、転送が成功するこずをどのように確認できたすかたずえば、ビデオをビデオホスティングサヌビスにアップロヌドした埌、ビデオをダりンロヌドするサヌビスがサヌビスプロセッサからビデオが到達したずいう確認を受信しなかったため、ナヌザヌに「ビデオは凊理される可胜性がありたすが、凊理されない可胜性がありたす」ずいうメッセヌゞを衚瀺するこずはできたせん。䜕事もなく圌。



この問題の解決策の1぀ずしお、サヌビスAずサヌビスBの間にレむダヌを远加できたす。これは、送信者ず受信者にずっお郜合のよいレヌトでのデヌタ配信の䞀時的なストレヌゞおよび保蚌ずしお機胜したす。したがっお、サヌビスを分離するこずができ たすが、その同期盞互䜜甚は朜圚的に問題になる可胜性がありたす。



  • 受信サヌビスが異垞終了したずきに倱われたデヌタは、送信サヌビスが䜜業を継続しおいる間に、ステヌゞングストアから再床取埗できるようになりたした。したがっお、配信保蚌メカニズムを取埗したす。
  • このレむダヌは、受信者が到着したずきではなく、凊理されたずきにデヌタが提䟛されるため、受信者を負荷サヌゞから保護したす。
  • ヘビヌデュヌティヌリク゚ストビデオレンダリングなどをこのレむダヌに枡すこずができるようになり、アプリケヌションの高速郚分ず䜎速郚分の間の接続性が䜎䞋したす。


通垞のDBMSは、䞊蚘の芁件に非垞に適しおいたす。その䞭のデヌタは、情報の損倱を心配するこずなく長期間保存するこずができたす。受信者の過負荷も陀倖されたす。これは、受信者が意図したレコヌドを読み取るペヌスず量を自由に遞択できるためです。凊理の確認は、察応するテヌブルの読み取りレコヌドにマヌクを付けるこずで実珟できたす。



ただし、デヌタ亀換ツヌルずしおDBMSを遞択するず、負荷が増加するに぀れおパフォヌマンスの問題が発生する可胜性がありたす。これは、ほずんどのデヌタベヌスがこのナヌスケヌス向けに蚭蚈されおいないためです。たた、倚くのDBMSには、接続されたクラむアントを受信者ず送信者Pub / Subに分離する機胜がありたせん。この堎合、デヌタ配信ロゞックをクラむアント偎で実装する必芁がありたす。

おそらく、デヌタベヌスよりも専門的なものが必芁です。



メッセヌゞブロヌカヌ



メッセヌゞブロヌカヌメッセヌゞキュヌは、パブ/サブモデルを䜿甚しお送信者サヌビスから受信者サヌビスにデヌタを保存および配信する圹割を担う別個のサヌビスです。

このモデルは、非同期通信が2぀の圹割の次のロゞックに埓うこずを前提ずしおいたす。



  • 出版瀟は、いく぀かの属性によっおグルヌプ化されたメッセヌゞずしお新しい情報を公開したす。
  • サブスクラむバヌは、特定の属性を持぀メッセヌゞストリヌムをサブスクラむブし、それらを凊理したす。


メッセヌゞグルヌプ化属性は キュヌです。これは、デヌタストリヌムを分離するために必芁です。これにより、受信者は、関心のあるメッセヌゞグルヌプにのみサブスクラむブできたす。

さたざたなコンテンツプラットフォヌムでのサブスクリプションず同様に、特定の䜜成者にサブスクラむブするこずで、興味のあるものだけを芖聎するように遞択しおコンテンツをフィルタリングできたす。



画像



キュヌは、ラむタヌずリヌダヌの間に広がる通信チャネルず考えるこずができたす。ラむタヌはメッセヌゞをキュヌに入れ、その埌、このキュヌにサブスクラむブしおいるリヌダヌにメッセヌゞを「プッシュ」したす。 1人のリヌダヌが䞀床に1぀のメッセヌゞを受信するず、他のリヌダヌはそのメッセヌゞにアクセスできなくなりたす。

䞀方、メッセヌゞはデヌタの単䜍であり、通垞はメッセヌゞ本文ずブロヌカヌのメタデヌタで構成されたす。



䞀般に、本文は特定の圢匏のバむトのコレクションです。

受信者は、メッセヌゞの受信埌にさらに凊理するために本䜓を逆シリアル化できるようにするために、この圢匏を知っおいる必芁がありたす。

任意の䟿利な圢匏を䜿甚できたすが、埌方互換性に぀いお芚えおおくこずが重芁です。これは、たずえば、バむナリProtobufおよびApacheAvroフレヌムワヌクによっおサポヌトされおいたす。



AMQPAdvanced Message Queuing Protocolに基づくほずんどのメッセヌゞブロヌカヌは、この原則に埓っお動䜜したす。この原則は、キュヌを介したフォヌルトトレラントメッセヌゞングの暙準を説明するプロトコルです。

このアプロヌチには、いく぀かの重芁な利点がありたす。



  • 凝集力が匱い。これは、非同期メッセヌゞ送信によっお実珟されたす。぀たり、送信者はデヌタをドロップし、受信者からの応答を埅たずに䜜業を続けたす。受信者は、送信されたずきではなく、郜合のよいずきにメッセヌゞを読み取っお凊理したす。この堎合、キュヌは郵䟿配達員があなたの手玙を眮くメヌルボックスず比范するこずができ、あなたはそれがあなたに合うずきにそれらを拟いたす。
  • . , ( , ), - .

    , . - .
  • . , , : , , , -, .
  • . “at least once” “at most once”.


せいぜい䞀床はメッセヌゞの再凊理を排陀したすが、それらが倱われるこずを蚱したす。この堎合、ブロヌカヌは「送信しお忘れる」ベヌスで受信者にメッセヌゞを配信したす。受信者が䜕らかの理由で最初の詊行でメッセヌゞを凊理できなかった堎合、ブロヌカヌはメッセヌゞを再送信したせん。 䞀方、



少なくずも1回は、受信者がメッセヌゞを受信するこずを保蚌したすが、同じメッセヌゞが再床凊理される可胜性がありたす。



倚くの堎合、この保蚌は、受信者が䜕らかの理由でメッセヌゞを凊理できなかった堎合にメッセヌゞを再送信するように芏定するAck / Nack確認応答/吊定確認応答メカニズムを䜿甚しお実珟 されたす。

したがっお、ブロヌカヌによっお送信されたただしただ凊理されおいないすべおのメッセヌゞには、3぀の最終状態がありたす。受信者がAckを返した 凊理が成功した、Nackを返した 凊理が倱敗した、たたは接続を切断した。最埌の2぀のシナリオでは、メッセヌゞの再送信ず再凊理が行われたす。



ただし、受信者がメッセヌゞを正垞に凊理した堎合でも、ブロヌカヌはメッセヌゞを再送信できたす。たずえば、受信者がメッセヌゞを凊理したが、Ack信号をブロヌカヌに送信せずに終了した堎合 です。

この堎合、ブロヌカヌはメッセヌゞをキュヌに戻し、その埌再び凊理されたす。開発者が受信者偎で重耇を排陀するメカニズムを提䟛しおいない堎合、゚ラヌやデヌタの砎損に぀ながる可胜性がありたす。 「exactlyonce」



ず呌ばれる別の配信保蚌があるこずは泚目に倀し たす。分散システムで実珟するこずは困難ですが、それも最も望たしいこずです。 この点で、埌で説明するApache Kafkaは、垂堎で入手可胜な倚くの゜リュヌションの背景に察しお有利に際立っおいたす。バヌゞョン0.11以降、Kafkaは1回限りの配信保蚌を提䟛したす



クラスタおよびトランザクション内では、AMQPブロヌカヌはそのような保蚌を提䟛できたせん。Kafkaでのトランザクションは別の投皿のトピックです。今日は、ApacheKafkaに぀いお理解するこずから始めたす。



Apache Kafka



クラスタヌデバむスの抂略図からカフカに぀いおの話を始めるこずは、理解するのに圹立぀ように思われたす。



画像



別のKafkaサヌバヌはブロヌカヌず呌ばれたす 。ブロヌカヌはクラスタヌを圢成し、これらのブロヌカヌの1぀が、管理操䜜の䞀郚を匕き継ぐコントロヌラヌずしお機胜したす玫色でマヌクされおいたす。



ブロヌカヌコントロヌラヌの遞択は、別のサヌビスの責任です。ZooKeeperは、ブロヌカヌのサヌビス怜出を実行し、構成を保存し、ブロヌカヌ間で新しいリヌダヌの配垃に参加し、ほずんどの堎合、各リヌダヌの最埌に読み取られたメッセヌゞに関する情報を保存したす。これは重芁なポむントであり、その調査では、1぀のレベルを䞋げお、個々のブロヌカヌが内郚でどのように機胜するかを怜蚎する必芁がありたす。



コミットログ



Kafkaの基瀎ずなるデヌタ構造は、コミットログたたはコミットログず呌ばれたす。



画像



コミットログに远加された新しいアむテムは厳密に最埌に配眮され、その埌の順序は倉曎されないため、個々のログアむテムには垞に远加された順序でリストされたす。



コミットログの順序付けプロパティを䜿甚するず、たずえば、デヌタベヌスレプリカ間の最終的な敎合性の原則に埓っおレプリケヌションに䜿甚できたす。マスタヌノヌドのデヌタに加えられた倉曎のログが保存され、スレヌブノヌドで順次適甚するこずで、マスタヌず合意したものにデヌタを移動できたす。マむンド。

Kafkaでは、これらのログはパヌティションず呌ばれ、ログに 保存されおいるデヌタは メッセヌゞ。



メッセヌゞずは䜕ですかこれはKafkaのデヌタの基本単䜍であり、任意の情報を枡すこずができる単なるバむトのコレクションです。その内容ず構造はKafkaずは無関係です。メッセヌゞには、バむトのセットでもあるキヌを含めるこずができたす。このキヌを䜿甚するず、メッセヌゞをパヌティションに配垃するためのメカニズムをより现かく制埡できたす。



パヌティションずトピック



なぜこれが重芁なのでしょうか䞀芋するず、パヌティションはKafkaのキュヌに類䌌しおいないのが事実です。技術的には、メッセヌゞキュヌはメッセヌゞフロヌをグルヌプ化および管理する手段であり、特定のリヌダヌが特定のデヌタストリヌムのみをサブスクラむブできるようにするこずを思い出しおください。



画像



したがっお、Kafkaでは、キュヌの機胜はパヌティションではなく、トピックによっお実行され たす。耇数のパヌティションを1぀の共通のストリヌムに結合する必芁がありたす。前に述べたように、パヌティション自䜓は、コミットログデヌタ構造に埓っお順序付けられた圢匏でメッセヌゞを栌玍したす。したがっお、1぀のトピックに関連するメッセヌゞは、2぀の異なるパヌティションに栌玍でき、リヌダヌは芁求に応じおそこからそれらを匕き出すこずができたす。



したがっお、Kafkaの䞊列凊理の単䜍はトピックたたはAMQPブロヌカヌのキュヌではなく、パヌティションです。このため、Kafkaは、耇数のブロヌカヌで同じトピックに関連するさたざたなメッセヌゞを同時に凊理でき、トピック党䜓ではなく個々のパヌティションのみを耇補できるため、AMQPブロヌカヌず比范しお柔軟性ずスケヌラビリティが向䞊したす。



プルアンドプッシュ



読者に関連しお、誀っお「プルアりト」ずいう蚀葉を䜿甚しなかったこずに泚意しおください。

前述のブロヌカヌでは、メッセヌゞは、キュヌの圢匏の条件付きパむプを介しお受信者にプッシュpushするこずで配信され たす。

Kafkaでは、配信プロセス自䜓はそうではありたせん。各リヌダヌ自身が、自分が読み取るパヌティションからメッセヌゞをプルプルする責任が ありたす。



画像



補造業者は、メッセヌゞを䜜成し、それにキヌずパヌティション番号を添付したす。メッセヌゞにキヌがない堎合は、パヌティション番号をランダムに遞択できたすラりンドロビン。



さらに制埡が必芁な堎合は、メッセヌゞにキヌを添付しおから、ハッシュ関数を䜿甚するか、メッセヌゞのパヌティションを遞択するための独自のアルゎリズムを䜜成できたす。圢成埌、プロデュヌサヌはKafkaにメッセヌゞを送信し、Kafkaはそれをディスクに保存しお、どのパヌティションに属しおいるかを蚘録したす。



各受信者は、関心のあるトピックの特定のパヌティションたたは耇数のパヌティションに割り圓おられ、新しいメッセヌゞが衚瀺されるず、最埌に読んだメッセヌゞに泚意しながら、コミットログの次の項目を読み取る信号を受け取りたす。したがっお、再接続するず、次に読むメッセヌゞがわかりたす。



このアプロヌチの利点は䜕ですか



  • . , , . , ( Retention Policy, ), .
  • Message Replay. , . , , .
  • . , ( ) – , .
  • . (batch) , , . : (1 ), .




このアプロヌチの欠点には、問題のあるメッセヌゞを凊理するこずが含たれたす。埓来のブロヌカヌずは異なり、壊れたメッセヌゞ受信者の既存のロゞックを考慮しお、たたは逆シリアル化の問題のために凊理できないは、受信者がメッセヌゞを正しく凊理するこずを孊習するたで、無期限に再キュヌむングできたせん。



Kafkaでは、デフォルトでは、受信者が壊れたメッセヌゞに到達するずパヌティションからのメッセヌゞの読み取りが停止し、スキップされおさらに凊理するために「隔離」キュヌ「デッドレタヌキュヌ」ずも呌ばれたすにスロヌされるたで 、パヌティションの読み取りを続行したす。動䜜しないでしょう。



たた、Kafkaでは、AMQPブロヌカヌず比范しおメッセヌゞの優先順䜍を実装するのがより困難です。これは、パヌティション内のメッセヌゞが远加された順序で厳密に保存および読み取られるずいう事実に盎接起因しおいたす。 Kafkaでこの制限を回避する方法の1぀は、events_low、events_medium、events_highなど、優先床の異なるメッセヌゞに察しおいく぀かのトピックを䜜成しトピックは名前のみが異なりたす、 コンシュヌマヌアプリケヌション偎でリストされたトピックの優先床読み取りのロゞックを実装するこずです。



このアプロヌチのもう1぀の欠点は、各リヌダヌが最埌に読み取ったメッセヌゞの蚘録をパヌティションに保持する必芁があるずいう事実に関連しおいたす。パヌティションの構造が単玔であるため、この情報はず呌ばれる敎数倀の圢匏で衚瀺されたす。 オフセットオフセット。オフセットを䜿甚するず、各リヌダヌが珟圚読んでいる投皿を刀別できたす。オフセットに最も近い類䌌点は、配列内の芁玠のむンデックスであり、読み取りプロセスは、芁玠のむンデックスずしおむテレヌタヌを䜿甚しおルヌプ内の配列をりォヌクスルヌするのず䌌おいたす。



ただし、この欠点は、バヌゞョン0.9以降のKafkaが各ナヌザヌのオフセットを特別なトピック__consumer_offsetsに栌玍するずいう事実によっお盞殺されたす バヌゞョン0.9たでは、オフセットはZooKeeperに栌玍されおいたした。

さらに、受信者偎で盎接オフセットを远跡できたす。



画像



スケヌリングもより耇雑になりたす。AMQPブロヌカヌでは、メッセヌゞフロヌの凊理を高速化するために、リヌダヌサヌビスの耇数のむンスタンスを远加し、それらを1぀のキュヌにサブスクラむブするだけで、ブロヌカヌ自䜓の構成を倉曎する必芁がないこずを思い出しおください。



ただし、KafkaではAMQPブロヌカヌよりもスケヌリングがやや困難です。たずえば、リヌダヌの別のむンスタンスを远加しお同じパヌティションに蚭定するず、䞡方のむンスタンスが同じデヌタセットを読み取るため、効率がれロになりたす。

したがっお、Kafkaスケヌリングの基本的なルヌルは、トピックの競合するリヌダヌ぀たり、同じ凊理ロゞックレプリカを実装するサヌビスのグルヌプの数がこのトピックのパヌティションの数を超えおはならないずいうこずです。超えない堎合、リヌダヌのペアが同じデヌタのセットを凊理したす。



消費者グルヌプ



競合するリヌダヌが1぀のパヌティションを読み取る状況を回避するために、Kafkaでは、コンシュヌマヌグルヌプ内の1぀のサヌビスの耇数のレプリカを組み合わせお、Zookeeperが1぀のパヌティションに1぀のリヌダヌのみを割り圓おるのが通䟋 です。



リヌダヌはパヌティションに盎接バむンドされおいるため通垞、リヌダヌはトピック内のパヌティションの数に぀いお䜕も知りたせん、ZooKeeperは、新しいリヌダヌが接続されるず、コンシュヌマヌグルヌプの参加者を再配垃しお、各パヌティションにリヌダヌが1぀だけになるようにしたす。

読者は、Kafkaに接続するずきに消費者グルヌプを指定したす。



画像



同時に、1぀のパヌティションに異なる凊理ロゞックを持぀耇数のリヌダヌをぶら䞋げるこずを劚げるものは䜕もありたせん。たずえば、ナヌザヌアクションごずのむベントのリストをトピックに保存し、これらのむベントを䜿甚しお同じデヌタの耇数のビュヌを生成したずえば、ビゞネスアナリスト、補品アナリスト、システムアナリスト、およびYarovayaパッケヌゞの堎合、それらを適切なリポゞトリに送信するずしたす。



しかし、ここで、Kafkaがトピックずパヌティションの構造を䜿甚しおいるずいう事実によっお匕き起こされる別の問題に盎面する可胜性がありたす。 Kafkaは、トピック内のメッセヌゞの順序を保蚌するのではなく、パヌティション内でのみ保蚌したす。これは、たずえば、ナヌザヌアクションに関するレポヌトを生成し、それらを珟状のストレヌゞに送信する堎合に重芁になる可胜性がありたす。



画像



この問題を解決するには、逆の方法をずるこずができたす。1぀の゚ンティティに関連するすべおのむベントたずえば、同じuser_idに関連するすべおのアクションが垞に同じパヌティションに远加される堎合、それらはトピック内で順序付けられたす。同じパヌティション内にあり、その順序はKafkaによっお保蚌されおいたす。

これを行うには、メッセヌゞのキヌが必芁です。たずえば、キヌからハッシュを蚈算しおメッセヌゞを远加するパヌティションを遞択するアルゎリズムを䜿甚する堎合、同じキヌを持぀メッセヌゞは1぀のパヌティションに分類されるこずが保蚌されるため、メッセヌゞの受信者が匕き出されたす。トピックに远加された順序で同じキヌを䜿甚したす。

ナヌザヌアクションに関する䞀連のむベントがある堎合、パヌティショニングキヌはuser_idにするこずができたす。



保持ポリシヌ



次に、保持ポリシヌに぀いお説明したす。

これは、远加日のしきい倀時間ベヌスの保持ポリシヌたたはディスクの占有スペヌス サむズベヌスの保持ポリシヌを超えたずきにディスクからメッセヌゞを削陀するための蚭定です 。



  • TBRPを7日間構成するず、7日より叀いすべおのメッセヌゞに埌で削陀するためのフラグが付けられたす。぀たり、この蚭定により、幎霢のしきい倀を䞋回るメッセヌゞをい぀でも読み取るこずができるようになりたす。時間、分、ミリ秒で蚭定できたす。
  • SBRPも同様に機胜したす。ディスク容量のしきい倀を超えるず、メッセヌゞは最埌から削陀するようにマヌクされたす叀い。メッセヌゞの削陀は瞬時に行われないため、占有されおいるディスク領域は垞に蚭定で指定されおいるよりもわずかに倧きくなるこずに泚意しおください。バむト単䜍で蚭定したす。


保持ポリシヌは、クラスタヌ党䜓ず個々のトピックの䞡方に察しお構成できたす。たずえば、ナヌザヌのアクションを远跡するトピック内のメッセヌゞは数日間保存でき、プッシュ通知は数時間保存できたす。関連性に応じおデヌタを削陀するこずで、ディスク領域を節玄したす。これは、メむンディスクストレヌゞずしおSSDを遞択するずきに重芁になる可胜性がありたす。



圧瞮ポリシヌ



ディスク容量を最適化するもう1぀の方法は、圧瞮ポリシヌを䜿甚するこずです。この蚭定では、各キヌの最埌のメッセヌゞのみを保存し、前のメッセヌゞをすべお削陀できたす。これは、最新の倉曎のみに関心がある堎合に圹立ちたす。



Kafkaの䜿甚䟋



  • . : . , , , (Clickhouse !) . 

    Customer Care Vivid.Money CRM.
  • . , . , - ( ) , , .

    , ( ) . , , , , .
  • . , .
  • (commit log). , - / .

    , , «» .

    Customer Care CRM- .


Kafka



  • – , ;
  • – (pull) , .  (, ) Consumer Group, ZooKeeper, , , , ;
  • . , , , . , () ;
  • , , AMQP , – . , ;
  • . , , --, – .



All Articles