Featured image of post Установка кластера Apache Kafka через Ansible

Установка кластера Apache Kafka через Ansible

За 5 минут через Ansible роль на Ubuntu/CentOS

Что такое Kafka, для чего используется и логика работы подробно расписана в моём телеграм канале. Присоединяйся Telegram

Цель:

  • 3 Kafka-брокера (для отказоустойчивости)
  • 3 контроллера (KRaft controller nodes) будем совмещать с брокерами, но на проде лучше выделить

Требования

Для прода, для теста делить ресурсы на / 2:

  • CPU: 4
  • RAM: 16 GB
  • Disk: SSD. Минимум 500 ГБ на брокера
  • Сеть: 1 Gbps минимум
  • Система: Ubuntu или CentOS
  • Установленный anbible: 2.15 и выше

Создаём директорию:

1
mkdir -p roles/kafka

Клонируем репозиторий:

1
git clone https://github.com/dragomirr/ansible-role-kafka.git roles/kafka

Создаём директорию с инвентари:

1
2
mkdir -p /roles/kafka/inventory
nano roles/kafka/inventory/hosts.ini

Наполняем:

1
2
3
4
[kafka_cluster]
server-1 ansible_host=192.168.10.11 ansible_user=root kafka_node_id=1
server-2 ansible_host=192.168.10.12 ansible_user=root kafka_node_id=2
server-3 ansible_host=192.168.10.13 ansible_user=root kafka_node_id=3

Создаём playbook:

1
nano playbook.yaml

Наполняем:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
- name: Install Kafka
  hosts: kafka_cluster
  become: yes
  roles:
    - role: kafka
      kafka_heap_size: 2G
      kafka_install_dependencies: true
      kafka_topics:
        - name: MyFirstTopic
          replication_factor: 1
          partitions: 10
      kafka_additional_config:
        message.max.bytes: 1048576 # 1 MiB
      kafka_opts:
        - -XX:NewSize=256m

Структура каталогов:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
├── inventory
   └── hosts.ini
├── playbook.yaml
└── roles
    └── kafka
        ├── CHANGELOG.md
        ├── defaults
           └── main.yml
        ├── handlers
           └── main.yml
        ├── meta
           └── main.yml
        ├── molecule
           ├── cluster
              ├── converge.yml
              ├── INSTALL.rst
              ├── molecule.yml
              └── verify.yml
           ├── cluster_combined
              ├── converge.yml
              ├── INSTALL.rst
              ├── molecule.yml
              └── verify.yml
           └── default
               ├── converge.yml
               ├── INSTALL.rst
               ├── molecule.yml
               └── verify.yml
        ├── README.md
        ├── tasks
           └── main.yml
        ├── templates
           ├── kafka.service.j2
           └── server.properties.j2
        └── vars
            └── main.yml

Запускаем установку:

1
ansible-playbook -i inventory/hosts.ini playbook.yaml

Проверка установки

Заходим на одну из нод по ssh и выполняем команду:

1
/opt/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

Записываем сообщение в созданный топик (MyFirstTopic):

1
echo "Hello, World from Kafka" | /opt/kafka/bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic MyFirstTopic

Читаем записанное сообщение:

1
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic MyFirstTopic --from-beginning

Hello, World from Kafka

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Telegram GitHub YouTube