Linux 9 自动化部署 Kafka 集群( 四 )


在 tasks/main.yml 文件中新增任务,将 server.properties.j2 模板文件拷贝到托管节点:
- name: generate configuration files task ansible.builtin.template: src: server.properties.j2 dest: "{{ user_dir.0 }}/kafka/config/server.properties" owner: "{{ user_name.0 }}" group: "{{ user_name.0 }}" mode: 0644 notify: Restart kafka service handler
ansible.builtin.template任务用于生成 Kafka 配置文件,当文件有变化时,通过notify触发 Handlers 。
36.3.3.4 单元文件模板
在 templates/ 目录下创建systemd单元模板文件 kafka.service.j2,内容如下:
[Unit] Description=Kafka Wants.NETwork.target After=network.target [Service] Type=simple User={{ user_name.0 }} Group= {{ user_name.0 }} ExecStart=/bin/sh -c '{{ user_dir.0 }}/kafka/bin/kafka-server-start.sh {{ user_dir.0 }}/kafka/config/server.properties > {{ logs_dir }}/start-kafka.log 2>&1' ExecStop={{ user_dir.0 }}/kafka/bin/kafka-server-stop.sh Restart=on-abnormal [Install] WantedBy=multi-user.target
在 tasks/main.yml 文件中新增任务,将 kafka.service.j2 模板文件拷贝到托管节点:
- name: generate systemd unit files task ansible.builtin.template: src: kafka.service.j2 dest: /usr/lib/systemd/system/kafka.service mode: 064436.3.3.5 开启防火墙
Kafka 启动后会监听 TCP 9092 端口 。在 tasks/main.yml 文件中新增任务,为该端口开启防火墙:
- name: turn on kafka ports in the firewalld task ansible.builtin.firewalld: port: "{{ kafka_port }}/tcp" permanent: true immediate: true state: enabled36.3.3.6 设置 JAVA_HOME
在 Kafka 的 kafka-run-class.sh 文件中添加 JAVA_HOME 变量 。编辑 tasks/main.yml 文件中新增lineinfile任务:
- name: set JAVA_HOME in kafka-run-class.sh file task ansible.builtin.lineinfile: path: "{{ user_dir }}/kafka/bin/kafka-run-class.sh" line: "export JAVA_HOME=/opt/jdk19" insertafter: "/bin/bash"36.3.3.7 启动 Kafka 服务
在 tasks/main.yml 文件中新增任务,启动 Kafka 服务,并将其设置为开机启动:
- name: started kafka service task ansible.builtin.systemd: name: kafka.service state: started enabled: true daemon_reload: true36.3.3.8 部署 Kafka 集群
在 ~/playbooks/deploy_kafka/ 目录中创建 deploy_kafka.yaml Playbook 文件,内容如下:
--- - name: deploy kafka cluster play hosts: kafka become: true gather_facts: true vars_files: - vars.yaml roles: - role: deploy_kafka tags: deploy_kafka ...
在 vars/vars.yaml 文件中添加所需变量,最终的文件内容如下:
package_url: - https://downloads.apache.org/kafka/3.3.1/kafka_2.13-3.3.1.tgz unarchive_path: - ~/software/kafka_tools/kafka user_name: - sretech user_dir: - /opt/sretech user_shell: - /sbin/nologin logs_dir: /var/log/kafka kafka_port: 9092 zookeeper_port: 2181
执行 deploy_kafka.yaml Playbook 文件,自动化完成 Kafka 集群的部署:
ansible-playbook deploy_kafka.yaml

Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.10 自动化部署 Kafka 集群
36.4 验证
本小节对 Kafka 服务进行一些操作,以验证集群是否可用 。
36.4.1 创建 Topic
在 kafka1.server.aiops.red 上创建副本为 3,分区为 1,名称为 aiops 的 topic:
~/software/kafka_tools/kafka/bin/kafka-topics.sh --create --bootstrap-server kafka1.server.aiops.red:9092 --replication-factor 3 --partitions 1 --topic aiops
图 36.11 在 kafka1.server.aiops.red 上创建名为 aiops 的 Topic
创建完成后,Topic 会同步到集群的另外两个 broker kafka2.server.aiops.red 和 kafka3.server.aiops.red 上 。
36.4.2 查询 Topic
通过--list命令查看 Broker 上的可用 Topic 。查询 kafka1|2|3.server.aiops.red 上的可用 Topic:
~/software/kafka_tools/kafka/bin/kafka-topics.sh --bootstrap-server kafka2.server.aiops.red:9092 --list ~/software/kafka_tools/kafka/bin/kafka-topics.sh --bootstrap-server kafka3.server.aiops.red:9092 --list
Linux 9 自动化部署 Kafka 集群

文章插图
 
图 36.12 查询 Broker 上的可用 Topic
从输出看出,集群中的三个 Broker 都包含名为 aiops 的 Topic 。
36.4.3 生产消息
向 kafka1.server.aiops.red 的 aiops Topic 写入消息:
~/software/kafka_tools/kafka/bin/kafka-console-producer.sh --broker-list kafka1.server.aiops.red:9092 --topic aiops
图 36.13 向 Topic 写入数据
36.4.4 消费消息
从 kafka2.server.aiops.red 的 aiops Topic 读取消息:
~/software/kafka_tools/kafka/bin/kafka-console-consumer.sh --bootstrap-server kafka2.server.aiops.red:9092 --topic aiops --from-beginning


推荐阅读