どのように多くのカフカサーバは10億リクエストのシナリオに直面するために必要な評価します.



要求シナリオ分析
シナリオは、どのようなシナリオが企業でどのようなシナリオで遭遇するのか、どのような規模のクラスタを設定する必要があるかなどのシナリオで、生産環境に応じたアーキテクチャ設計.
kafkaクラスタ,hbaseクラスタ,hadoopクラスタ,クラスタ評価は類似している.

例えばKafkaを取りましょう.
電子商取引プラットフォーム、10億の要求は、カフカクラスタに毎日送られます.80 - 20の規則によると、問題の一般的な評価は大きくありません.
例えば、我々のカフカクラスタがおよそ10億の要求に直面しているならば、その日の24時間に基づいて、典型的な日に午後12時と8時00分の間に多くのデータがありません.80パーセントの要求は、処理にもう16時間かかります.
魔女は、我々は800万の要求を処理するために16時間を使用する必要があることを意味します.
実際の状況によると、私たちは毎日熱い時間を持っています、すなわち、この時間の間に受け取られる要求の数は最も大きいです、そして、80 - 20の規則に従って、800万の要求のデータの80 %を処理する16*0.2=3時間.
それで、我々は予備的な図を得ました.そして、それは3時間で、我々はおよそ600万の要求を処理しました
それでは、ピーク期間中にQPSの単純な計算を行いましょう
600 million requests / 3 hours = 55,000/s
メッセージの大きさのために、50 KBを仮定しましょう.もちろん、通常、50 KBはメッセージのサイズを意味しません、我々が通常一つのメッセージに複数のログを結合するので.(通常、ログメッセージのサイズは数バイトです).
それで、我々は以下の公式を得ることができます
1Billion Requests  50KB = 46T
つまり、我々は1日あたり46テラバイトのデータを格納する必要があることを意味します.
カフカがそれに複製しているならば、我々は通常2つの複製を準備します:46T * 2 = 92T同時に、カフカのデータは保持期間を有する.最後の3日のデータが保持されていると仮定されます

シナリオ概要
10億の要求、ピークの55000 qps、データの276 t.

物理的機械量の評価
まず、仮想マシンまたは物理的なマシンが必要かどうかを分析する
我々がカフカ、MySQL、Hadoopのようなクラスタを構築するとき、我々は我々の生産で物理的な機械を使います.性能要件のため.
上記の計算によれば、処理するのに必要なピーク要求数は毎秒55000である.実際には、1つまたは2つの物理機械が耐えることができる.通常,機械を評価するとき,ピークの4倍で評価した.
それが4回であるならば、我々のクラスタはおよそ200000のQPSを買うことができます.そのように我々のクラスタはより安全です.
およそ5台の物理的な機械

シナリオ概要
10億の要求、ピークの55000 qps、データの276 t.つの物理的なマシンが必要です.

ディスクの選択
評価は以下の2つの側面に基づいている:SSDソリッドステートドライブ、または通常の機械ドライブ?
SSDドライブ:より良い性能,しかしより高価である
SASディスク:いくつかのパフォーマンスは非常に良いが、安い
SSDハードディスクの性能は良いです.そして、それはランダムReadとWriteのその性能がより良いことを意味します.MySQLのようなクラスタに適しています.しかし、シーケンシャル書き込み性能はSASディスクのそれと似ています.
カフカは、それを理解するように、シーケンシャル書き込みで書かれています.それで、我々はちょうど通常の機械式ハードディスクを使うことができます.
次に、サーバーごとに必要なディスク数を推定する必要がありますか?
つのサーバ、合計276 tが必要です、そして、データのおよそ60 tは各々のサーバーに格納される必要があります.
企業のサーバは11ハードディスクで構成できると仮定し、各ディスクは7 Tです.
11 * 7T = 77T
77T * 5 servers = 385T
見積もりは、ディスクの使用量は

シナリオ概要
10億の要求、5つの物理的な機械、7 Tの容量をもつ11のSASハードディスク

記憶評価
どのくらいのメモリが必要かを評価します.
我々は、データの読み書きのKafkaのプロセスがOSキャッシュに基づいていることを見出した.言い換えれば、我々のOSキャッシュが無限であるなら、全体のKafka操作はメモリに基づいています、そして、パフォーマンスは非常に良いに違いありません.
しかし、メモリは限られています
OSキャッシュのリソースを予約する必要があります
KafkaのコアコードはScalaで書かれ、クライアントコードはJavaで書かれています.それはすべてのJVMベースです.それで、我々はJVMに若干の記憶を与えなければなりません.Kafkaの設計では、JVMには多くのデータ構造はない.それで、我々はJVMのために多くの記憶を必要としません.親指の規則として、JVMのメモリリソースを10 GB確保できます.
100の話題を持っている10億の要求のプロジェクトを言いましょう.92T * 3 days = 276T .パーティションは、物理的なマシン上のディレクトリが含まれています.ログファイル.
. logはログデータを格納するファイルです.デフォルトでは、a logファイルはサイズ1ギガバイトです.
我々はちょうど最新の最新のデータの25 %を維持する必要があります.メモリ内のログファイル.
250M * 1000 = 0.25G * 1000 = 250G of memory.
250GB of memory / 5 servers = 50GB of memory
50G + 10G = 60G memory
全体的に、メモリの64ギガバイトは約右です.なぜなら、私たちはOSに4ギガバイトのメモリを確保しなければならないからです.もちろん、128ギガバイトのメモリでサーバを手に入れることができれば、それは素晴らしいでしょう.
評価の初めに、我々は話題に5つのパーティションがあると仮定しました.大量のデータがあるトピックなら、10個のパーティションがあるかもしれません.次に、上記のプロセスに従う必要があり、計算します.

シナリオ概要
10億の要求、5つの物理的な機械、7 Tの容量をもつ11のSASハードディスクは、64 GBのメモリを必要とします

ストレスアセスメント
どのくらいのCPUコアがサーバーごとに必要です(リソースが限られている)を評価します.評価は、プロセスにどのように多くのスレッドがあるかに基づいています.
どのように多くのスレッドKAFKAサーバーを一度それを起動する必要があります.
Acceptor thread                    1
Processor threads                  6-9
threads handling the request       32
Threads for cleaning up
Leader partition -> follower partition, the threads to pull data
ISR mechanism (ID number), mechanism to check ISR list periodically
So, once a Kafka service is up and running, there are about a hundred threads.
CPUが4つのコアを持っているならば、数ダースのスレッドが通常CPUを満たします.
CPUのコア数が8の場合、簡単にスレッド数十をサポートすることができます.
100以上のスレッド、または200のようなものがあれば、8 CPUコアは動作しません.CPUコアの推奨数は16である.可能であれば、32 CPUコアが最適です.
結論
Kafkaクラスタでは、16個のCPUコアの最小値が与えられ、32個のCPUコアがより良いでしょう.
2cpu * 8 = 16 cpu core
4cpu * 8 = 32 cpu core

シナリオ概要
10億の要求、5つの物理的な機械、7 Tの容量をもつ11のSASハードディスクは、64 GBのメモリ(128 GBがよりよい)を必要として、16台のCPU芯(32がよりよい)を必要とします

ネットワーク要件評価
ネットワークカードの種類を評価する
我々は基本的に2つの選択肢があります:通常ギガビット(1 g/s)または10ギガビット(10 g/s)ネットワークカード
そのピークでは、毎秒で55000の要求を注いでいました
我々は、それ以前に、サーバーにつき毎秒488 mのデータである100 topic * 5 partition * 2 replicas = 1000 partitionを言いました.データは複製されなければなりません、そして、重複の間の同期もネットワークによって必要です.10,000 requests * 50KB = 488M注意:多くの企業では、リクエストは50 KBほど大きくない.私たちの会社では、ホストが生産終了時にデータをカプセル化し、複数のデータを一緒に組み合わせるので、リクエストはとても大きくありえます.
一般に、ネットワークカードのブロードバンドは制限されず、ギガビットネットワークカードであれば一般的に700 m程度である.
しかし、最善の場合、我々は10メガビットのネットワークカードを使用すると、それは簡単です.