sleighzy.kafka
Apache Kafka
Apache Kafka 3.5.1 をインストールして設定するための Ansible ロール
Apache Kafka は、発行-購読型のトピックを使用した分散イベントストリーミングプラットフォームです。アプリケーションやストリーミングコンポーネントは、これらのトピックにサブスクライブすることでメッセージを生成し、消費できます。Kafka は非常に高速で、数千のクライアントから毎秒メガバイトの読み書きを処理します。メッセージは永続化され、データ損失を防ぐために複製されます。データストリームはパーティション分けされ、ダウンタイムなしに弾力的にスケールできます。
警告
この Ansible ロールは、古いバージョンの Kafka からのアップグレードの移行プロセスには対応していません。ロールを実行する前に、アップグレードの文書を読み、該当する設定ファイルを更新してください。
https://kafka.apache.org/35/documentation.html#upgrade
例えば、アップグレード方法によっては、server.properties
ファイルに次のプロパティを追加する必要があります。
inter.broker.protocol.version
log.message.format.version
対応プラットフォーム
- RedHat 6
- RedHat 7
- RedHat 8
- Debian 10.x
- Ubuntu 18.04.x
- Ubuntu 20.04.x
要件
- Apache ZooKeeper
- Java 8 (推奨されない) / 11 / 17
必要に応じて、以下の Apache ZooKeeper ロールを Ansible Galaxy から使用できます。
ansible-galaxy install sleighzy.zookeeper
Ansible 2.9.16 または 2.10.4 は、特定のカーネルによる systemd
ステータスチェックの問題を回避するために必要です。Ansible ロールを介してサービスを起動しようとすると、エラーメッセージ "Service is in unknown state
" が表示され、タスクが失敗します。ただし、物理ホストで systemctl start
コマンドを実行すれば、サービスは通常通り起動します。詳細は https://github.com/ansible/ansible/issues/71528 を参照してください。
ロール変数
変数 | デフォルト | コメント |
---|---|---|
kafka_download_base_url | https://downloads.apache.org/kafka | |
kafka_download_validate_certs | yes | |
kafka_version | 3.5.1 | |
kafka_scala_version | 2.13 | |
kafka_create_user_group | true | |
kafka_user | kafka | |
kafka_group | kafka | |
kafka_root_dir | /opt | |
kafka_dir | {{ kafka_root_dir }}/kafka | |
kafka_start | yes | |
kafka_restart | yes | |
kafka_log_dir | /var/log/kafka | |
kafka_broker_id | 0 | |
kafka_java_heap | -Xms1G -Xmx1G | |
kafka_background_threads | 10 | |
kafka_listeners | PLAINTEXT://:9092 | |
kafka_num_network_threads | 3 | |
kafka_num_io_threads | 8 | |
kafka_num_replica_fetchers | 1 | |
kafka_socket_send_buffer_bytes | 102400 | |
kafka_socket_receive_buffer_bytes | 102400 | |
kafka_socket_request_max_bytes | 104857600 | |
kafka_replica_socket_receive_buffer_bytes | 65536 | |
kafka_data_log_dirs | /var/lib/kafka/logs | |
kafka_num_partitions | 1 | |
kafka_num_recovery_threads_per_data_dir | 1 | |
kafka_log_cleaner_threads | 1 | |
kafka_offsets_topic_replication_factor | 1 | |
kafka_transaction_state_log_replication_factor | 1 | |
kafka_transaction_state_log_min_isr | 1 | |
kafka_log_retention_hours | 168 | |
kafka_log_segment_bytes | 1073741824 | |
kafka_log_retention_check_interval_ms | 300000 | |
kafka_auto_create_topics_enable | false | |
kafka_delete_topic_enable | true | |
kafka_default_replication_factor | 1 | |
kafka_group_initial_rebalance_delay_ms | 0 | |
kafka_zookeeper_connect | localhost:2181 | |
kafka_zookeeper_connection_timeout | 6000 | |
kafka_bootstrap_servers | localhost:9092 | |
kafka_consumer_group_id | kafka-consumer-group | |
kafka_server_config_params | server.properties にテンプレート化される一般的なディクショナリ |
詳細な log4j 関連の変数は log4j.yml を参照してください。
systemd を使った Kafka サービスの起動と停止
- Kafka サービスの起動は次のコマンドで可能です:
systemctl start kafka
- Kafka サービスの停止は次のコマンドで可能です:
systemctl stop kafka
initd を使った Kafka サービスの起動と停止
- Kafka サービスの起動は次のコマンドで可能です:
service kafka start
- Kafka サービスの停止は次のコマンドで可能です:
service kafka stop
デフォルトのプロパティ
プロパティ | 値 |
---|---|
ZooKeeper 接続 | localhost:2181 |
Kafka ブートストラップサーバー | localhost:9092 |
Kafka コンシューマグループ ID | kafka-consumer-group |
Kafka ブローカー ID | 0 |
パーティション数 | 1 |
データログファイル保持期間 | 168 時間 |
自動トピック作成を有効にする | false |
トピック削除を有効にする | true |
ポート
ポート | 説明 |
---|---|
9092 | Kafka リスナーポート |
ディレクトリおよびファイル
ディレクトリ / ファイル | |
---|---|
Kafka インストールディレクトリ (インストール済みバージョンへのシンボリックリンク) | /opt/kafka |
Kafka 設定ディレクトリ ( /opt/kafka/config へのシンボリックリンク) | /etc/kafka |
データファイルを保存するディレクトリ | /var/lib/kafka/logs |
ログファイルを保存するディレクトリ | /var/log/kafka |
Kafka サービス | /usr/lib/systemd/system/kafka.service |
例のプレイブック
下記の内容をプレイブックに追加して、 kafka-nodes
グループに属するホストに対してこのロールを実行します。
- hosts: kafka-nodes
roles:
- sleighzy.kafka
リンティング
リンティングは ansible-lint を使って行うべきです。
pip3 install ansible-lint --user
ansible-lint -c ./.ansible-lint .
テスト
このモジュールは Ansible Molecule テストフレームワークを使用しています。このテストスイートは、Docker コンテナ内で動作する3ノードの Kafka と ZooKeeper クラスターを作成します。それぞれのコンテナは異なる OS を実行し、この Ansible ロールのサポートされるプラットフォームをテストします。
[Molecule インストールガイド] に従い、これを仮想環境を使って行うべきです。以下のコマンドは、Python 仮想環境を作成し、Molecule と Docker ドライバをインストールします。
$ python3 -m venv molecule-venv
$ source molecule-venv/bin/activate
(molecule-venv) $ pip3 install ansible docker "molecule-plugins[docker]"
プレイブックを実行し、テストを行います。Molecule がテストを実行する前に、リンティングエラーを修正する必要があります。これにより、すべてのテストが実行され、Docker コンテナが破棄されます。
molecule test
以下のコマンドは、テストなしでプレイブックを実行するために使用できます。このコマンドは、ロールを変更したときに何度でも実行でき、操作が冪等であることを確認します。
molecule converge
以下のコマンドは、すべてを破棄せずにテストを実行するために使用できます。コマンド molecule verify
は、各テスト実行で繰り返し実行できます。
molecule create
molecule converge
molecule verify
Molecule テストと Docker コンテナを破棄します。
molecule destroy
ライセンス
Apache Kafka installation for RHEL/CentOS and Debian/Ubuntu
ansible-galaxy install sleighzy.kafka