#!/usr/bin/env ansible-playbook --- #==============================================================# # File : kafka-rm.yml # Desc : remove kafka cluster / instance from hosts # Ctime : 2024-01-01 # Mtime : 2026-08-06 # Path : kafka-rm.yml # Docs : https://pigsty.io/docs/kafka/playbook # License : Apache-2.0 @ https://pigsty.io/docs/about/license/ # Copyright : 2018-2026 Ruohang Feng / Vonng (rh@vonng.com) #==============================================================# - name: KAFKA REMOVE hosts: all become: true gather_facts: no ignore_errors: true ignore_unreachable: true # a dead member is retired via surviving members vars: #kafka_safeguard: false # set true to halt removal (safety switch) #kafka_rm_data: true # remove data dir & /etc/kafka recovery state? true by default kafka_rm_pkg: false # uninstall kafka packages? false by default, explicit override required pre_tasks: - name: require an explicit kafka remove limit connection: local run_once: true tags: always any_errors_fatal: true ignore_errors: false assert: that: - ansible_limit is defined - ansible_limit | trim | length > 0 fail_msg: kafka-rm.yml requires an explicit -l/--limit target - name: skip non-kafka hosts meta: end_host when: kafka_cluster is not defined tags: always roles: - { role: node_id ,when: kafka_cluster is defined } - { role: kafka_remove ,when: kafka_cluster is defined } #--------------------------------------------------------------# # Usage #--------------------------------------------------------------# # Remove kafka cluster `kf-main` (always with an exact full-cluster -l limit) # ./kafka-rm.yml -l kf-main # -e kafka_rm_data=true # remove data dir & /etc/kafka recovery state (default) # -e kafka_rm_data=false # keep data and recovery state; remove service integration only # -e kafka_rm_pkg=true # also uninstall the kafka-stack packages # -e kafka_safeguard=true # abort: refuse to remove anything # It will abort if `kafka_safeguard` is set to `true` explicitly. # # Retire a member (shrink, or clean up after a dead node): # ./kafka-rm.yml -l 10.10.10.13 # remove a single member from its cluster # Selecting a strict subset of a cluster also retires the leaving kraft voter # entry and broker registration through a surviving member, so this works # even when the node itself is unreachable. Keep an odd controller count, and # note that partition replicas still assigned to the retired broker stay # under-replicated until a replacement with the same kafka_seq rejoins via # ./kafka.yml (it re-inherits the assignment and resyncs automatically), or # until you reassign them explicitly. # #--------------------------------------------------------------# # Tasks #--------------------------------------------------------------# # kafka_safeguard : abort when kafka_safeguard=true # kafka_deregister : remove kafka / kafka_exporter victoria targets from infra # kafka : stop & disable kafka and kafka_exporter services # kafka_retire : retire voter entry & broker registration via a survivor # kafka_config : stop services; remove config, systemd units, and helper scripts # kafka_data : stop services; remove data and /etc/kafka state (disable with kafka_rm_data=false) # kafka_pkg : uninstall kafka-stack packages (enable with kafka_rm_pkg=true) #--------------------------------------------------------------# ...