Ansible Playbooks for Confluent Platform の構成

このトピックでは、Ansible Playbooks for Confluent Platform の一般的な構成方法について説明します。

Ansible ホスト変数の設定

インベントリファイルでホストを構成し、接続を確認したら、必要な Confluent Platform 構成を記述する変数をインベントリに設定します。

Review the commented out variables with the example inventory, hosts_example.yml, at the root of the cp-ansible source code. For a full list of supported variables, see Ansible variable file.

各変数は、すべてのホストに適用することも、特定のホストに適用することもできます。

次の例では、すべてのホストに変数 ssl_enabled=true を設定します。

all:
  vars:
   ssl_enabled: true

次の例では、1 つの Kafka ブローカーホストに変数 broker_id を設定します。

kafka_broker:
  hosts:
    ip-192-24-10-207.us-west.compute.internal:
      broker_id: 0

一般的には、各ホストが Confluent Platform の全般の構成を認識できるように、変数は all グループで適用することをお勧めします。

インベントリファイルと同じ階層にある group_vars ディレクトリと host_vars ディレクトリを使用して変数を渡すこともできます。Ansible のディレクトリのレイアウト を参照してください。

また、重要な変数を上記構成の中のそれぞれの変数ファイル内に保存するとともに、Ansible Vault を使用して変数ファイルを暗号化することをご検討ください。

このドキュメントの以降の部分では、Ansible 変数を使用した Confluent Platform の構成方法について説明します。

Confluent Platform ソフトウェアのインストール方法の設定

Ansible Playbooks for Confluent Platform では、Confluent Platform ソフトウェアをホストマシンにインストールするために以下の方法がサポートされています。

packages.confluent.io でホストされるパッケージを使用したパッケージインストール
デフォルトではこの方法が使用されます。インターネット経由ですべてのホストが packages.confluent.io に接続できる必要があります。この方法では、インベントリ変数は使用されません。
独自の RPM または DEB パッケージリポジトリでホストされるパッケージを使用したパッケージインストール

この方法は、インターネットに接続していないホストでも使用できます。Confluent Platform パッケージをダウンロードして、別途用意したリポジトリに配置する必要があります。

この方法を使用するには、インベントリファイルに以下を設定します。

パッケージが RHEL または Centos のホスト上にある場合

all:
  vars:
    repository_configuration: custom
    custom_yum_repofile_filepath: /tmp/my-repo.repo

パッケージが Debian のホスト上にある場合

all:
  vars:
    repository_configuration: custom
    custom_apt_repo_filepath: /tmp/my-source.list
packages.confluent.io でホストされる tarball を使用した Tar インストール

インターネット経由ですべてのホストが packages.confluent.io に接続できる必要があります。

この方法を使用するには、インベントリファイルに以下を設定します。

all:
  vars:
    installation_method: archive
独自のウェブサーバーでホストされる tarball を使用した Tar インストール

この場合、インターネットへの接続は必要ありませんが、tarball をダウンロードしてウェブサーバーでホストする必要があります。

この方法を使用するには、インベントリファイルに以下を設定します。

all:
  vars:
    installation_method: archive
    confluent_archive_file_source: http://packages.confluent.io/archive/7.0/confluent-7.0.1.tar.gz
Ansible コントロールノード上の tarball を使用した Tar インストール

この場合、インターネットへの接続は必要ありませんが、tarball をダウンロードしてコントロールノードにコピーする必要があります。

この方法を使用するには、インベントリファイルに以下を設定します。

all:
  vars:
    installation_method: archive
    confluent_archive_file_source: /path/to/confluent-7.0.1.tar.gz
    confluent_archive_file_remote: false

カスタムコンポーネントプロパティの設定

構成設定が Ansible Playbooks for Confluent Platform によって直接的にサポートされていない場合は、カスタムプロパティ機能を使用して Confluent Platform コンポーネントを構成します。

Before you set a custom property variable, first check the Ansible variable file for an existing variable. If you find an existing variable that directly supports the setting, use the variable in the inventory file instead of using a config override.

以下の辞書を使用して、Ansible インベントリファイル hosts.yml にカスタムプロパティを構成します。

  • zookeeper_custom_properties
  • kafka_broker_custom_properties
  • schema_registry_custom_properties
  • kafka_rest_custom_properties
  • kafka_connect_custom_properties
  • ksql_custom_properties
  • control_center_custom_properties
  • kafka_connect_replicator_custom_properties
  • kafka_connect_replicator_consumer_custom_properties
  • kafka_connect_replicator_producer_custom_properties
  • kafka_connect_replicator_monitoring_interceptor_custom_properties

次の例では、initLimit プロパティと syncLimit プロパティが ZooKeeper プロパティファイル に設定され、num.io.threads プロパティが Kafka プロパティファイル に設定されます。さらに、confluent.controlcenter.ksql.default.advertised.url プロパティが Confluent Control Center プロパティファイル に設定されます。confluent.controlcenter.ksql.default.advertised.url プロパティのデフォルト値は、ksqlDB クラスターを特定するために Control Center が使用する名前であることに注意してください。

all:
  vars:
    zookeeper_custom_properties:
      initLimit: 6
      syncLimit: 3
    kafka_broker_custom_properties:
      num.io.threads: 15
    control_center_custom_properties:
      confluent.controlcenter.ksql.default.advertised.url: http://ksql-external-dns:1234,http://ksql-external-dns:2345

特定ホストのカスタムプロパティの設定

特定のホストに個別にプロパティを設定することができます。ホストの直下に一連のコンポーネントプロパティを直接追加します。

次の例では、ホスト ip-192-24-10-207.us-west.compute.internal に対して、broker.rack プロパティが us-west-2a に設定されます。

kafka_broker:
  hosts:
    ip-192-24-10-207.us-west.compute.internal:
      kafka_broker_custom_properties:
        broker.rack: us-west-2a

Confluent ライセンスの追加

Confluent Platform コンポーネントの Confluent ライセンスキーを追加するには、次のように hosts.yml ファイル内で各 Confluent Platform コンポーネントのカスタムプロパティを使用します。

all:
  vars:
    kafka_broker_custom_properties:
     confluent.license:
   schema_registry_custom_properties:
     confluent.license:
   kafka_connect_custom_properties:
     confluent.license:
   control_center_custom_properties:
     confluent.license:
   kafka_rest_custom_properties:
     confluent.license:
   ksql_custom_properties:
     confluent.license:

コネクターにライセンスを追加するには、hosts.yaml ファイル内で以下の構成を使用します。

all:
  vars:
    kafka_connect_connectors:
    - name: sample-connector
       config:
          confluent.license:

次の例では、Kafka および Schema Registry のライセンスキーを追加しています。この例では、ライセンスキー用の変数を作成し、カスタムプロパティでその変数を使用しています。

vars:
  confluent_license: asdfkjkadslkfjaslkdf
  kafka_broker_custom_properties:
    confluent.license: "{{ confluent_license }}"
  schema_registry_custom_properties:
    confluent.license: "{{ confluent_license }}"

JMX Exporter の有効化

デフォルトでは JMX Exporter は無効になっています。有効にすると、インターネット経由で JMX Exporter の jar ファイルがダウンロードされ、すべての Confluent Platform コンポーネントと Confluent Control Center で有効になります。

JMX Exporter は、次のようにして hosts.yml で有効にします。

all:
  vars:
    jmxexporter_enabled: true

JMX Exporter のしくみと、JMX データを使用して Prometheus および Grafana で Kafka クラスターをモニタリングする方法の詳細については、「Monitoring Your Event Streams: Integrating Confluent with Prometheus and Grafana」を参照してください。

Jolokia の有効化

Ansible Playbooks for Confluent Platform によってインストールされた場合、Confluent Platform コンポーネントの Jolokia モニタリングはデフォルトで無効になっています。

Jolokia は、次のようにして hosts.yml で有効にします。

all:
  vars:
    jolokia_enabled: true

Confluent Server または Kafka のデプロイ

Confluent Platform では Confluent Server がデフォルトでデプロイされます。代わりに Kafka をインストールするには、hosts.yml ファイルに次のプロパティを設定します。

all:
  vars:
    confluent_server_enabled: false

スキーマ検証の構成

Confluent Server を実行している場合には、Kafka ブローカーで Schema Validation を構成することができます。hosts.yml ファイルに以下のプロパティを設定します。

all:
  vars:
    confluent_server_enabled: true
    kafka_broker_schema_validation_enabled: true

ホストへのファイルのコピー

Ansible でファイルをホストにコピーするには、Ansible コントロールノードにファイルを配置し、以下の変数を設定します。

all:
  vars:
    zookeeper_copy_files:
      - source_path: /path/to/file.txt
        destination_path: /tmp/file.txt
    kafka_broker_copy_files:
      - source_path: /path/to/file.txt
        destination_path: /tmp/file.txt
    kafka_rest_copy_files:
      - source_path: /path/to/file.txt
        destination_path: /tmp/file.txt
    kafka_connect_copy_files:
      - source_path: /path/to/file.txt
        destination_path: /tmp/file.txt
    schema_registry_copy_files:
      - source_path: /path/to/file.txt
        destination_path: /tmp/file.txt
    ksql_copy_files:
      - source_path: /path/to/file.txt
        destination_path: /tmp/file.txt
    control_center_copy_files:
      - source_path: /path/to/file.txt
        destination_path: /tmp/file.txt

各リスト内のファイルが、各グループのすべてのホストにコピーされます。つまり、各ファイルはすべての Kafka ホストに配信されます。

カスタム Java 引数の追加

Ansible で各コンポーネントの Java プロセスにカスタムの Java 引数を追加するには、インベントリファイルで以下の変数を使用します。

all:
  vars:
    zookeeper_custom_java_args:
    kafka_broker_custom_java_args:
    kafka_rest_custom_java_args:
    kafka_connect_custom_java_args:
    schema_registry_custom_java_args:
    ksql_custom_java_args:
    control_center_custom_java_args:

次の例では、引数 -javaagent を ZooKeeper の Java プロセスに追加します。

all:
  vars:
    zookeeper_custom_java_args: "-javaagent:/path/to/javaagent.jar"

環境変数の設定

Ansible で Confluent Platform コンポーネントのプロセスに環境変数を設定するには、インベントリファイルで以下の辞書型変数を使用します。

all:
  vars:
    zookeeper_service_environment_overrides:
    kafka_broker_service_environment_overrides:
    kafka_rest_service_environment_overrides:
    kafka_connect_service_environment_overrides:
    schema_registry_service_environment_overrides:
    ksql_service_environment_overrides:
    control_center_service_environment_overrides:

たとえば、以下のスニペットは、KAFKA_JMX_OPTS 環境変数を Kafka ブローカーサービスに設定します。

all:
  vars:
    kafka_broker_service_environment_overrides:
      KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false"

リスナーの構成

Ansible Playbooks for Confluent Platform では、ブローカー上に 2 つのリスナーが構成されます。

  • ブローカー間リスナー(ポート 9091)
  • Confluent Platform の他のコンポーネントと外部クライアントのリスナー(ポート 9092)

これら 2 つのリスナーにはデフォルトで、ssl_enabled暗号化)および sasl_protocol認証)で構成したセキュリティ設定が継承されます。

リスナーが 1 つしか必要ない場合は、hosts.yml ファイルに次の変数を追加します。

all:
  vars:
    kafka_broker_configure_multiple_listeners: false

hosts.yml ファイルに変数 kafka_broker_custom_listeners を追加すれば、最初から用意されているリスナーをカスタマイズできます。

次の例では、ブローカーリスナー、内部リスナー、およびクライアントリスナーすべてに個別のセキュリティ設定があります。複数のクライアントリスナーを追加で構成できますが、ブローカーリスナーと内部リスナーの辞書キーである brokerinternal は変更しないでください。

all:
  vars:
    kafka_broker_custom_listeners:
      broker:
        name: BROKER
        port: 9091
        ssl_enabled: false
        ssl_mutual_auth_enabled: false
        sasl_protocol: none
      internal:
        name: INTERNAL
        port: 9092
        ssl_enabled: true
        ssl_mutual_auth_enabled: false
        sasl_protocol: scram
      client_listener:
        name: CLIENT
        port: 9093
        ssl_enabled: true
        ssl_mutual_auth_enabled: false
        sasl_protocol: plain

アドバタイズリスナーホスト名の追加

複数のネットワークインターフェイスを使用する複雑なネットワーク構成を使用している場合は、クライアントが正常に接続できるように、アドバタイズリスナーを外部アドレス(ホストまたは IP)にセットアップする必要があります。

特定のリスナーにアドバタイズリスナーホスト名を構成するには、以下のようにして、アドバタイズリスナーを作成し([1])、各ホストに変数を設定します([2] と [3])。

all:
  vars:
    kafka_broker_custom_listeners:
      client_listener:                        -------------------------- [1]
        name: CLIENT
        port: 9093
kafka_broker:
  hosts:
    ip-172-31-43-14.us-west-2.compute.internal:
      kafka_broker_custom_listeners:
        client_listener:                      -------------------------- [1]
          hostname: ec2-34-209-19-18.us-west-2.compute.amazonaws.com --- [2]
    ip-172-31-43-15.us-west-2.compute.internal:
      kafka_broker_custom_listeners:          -------------------------- [1]
        client_listener:
          hostname: ec2-34-209-19-19.us-west-2.compute.amazonaws.com --- [3]

上記の例では、インターフェイス経由で接続するクライアントのアドバタイズリスナー([1])に AWS の外部 DNS ホスト名([2] と [3])を設定しています。

機密性の保持の構成

Confluent Platform の シークレット 機能を使用すれば、機密情報を安全に保存し管理できます。

機密性の保持は、Confluent Platform のコンポーネント(Confluent Server、Schema Registry、Connect、ksqlDB、REST Proxy、Confluent Control Center)で動作します。

機密性の保持は ZooKeeper やコミュニティバージョンの Kafka ではサポートされません。

Ansible Playbooks for Confluent Platform でコンポーネントプロパティファイルに対して機密性の保持を使用するには、インベントリファイルに次の変数を設定します。

all:
  vars:
    secrets_protection_enabled: true

secrets_protection_enabledtrue に設定すると、マスターキーが Ansible で生成され、すべての Confluent Platform コンポーネントで password などのすべてのプロパティが暗号化されます。

  • 生成済みの独自のマスターキーとベースシークレットを Ansible で使用するには、以下を追加します。

    all:
      vars:
        secrets_protection_enabled: true
        secrets_protection_masterkey: <masterkey>
        secrets_protection_security_file: <base secret file path>
    

    以下に例を示します。

    all:
       vars:
         secrets_protection_enabled: true
         secrets_protection_masterkey: "UWQYODNQVqwbQeFgytYYoMr+FjK9Q6I0F6r16u6Y0EI="
         secrets_protection_security_file: "/tmp/security.properties"
    
  • マスク対象のプロパティをより細かく制御するには、<component>_secrets_protection_encrypt_passwords 変数と <component>_secrets_protection_encrypt_properties 変数を使用します。

    <component>_secrets_protection_encrypt_passwordsfalse に設定されると password などのプロパティがマスクされなくなります。

    暗号化する変数のリストを <component>_secrets_protection_encrypt_properties に設定します。

    たとえば、Kafka のプロパティである advertised.listenersbroker.id のみをマスクするには、以下を設定します。

    all:
      vars:
        secrets_protection_enabled: true
        kafka_broker_secrets_protection_encrypt_passwords: false
        kafka_broker_secrets_protection_encrypt_properties: [advertised.listeners, broker.id]