8.5. Cruise Control の設定

Kafka.spec.cruiseControlconfig プロパティーには設定オプションがキーとして含まれ、それらの値は以下の JSON タイプの 1 つになります。

  • 文字列
  • 数値
  • ブール値

AMQ Streams によって直接管理されるオプション以外は、Cruise Control ドキュメント の「Configurations」セクションにリストされているすべてのオプションを指定および設定できます。ここに示されているキーの 1 つと同等の設定オプションまたはキーの 1 つで始まる設定オプションは、編集できません

制限されたオプションが指定された場合、そのオプションは無視され、警告メッセージが Cluster Operator のログファイルに出力されます。すべてのサポートされるオプションは Cruise Control に渡されます。

Cruise Control の設定例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    # ...
    config:
      default.goals: >
         com.linkedin.kafka.cruisecontrol.analyzer.goals.RackAwareGoal,
         com.linkedin.kafka.cruisecontrol.analyzer.goals.ReplicaCapacityGoal
      cpu.balance.threshold: 1.1
      metadata.max.age.ms: 300000
      send.buffer.bytes: 131072
    # ...

CORS (Corss-Origin Resource Sharing) の設定

CORS (Cross-Origin Resource Sharing) を使用すると、REST API へのアクセスに許可されるメソッドおよびアクセス元 URL を指定できます。

デフォルトでは、Cruise Control REST API の CORS は無効になっています。有効にすると、Kafka クラスターの状態の読み取り専用アクセスに対するGET リクエストのみが許可されます。そのため、AMQ Streams コンポーネントとは異なるオリジンで実行されている外部アプリケーションは、Cruise Control API への POST リクエストを行うことができません。ただし、これらのアプリケーションは、現在のクラスター負荷や最新の最適化プロポーザルなどの Kafka クラスターに関する読み取り専用情報へアクセスするための GET リクエストを行うことができます。

Cruise Control の CORS の有効化

Kafka.spec.cruiseControl.config で CORS を有効化および設定します。

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    # ...
    config:
      webserver.http.cors.enabled: true
      webserver.http.cors.origin: "*"
      webserver.http.cors.exposeheaders: "User-Task-ID,Content-Type"
    # ...

詳細は、Cruise Control Wiki の「REST APIs」を参照してください。

容量の設定

Cruise Control は 容量制限 を使用して、リソース分散の最適化ゴールが破損しているかどうかを判断します。このタイプには 4 つのゴールがあります。

  • DiskUsageDistributionGoal - ディスク使用量の分布
  • CpuUsageDistributionGoal - CPU 使用量の分布
  • NetworkInboundUsageDistributionGoal - ネットワーク受信使用量の分布
  • NetworkOutboundUsageDistributionGoal - ネットワーク送信使用量の分布

Kafka ブローカーリソースの容量制限は、Kafka.spec.cruiseControlbrokerCapacity プロパティーに指定します。これらはデフォルトで有効になっており、デフォルト値を変更できます。容量制限は、標準の OpenShift バイト単位 (K、M、G、および T) または同等 (2 のべき乗) の bibyte (Ki、Mi、Gi、および Ti) を使用して、以下のブローカーリソースに設定できます。

  • disk: ブローカーごとのディスクストレージ(デフォルトは 100000 Mi)
  • cpuUtilization: パーセントで表した CPU 使用率(デフォルトは 100)
  • inboundNetwork: バイト毎秒単位のインバウンドネットワークスループット(デフォルトは 10000 KiB/s)
  • outboundNetwork: バイト毎秒単位のアウトバウンドネットワークスループット(デフォルトは 10000 KiB/s)

AMQ Streams の Kafka ブーカーは同種であるため、Cruise Control は監視している各ブローカーに同じ容量制限を適用します。

bibyte 単位での Cruise Control brokerCapacity の設定例

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
metadata:
  name: my-cluster
spec:
  # ...
  cruiseControl:
    # ...
    brokerCapacity:
      disk: 100Gi
      cpuUtilization: 100
      inboundNetwork: 10000KiB/s
      outboundNetwork: 10000KiB/s
    # ...

関連情報

詳細は BrokerCapacity スキーマー参照」 を参照してください。

ロギングの設定

Cruise Control には独自の設定可能なロガーがあります。

  • rootLogger.level

Cruise Control では Apache log4j 2 ロガー実装が使用されます。

logging プロパティーを使用してロガーおよびロガーレベルを設定します。

ログレベルを設定するには、ロガーとレベルを直接指定 (インライン) するか、またはカスタム (外部) ConfigMap を使用します。ConfigMap を使用する場合、logging.valueFrom.configMapKeyRef.name プロパティーを外部ロギング設定が含まれる ConfigMap の名前に設定します。ConfigMap 内では、ロギング設定は log4j.properties を使用して記述されます。logging.valueFrom.configMapKeyRef.name および logging.valueFrom.configMapKeyRef.key プロパティーはいずれも必須です。Cluster Operator の実行時に、指定された正確なロギング設定を使用する ConfigMap がカスタムリソースを使用して作成され、その後は調整のたびに再作成されます。カスタム ConfigMap を指定しない場合、デフォルトのロギング設定が使用されます。特定のロガー値が設定されていない場合、上位レベルのロガー設定がそのロガーに継承されます。ここで、inline および external ロギングの例を示します。

inline ロギング

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
  cruiseControl:
    # ...
    logging:
      type: inline
      loggers:
        rootLogger.level: "INFO"
    # ...

外部ロギング

apiVersion: kafka.strimzi.io/v1beta2
kind: Kafka
# ...
spec:
  cruiseControl:
    # ...
    logging:
      type: external
      valueFrom:
        configMapKeyRef:
          name: customConfigMap
          key: cruise-control-log4j.properties
    # ...