0

私は、バッファリングシステムとしてKafkaを使用して、Apache NiFiでデータ取り込みワークフローを作成しています。私は同じワークフローを実行する3ノードクラスタを設定しており、各ノードには4つのコアがあります。KafkaによるNiFiワークフローのボトルネック

私は、異なるカフカのトピック間でデータを移動するいくつかの例に頼っていますが、これはワークフローの中で最も遅い部分であり、2つの同一のテストで100%期間の増加。

パブリッシュとコンシューマのカフカプロセッサは3つのノードすべてで実行されており、カフカのトピックには3つのブローカに3つのパーティションがあります。

この矛盾の原因は何か、誰かがそれを緩和してワークフローをスピードアップするために何ができるか考えている人はいませんか?

+1

さらに詳しい情報が必要です... NiFiのバージョンは?カフカブローカーのどのバージョン?カフカプロセッサのどのバージョン(0.9対0.10)? PublishKafkaの前でフローファイルが構築されているのを見ていますか?まったく遅いのは何ですか?一度に1つのメッセージを発行して消費していますか? –

+0

NiFiバージョン1.1.0、Kafkaバージョン0.10.1.2.1、0.10 kafkaプロセッサ、kafkaを公開する前にキューにファイルを構築し、kafkaが望みどおりにファイルを返さないようにします。特定のバッチロジックではなく、時間が含まれています。 – TomRobson

答えて

3

パフォーマンスの最大の改善点は、1つのメッセージを持つ多数のフローファイルではなく、フローファイルごとに多数のメッセージを含むフローファイルを少なくするようにフローを設計することです。

データの形式や各メッセージに何をしているのかわからないので、あなたのユースケースでこれを行う方法は言うまでもありませんが、CSVデータ...目標は、CSVの行ごとに1つのフローファイルではなく、CSVの多くの行で1つのフローファイルを作成することです。

公開側では、このフローファイルをPublishKafka_0_10に送信すると、Message Demarcatorプロパティを改行(shift + enterを使用)に設定し、CSVの各行をKafkaにストリーミングします。

メッセージデマーケータを設定している場合は、1つのフローファイルに最大数の最大ポーリングレコードまで多くのメッセージが書き込まれます。

さらに、パブリッシュまたは消費を並行して行うために、各プロセッサの並行タスク(スケジューリングタブにある)を調整してみることもできます。 3つのパーティションと3つのNiFiノードがあるので、コンシューマ側で並行タスクを増やすことはあまり効果がない可能性が高いため、パーティションごとにスレッドをすでに持っていますが、6つのパーティションと3つのNiFiノードがあれば、 2つの並行タスクを有する。

+0

Bryanに感謝します。 :) – TomRobson

関連する問題