私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります

序文

現在、新興ミドルウェアの市場には様々な、我々がやっているときに、特定の選択必然的にもつれますが、ビューの設定など、本明細書に表面的なポイントは、実際には、その設計の各ミドルウェアは、独自のユニークな特性や最適化のポイントを持っています、これらは、最大限にその特性を再生されます、最大限に活用するために、私たちの心配をすることが起こる。だけでなく、主にピットを避けるために、自分の弱点を理解しています。ミドルウェアの様々なブロックを構築するようなもので、我々は行うことができ、ビルディングブロックに適した形状を選択することで、Dachuは家を必要としています。

カフカは、それが台所の下で、リビングルームをオンにし、この建物は、だけでなく、クリッピングは、メッセージングミドルウェアを切り離さないと言わなければならない、と両手でリアルタイムのストリーム処理、データサービスを行うことができます。最初の章ので、アプリケーションのシナリオは、技術や原則はカフカファミリーのその技術的特性をサポートするかについて話をし始めているのを開始したいと思います。

一般化のカフカの核となるアイデア

ストレージの「秩序ログ」内のすべてのメッセージは、プロデューサが終了(追加として理解される)にメッセージを発行し、消費者は論理的な場所から順次読み出します。

[A]シーンメッセージングミドルウェア

メッセージングミドルウェアの選択では、私たちの主な懸念は以下のとおりです。メッセージのパフォーマンスと信頼性、シーケンシャル。

1.パフォーマンス

ビジネスのためのコードを記述するためにプログラマとして、これらの基礎となる知識も知っておく必要がありますが、それは、基礎となるオペレーティング・システムの最適化技術のいくつかの利点を実現した主な理由は、高性能のカフカ、。

私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります


[A]ゼロコピーの最適化

これは、我々はゼロコピーモードでの伝統的な方法によって、2つのプランの違いを比較し、カフカは、消費者側の最適化です。

伝統的な方法:

私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります


  • ゼロコピーモード:

  • 究極の目標:どのようにユーザ空間せずにデータを取得するには?

  • 図から分かるように、手順は、ネットワークインタフェースにカーネル空間から直接データをコピーしてユーザバッファにコピーゼロコピー、ファイル記述子を省略しています。

私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります


[二]はディスクに書き込まれた順序を最適化します

メッセージが書き込まれると、ファイルが追加の実施形態を使用して、そしていないメッセージが順次書き込まれ、ディスクに書き込まれ、書き込まれた修正します。私たちは、ディスクベースのランダムアクセスを意味し、ディスクの一般パフォーマンスの低下に基づく読み取りと書き込みのことを信じて、実際には、ディスクの順序に基づいて読み取りと書き込み、ランダム読み取りおよびメモリのパフォーマンスを書くに近い、次の性能比較チャートであります:

私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります


[三]メモリマップを最適化します

  • 要約:なるようにメモリ空間のユーザ領域は、カーネル空間にマッピングされ、ユーザ空間またはこのメモリ領域のカーネル空間修飾のいずれかが、互いに直接マッピングすることができます。

  • 長所:がある場合は、ユーザーモードとカーネルモード、データ伝送効率の多くは非常に高いです。

  • 为什么会提高效率:概括来讲,传统方式为read()系统调用,进行了两次数据拷贝;内存映射方式为mmap()系统调用,只进行一次数据拷贝

【优化四】批量压缩

  • 生产者:批量发送消息集消费者:主动拉取数据,同样采用批量拉取的方式

2.可靠性

Kafka的副本机制是保证其可靠性的核心。

关于副本机制,我将它理解为Leader-Follower机制,就是多个服务器中有相同数据的多个副本,并且划分的粒度是分区。很明显,这样的策略就有下面几个问题必须解决:

  • 各副本间如何同步?

  • ISR机制:Leader动态维护一个ISR(In-Sync Replica)列表,

  • Leader故障,如何选举新的Leader?

  • 要想解决这个问题,就要引出Zookeeper,它是Kafka实现副本机制的前提,关于它的原理且听下回分解,本篇还是从Kafka角度进行分析。在这里我们只需要了解,一些关于Broker、Topics、Partitions的元信息存储在Zookeeper中,Leader发生故障时,从ISR集合中进行选举新的Leader。

request.required.acks来设置数据的可靠性:

私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります


分区机制和副本机制知识点:

私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります


3.顺序性

顺序性保证主要依赖于分区机制 + 偏移量。

提到分区,首先就要解释一下相关的概念以及他们之间的关系,个人总结如下几点:

服务器(Broker):指一个独立的服务器

主题(Topic):消息的逻辑分类,可跨Broker

分区(Partition):消息的物理分类,基本的存储单元

这里盗一张图阐述上述概念间的关系

私たちはその3つのホット宇宙の真実を発見し、カフカの基礎となる原則を掘ります


  • 为什么分区机制可以保证消息的顺序性?

  • Kafka可以保证一个分区内消息是有序且不可变的。

  • 生产者:Kafka的消息是一个键值对,我们通过设置键值,指定消息被发送到特定主题的特定分区。

  • 可以通过设置key,将同一类型的消息,发到同一个分区,就可以保证消息的有序性。

  • 消费者:消费者需要通过保存偏移量,来记录自己消费到哪个位置,在0.10版本前,偏移量保存在zk中,后来保存在 __consumeroffsets topic中。

[処理の流れ]シーンII

0.10バージョンの後、カフカは、フレームワークAPIをストリーミング建て - カフカストリームを、上記のを利用カフカベースのストリーミング処理ライブラリは、これまでのところ、それはカフカになりますメッセージングシステム、ストレージシステム、ストリームが含まれます集中処理プラットフォームのストリーム処理システム。

そして、プラットフォームをストリーミング既存のスパークは異なる、スパークストリーミングであるかFLINKは、システム・アーキテクチャであり、そしてカフカストリームは、ライブラリに属しています。シンプルな設計原理の活用に付着したカフカストリームは、運用・保守に反映されています。カフカストリームは、上記のすべての機能を維持しながら。

どちらも、適切なアプリケーション・シナリオについては、兄は結論、まとめ強制されないを与えています。

  • カフカストリーム:「カフカ - >カフカ」のシーン

  • スパークストリーミング:のための「カフカ - >データベース」または「カフカ - >データサイエンス・モデル」のシーン



おすすめ

転載: blog.51cto.com/14480698/2442618