25.2. 最も近いレプリカからのメッセージの消費
ラックアウェアネスをコンシューマーで使用して、最も近いレプリカからデータを取得することもできます。これは、Kafka クラスターが複数のデータセンターにまたがる場合に、ネットワークの負荷を軽減するのに役立ちます。また、パブリッククラウドで Kafka を実行する場合にコストを削減することもできます。ただし、レイテンシーが増加する可能性があります。
最も近いレプリカから使用できるようにするには、Kafka クラスターでラックアウェアネスを設定し、RackAwareReplicaSelector
を有効にする必要があります。レプリカセレクタープラグインは、クライアントが最も近いレプリカから消費できるようにするロジックを提供します。デフォルトの実装では、LeaderSelector
を使用して、常にクライアントのリーダーレプリカを選択します。replica.selector.class
に RackAwareReplicaSelector
を指定すると、デフォルトの実装から切り替わります。
レプリカ対応セレクターを有効にした rack
設定例
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: # ... rack: topologyKey: topology.kubernetes.io/zone config: # ... replica.selector.class: org.apache.kafka.common.replica.RackAwareReplicaSelector # ...
Kafka ブローカーの設定に加えて、コンシューマーに client.rack
オプションを指定する必要があります。client.rack
オプションには、コンシューマーが稼動しているrack IDを指定する必要があります。RackAwareReplicaSelector
は、マッチングした broker.rack
と client.rack
ID を関連付けて、最も近いレプリカを見つけ、そこからデータを取得します。同じラック内に複数のレプリカがある場合、RackAwareReplicaSelector
は常に最新のレプリカを選択します。ラック ID が指定されていない場合や、同じラック ID を持つレプリカが見つからない場合は、リーダーレプリカにフォールバックします。
図25.1 同じアベイラビリティーゾーンのレプリカから消費するクライアントの例
コネクターが最も近いレプリカからのメッセージを消費するように、Kafka Connect、MirrorMaker 2、および Kafka Bridge を設定することもできます。KafkaConnect
、KafkaMirrorMaker2
、および KafkaBridge
カスタムリソースでラックアウェアネスを有効にします。この設定ではアフィニティールールは設定されませんが、affinity
または topologySpreadConstraints
を設定することもできます。詳細は、Pod スケジューリングの設定 を参照してください。
Streams for Apache Kafka を使用して Kafka Connect をデプロイする場合、KafkaConnect
カスタムリソースの rack
セクションを使用して client.rack
オプションを自動的に設定できます。
Kafka Connect の rack
設定例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnect # ... spec: # ... rack: topologyKey: topology.kubernetes.io/zone # ...
Streams for Apache Kafka を使用して MirrorMaker 2 をデプロイする場合、KafkaMirrorMaker2
カスタムリソースの rack
セクションを使用して client.rack
オプションを自動的に設定できます。
MirrorMaker 2 の rack
設定例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaMirrorMaker2 # ... spec: # ... rack: topologyKey: topology.kubernetes.io/zone # ...
Streams for Apache Kafka を使用して Kafka Bridge をデプロイする場合、KafkaBridge
カスタムリソースの rack
セクションを使用して client.rack
オプションを自動的に設定できます。
Kafka Bridge の rack
設定例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaBridge # ... spec: # ... rack: topologyKey: topology.kubernetes.io/zone # ...