2017-12-09 4 views
2

私は、カフカとの並列化の基本的なアプローチがパーティション化を利用することを理解しています。しかし、私は、6つのパーティションしかない既存のインフラストラクチャを活用しなければならないという点で特別な状況があり、毎秒数百万と数百万のレコードを処理する必要があります。パーティションとは別にkstreamをさらに並列化する方法はありますか?

各kstreamコンシューマに読み込みを行い、同時に単一のパーティションから負荷を均等に分配する方法で、さらに最適化する方法はありますか?

答えて

1

パーティションは並列化のレベルです。 6つのパーティションでは、最大6つのインスタンス(kstreamの)がデータを消費できます。各インスタンスは1 Gbpsので、つまり別のマ​​シンそれぞれをネットワーク内にある場合、あなたはそれが十分ではない場合は、配布のための今すぐデータ

を再分割する必要があると思います600メガバイト/秒

との合計で読み込むことができ、あなたの処理は、あなたが別のマシン上で(同じコンシューマ・グループとの)各kstreamを実行する必要があります

ここで(カフカSQL経由)カフカストリームは5つのプロセス

それはすべてhttps://www.youtube.com/watch?v=denwxORF3pUに並列化される方法を示し短い動画ですパーティションに依存& executo rs。 6つのパーティションでは、処理の複雑さに応じて、通常は500K +メッセージ/秒を達成することができます。

+0

ありがとうございました。残念ながら、私が扱っている状況では、このトピックのパーティション数を変更することはできません。ですから、6つのパーティションの制約があるため、最大並列処理を達成する必要があります。この場合、毎秒数百万のメッセージを処理する必要があります。また、コンパクトな話題なので、最初から最後まで素早く読むことができる必要があります。 – rjr862

+0

1 - 各パーティションのリーダーが別のブローカーにあることを確認してください 2 - メインボトルネックがネットワークI/Oとなるため圧縮を使用してください 3 - 10 GBpsネットワークインターフェイスを使用して6 * 10 Gbpsの最大スループットに達する 4 - 多くのディスクシークがある場合のためにSSDを使用してください –

+0

また、何百万ものメッセージ/秒を言及します。また、このトピックについてmsg/dayと言えますか?つまり、1000億超のメッセージが話題になりますか? –

2

最も簡単な方法は、必要な数のパーティションで「ヘルパー」トピックを作成することです。このトピックは、元のデータが実際の入力トピックに安全に保存されるため、保持時間は非常に短く設定できます。このヘルパーのトピックを使用して、すべてのデータを経路指定し、下流の並列処理を可能にします。

+0

これが正確に何を達成したのか分かりませんが、さらに展開できますか? 1つのパーティションに100万レコードがあるとします。各レコードから、フィールドa、b、cが必要です。 kstreams(または.through)を使用して、この単一のパーティションからbとcを読み込むことをどのように並列化できますか? – rjr862

+0

初期読み込みを一度に並列化することはできません。元のストリーム/トピックをサブストリームに分割し、後で並列化するだけです。 –

関連する問題