第4章 Kafka コンシューマー設定の調整
設定プロパティーを使用して、Kafka コンシューマーのパフォーマンスを最適化します。コンシューマーを調整する場合、最も重要なことは、取得するデータ量に効率的に対処できるようにすることです。プロデューサーのチューニングと同様に、コンシューマーが想定どおりに動作するまで、段階的に変更を加える必要があります。
コンシューマーをチューニングするときは、パフォーマンスと動作に大きな影響を与えるため、次の点を慎重に考慮してください。
- スケーリング
- コンシューマーグループは、複数のコンシューマーに負荷を分散することでメッセージの並列処理を可能にし、スケーラビリティーとスループットを向上させます。1 つのパーティションはコンシューマーグループ内の 1 つのコンシューマーにしか割り当てられないため、トピックパーティションの数により達成できる並列処理の最大レベルが決まります。
- メッセージの順序付け
- トピック内の絶対的な順序付けが重要な場合は、単一パーティションのトピックを使用してください。コンシューマーは、ブローカーにコミットされたのと同じ順序で単一パーティションのメッセージを監視します。つまり、Kafka は単一パーティションのメッセージの順序付けのみを保証します。ユーザーなどの個々のエンティティーに固有のイベントに関してメッセージの順序付けを維持することもできます。新しいエンティティーが作成された場合は、そのエンティティー専用の新しいトピックを作成できます。ユーザー ID などの一意の ID をメッセージキーとして使用し、同じキーを持つすべてのメッセージをトピック内の単一パーティションにルーティングできます。
- オフセットリセットポリシー
-
適切なオフセットポリシーを設定すると、コンシューマーは目的の開始点からメッセージを消費し、適宜メッセージを処理できるようになります。Kafka のデフォルトのリセット値は
latest
であり、これはパーティションの最後から始まります。そのため、コンシューマーの動作とパーティションの状態によっては、一部のメッセージが失われる可能性があります。auto.offset.reset
をearliest
に設定すると、新しいgroup.id
で接続するときに、すべてのメッセージがログの先頭から取得されるようになります。 - アクセスのセキュリティー保護
- Kafka へのセキュアなアクセスを管理 するユーザーアカウントを設定して、認証、暗号化、および承認のセキュリティー対策を実装します。
4.1. 基本的なコンシューマー設定
接続およびデシリアライザープロパティーはすべてのコンシューマーに必要です。通常、追跡用にクライアント ID を追加することが推奨されます。
コンシューマー設定では、後続の設定に関係なく、以下を行います。
- メッセージをスキップまたは再読み取りするようオフセットを変更しない限り、コンシューマーはメッセージを指定のオフセットから取得し、順番に消費します。
- オフセットはクラスターの別のブローカーに送信される可能性があるため、オフセットを Kafka にコミットした場合でも、ブローカーはコンシューマーがレスポンスを処理したかどうかを認識しません。
基本的なコンシューマー設定プロパティー
# ... bootstrap.servers=localhost:9092 1 key.deserializer=org.apache.kafka.common.serialization.StringDeserializer 2 value.deserializer=org.apache.kafka.common.serialization.StringDeserializer 3 client.id=my-client 4 group.id=my-group-id 5 # ...
- 1
- (必須) Kafka ブローカーの host:port ブートストラップサーバーアドレスを使用して、コンシューマーが Kafka クラスターに接続するよう指示しますコンシューマーはアドレスを使用して、クラスター内のすべてのブローカーを検出し、接続します。サーバーがダウンした場合に備えて、コンマ区切りリストを使用して 2 つまたは 3 つのアドレスを指定しますが、クラスター内のすべてのブローカーのリストを提供する必要はありません。ロードバランサーサービスを使用して Kafka クラスターを公開する場合、可用性はロードバランサーによって処理されるため、サービスのアドレスのみが必要になります。
- 2
- (必須) Kafka ブローカーから取得されたバイトをメッセージキーに変換するデシリアライザー。
- 3
- (必須) Kafka ブローカーから取得されたバイトをメッセージ値に変換するデシリアライザー。
- 4
- (オプション) クライアントの論理名。リクエストのソースを特定するためにログおよびメトリックで使用されます。ID は、時間クォータの処理に基づいてコンシューマーにスロットリングを適用するために使用することもできます。
- 5
- (条件) コンシューマーがコンシューマーグループに参加するには、グループ ID が 必要 です。