Openflow Connector for Kafkaのパフォーマンスチューニング¶
注釈
コネクタには、 コネクタ利用規約 が適用されます。
このトピックでは、 Openflow Connector for Kafka のパフォーマンスを最適化し、Snowflakeへのデータ取り込み時に最適なスループットを達成し、レイテンシを最小限に抑えるためのガイダンスを提供します。
パフォーマンスの考慮事項¶
最適なパフォーマンスが得られるようにOpenflow Connector for Kafkaを構成する場合、取り込みのスループットとレイテンシに影響する以下の主な要因を考慮します。
メッセージの特性¶
- メッセージのサイズ
より大きなメッセージはスループットを向上させますが、メッセージごとに多くのメモリと処理時間を必要とする可能性があります。
- メッセージ形式
JSON メッセージは通常、スキーマ推論やシリアル化/逆シリアル化の違いにより、 AVRO メッセージに比べてより多くの処理オーバーヘッドを必要とします。
- メッセージ量
メッセージ量が多くなると、並列処理とより大きなバッチサイズがもたらすメリットがあります。
Kafkaの構成¶
- パーティション数
パーティションを増やすと並列度を高めることができますが、コンシューマー構成との慎重な調整が必要になります。
- 圧縮
メッセージ圧縮はネットワーク帯域幅を削減できますが、 CPU オーバーヘッドが増加します。
フローファイルの最適化¶
- フローファイルのサイズ
パフォーマンスを最適化するには、フローファイルに個々の小さなメッセージを含めるのではなく、1~10 MB の範囲にします。より大きなフローファイルは、処理のオーバーヘッドを削減し、個々のファイル操作の数を最小限に抑えることでスループットを向上させます。デフォルト設定では、許容範囲内のサイズのフローファイルが得られるはずです。スループットが低いと、小さなフローファイルが予想されます。
高いスループットで小さなフローファイルが観察された場合は、 Snowflakeサポート までご連絡ください。
ネットワークとインフラ¶
- ネットワークレイテンシ
KafkaブローカーとOpenflow間のレイテンシが低下することで、全体的なパフォーマンスが向上します。
- 帯域幅
高スループットのシナリオでは、十分なネットワーク帯域幅が重要です。
推奨ノードサイズ¶
以下のテーブルに、予想される作業負荷の特性に基づいた推奨構成を示します。
ノードサイズ |
推奨されるケース |
メッセージレート容量 |
---|---|---|
小(S) |
低~中レベルのスループットシナリオ |
ノードあたり最大10 MB/s |
中(M) |
中~高レベルのスループットシナリオ |
ノードあたり最大40 MB/s |
大(L) |
高レベルのスループットシナリオ |
ノードあたり40 MB/sを超える |
パフォーマンス最適化のベストプラクティス¶
プロセッサーの並行タスクの調整¶
プロセッサーのパフォーマンスを最適化するには、 ConsumeKafka と PutSnowpipeStreaming プロセッサーの両方で並行タスク数を調整できます。並行タスクは、プロセッサーが複数のスレッドを同時に実行することを可能にし、大容量シナリオのスループットを向上させます。
プロセッサーの並行タスクを調整するには、以下のタスクを実行します。
Openflowキャンバスでプロセッサーを右クリックします。
コンテキストメニューから Configure を選択します。
Scheduling タブに移動します。
Concurrent tasks フィールドに、希望する並行タスク数を入力します。
Apply を選択して構成を保存します。
並行タスクの推奨設定¶
ノードサイズ |
ConsumeKafka タスク |
PutSnowpipeStreaming タスク |
---|---|---|
小(S) |
1 |
1-2 |
中(M) |
2 |
2-4 |
大(L) |
4-8 |
4-10 |
重要な考慮事項¶
- メモリ使用状況
各並行タスクは追加のメモリを消費します。並行タスクの増加時に JVM のヒープ使用状況を監視します。
- Kafkaパーティション
ConsumeKafka の場合、並行タスク数とノード数を掛け合わせた数が、すべてのトピックのKafkaパーティション総数を超えないようにします。
- 控えめにスタートする
低い値から始め、パフォーマンスメトリックを監視しながら徐々に上げていきます。
PutSnowpipeStreaming プロセッサーの最大バッチサイズの調整¶
PutSnowpipeStreaming プロセッサーのMax Batch Size(最大バッチサイズ)パラメーターは、1つのバッチで処理される記録数を制御します。このパラメーターを調整することで、メモリ使用量とスループットを最適化することができます。
最大バッチサイズは平均記録サイズに基づいて調整し、合計バッチサイズ(最大バッチサイズ×平均記録サイズ)を4 MB 前後に保ち、最適なパフォーマンスを得るには16 MB を超えないようにします。
例えば、平均記録サイズが 1KB の場合、最大バッチサイズは4,000に設定する必要があります。
最大バッチサイズを調整するには、以下を実行します。
PutSnowpipeStreaming プロセッサーを右クリックします。
コンテキストメニューから Configure を選択します。
Properties タブに移動します。
Max Batch Size プロパティを探します。
平均記録サイズに基づいて計算された値を入力します。
Apply を選択して変更を保存します。
重要な考慮事項¶
バッチサイズを調整する際のメモリ使用量とスループットを監視します。
これらの推奨値でスタートし、パフォーマンスを監視しながら適宜調整してください。
スケーリングに関する考慮事項¶
Openflowプラットフォームは、 CPU の利用率に基づくHorizontal Pod Autoscaler(HPA)を使用し、カスタムメトリックベースの自動スケーリングはサポートしていません。
効果的な自動スケーリングには、並行タスクの適切な構成が不可欠です。並行タスクの設定が低すぎると、Kafkaの遅延が増大してもシステムがスケールアップしないことがあります。これは、スケーリングのトリガーに必要な CPU 利用率のしきい値に到達しない可能性があるためです。その結果、追加リソースの可用性があるにもかかわらず、処理が遅れ、バックログが累積する可能性があります。
最適なスケーリング動作を確保するため、 プロセッサーの並行タスクの調整 の推奨事項に従って並行タスクを構成し、 CPU 利用率とKafka遅延メトリックの両方を監視します。
パフォーマンス問題のトラブルシューティング¶
一般的なパフォーマンスのボトルネック¶
高いコンシューマーの遅延またはSnowflake取り込みのボトルネック¶
Kafkaコンシューマーの遅延が増大している場合、またはSnowflake取り込みが遅い場合は、以下のタスクを実行します。
OpenflowとKafkaブローカー間のネットワーク接続と帯域幅を確認します。
PutSnowpipeStreaming プロセッサーの前のキューが増加するかどうかを観察します。
増加する場合は、 プロセッサーの並行タスクの調整 に記載されている範囲制限内で、 PutSnowpipeStreaming プロセッサーの並行タスクの追加を検討します。
増加しない場合は、 プロセッサーの並行タスクの調整 に記載されている範囲制限内で、 ConsumeKafka プロセッサーの並行タスクの追加を検討します。
より大きなノードタイプの使用を検討します。
ランタイムの最大ノード数を増やすことを検討します。
メモリ圧力¶
メモリ関連の問題が発生した場合:
メモリフットプリントを減らすためにバッチサイズを小さくします。
ConsumeKafka プロセッサーの並行タスク数を減らします。
より大きなノードタイプへのアップグレードを検討します。
ネットワークレイテンシの問題¶
レイテンシが大きい場合:
Openflowと外部システム間のネットワーク構成を確認します。
Kafkaクラスターの近くにOpenflowをデプロイすることを検討します。
スループットが低い場合は、 PutSnowpipeStreaming プロセッサーの Client Lag 設定と、 ConsumeKafka プロセッサーの Max Uncommitted Time 設定を下げることを検討します。
次のステップ¶
ノードサイズに応じた推奨構成から始めてください。
パフォーマンスメトリックを監視し、観察された動作に基づいて設定を調整します。
本番環境にデプロイする前に、非本番環境での負荷テストを検討します。