Налаштування кластера Apache Kafka для веб-додатку

Ваше веб-застосунок зростає, і синхронна обробка подій починає гальмувати бізнес: сервери перевантажені, дані під загрозою при збоях. Ми налаштовуємо кластер Apache Kafka під ключ — від вибору режиму до моніторингу, забезпечуючи надійну та масштабовану інфраструктуру. Наша команда бере на себе весь цикл робіт, щоб ви отримали стабільне рішення з подальшою підтримкою.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування кластера Apache Kafka для веб-додатку
Складний
~3-5 днів
Часті запитання

Налаштування кластера Apache Kafka для веб-додатку

Уявіть: ваш веб-додаток обробляє тисячі замовлень на хвилину. Кожна подія — надсилання email, оновлення пошукового індексу, синхронізація даних — виконується синхронно. Сервери задихаються, latency зростає, а при збої губляться дані. Apache Kafka вирішує ці проблеми, але неправильне налаштування кластера (наприклад, один брокер з реплікацією factor=1) призводить до катастрофи. Один із наших клієнтів — e-commerce платформа з 500 000 подій на секунду — перейшов на Kafka після того, як RabbitMQ перестав справлятися з піками.

Kafka — розподілений лог з гарантіями впорядкованості та реплікації. Він розв'язує сервіси, забезпечує аудит-лог та real-time аналітику. Продакшен-кластер вимагає ретельного налаштування: вибір режиму, конфігурація брокерів, безпека та моніторинг. Наша команда запустила понад 30 кластерів для highload проєктів — від фінтеху до e-commerce. Правильна конфігурація знижує витрати на інфраструктуру до 40% порівняно з альтернативами, а час окупності не перевищує півроку.

Як налаштувати кластер Apache Kafka: вибір режиму KRaft чи ZooKeeper?

Для нових проєктів використовуйте лише KRaft (без ZooKeeper). З версії, де KRaft production-ready, він спрощує архітектуру, зменшує кількість точок відмови та прискорює відновлення. ZooKeeper залишається для легасі, але ми не рекомендуємо починати з нього.

Параметр KRaft ZooKeeper
Компоненти Тільки Kafka Kafka + ZooKeeper (3-5 вузлів)
Простота Один бінарник, менше конфігів Два різні кластери, координація
Відновлення Швидше за рахунок внутрішнього кворуму Залежить від ZooKeeper
Масштабування Легше, немає зовнішньої залежності Складніше (ZooKeeper може стати вузьким місцем)
Production-ready Починаючи з версії 3.3 (рекомендуємо актуальну стабільну) Стабільний, але legacy

Джерело: офіційна документація Kafka

Встановлення та конфігурація на Ubuntu

Встановлюємо останню стабільну версію, налаштовуємо системний сервіс та ініціалізуємо сховище:

apt install -y openjdk-21-jdk-headless
KAFKA_VERSION=3.7.0
SCALA_VERSION=2.13
wget https://downloads.apache.org/kafka/${KAFKA_VERSION}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz
tar -xzf kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz -C /opt/
ln -s /opt/kafka_${SCALA_VERSION}-${KAFKA_VERSION} /opt/kafka
useradd -r -s /bin/false kafka
chown -R kafka:kafka /opt/kafka
mkdir -p /var/log/kafka /data/kafka
chown kafka:kafka /var/log/kafka /data/kafka
cat > /etc/systemd/system/kafka.service << 'EOF'
[Unit]
Description=Apache Kafka
After=network.target

[Service]
Type=simple
User=kafka
Environment="KAFKA_HEAP_OPTS=-Xmx4g -Xms4g"
Environment="KAFKA_JVM_PERFORMANCE_OPTS=-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true"
ExecStart=/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/kraft/server.properties
ExecStop=/opt/kafka/bin/kafka-server-stop.sh
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF
CLUSTER_UUID=$(kafka-storage.sh random-uuid)
kafka-storage.sh format -t $CLUSTER_UUID -c /opt/kafka/config/kraft/server.properties

Для підготовки конфігурації під ваш проєкт зв'яжіться з нами.

Конфігурація KRaft на кожному вузлі (приклад для вузла 1; для вузлів 2 та 3 змініть node.id та advertised.listeners):

node.id=1
process.roles=broker,controller
controller.quorum.voters=1@kafka-1:9093,2@kafka-2:9093,3@kafka-3:9093
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
advertised.listeners=PLAINTEXT://kafka-1.internal:9092
inter.broker.listener.name=PLAINTEXT
controller.listener.names=CONTROLLER
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
log.dirs=/data/kafka
num.recovery.threads.per.data.dir=4
num.io.threads=16
num.network.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
default.replication.factor=3
min.insync.replicas=2
num.partitions=6
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
compression.type=lz4

Налаштування TLS між брокерами

Без TLS трафік передається у відкритому вигляді. Для захисту використовуйте власний CA та сертифікати для кожного брокера. Детальні інструкції з генерації сертифікатів надамо в рамках проєкту.

Додайте в server.properties на кожному брокері:

listeners=PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9094,CONTROLLER://0.0.0.0:9093
ssl.keystore.location=/etc/kafka/ssl/kafka-1.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.truststore.location=/etc/kafka/ssl/kafka.truststore.jks
ssl.truststore.password=changeit
ssl.client.auth=required
ssl.enabled.protocols=TLSv1.3,TLSv1.2

Моніторинг: ключові метрики та алерти

Відстежуйте under-replicated partitions, активність контролера, p99 затримки продюсера/консьюмера, consumer lag. Для збору використовуйте JMX Exporter + Prometheus, для візуалізації — Grafana. Приклад конфігурації JMX Exporter:

---
startDelaySeconds: 0
hostPort: 127.0.0.1:9999
lowercaseOutputName: true
rules:
  - pattern: kafka.server<type=BrokerTopicMetrics, name=MessagesInPerSec><>OneMinuteRate
    name: kafka_server_broker_topic_messages_in_per_sec
  - pattern: kafka.server<type=ReplicaManager, name=UnderReplicatedPartitions><>Value
    name: kafka_server_under_replicated_partitions
  - pattern: kafka.controller<type=KafkaController, name=ActiveControllerCount><>Value
    name: kafka_controller_active_count
  - pattern: kafka.network<type=RequestMetrics, name=TotalTimeMs, request=Produce><>99thPercentile
    name: kafka_network_produce_total_time_ms_p99

Ключові алерти: kafka_server_under_replicated_partitions > 0, kafka_controller_active_count != 1, consumer lag вище порогу. Зв'яжіться з нами для впровадження моніторингу та отримання готових дашбордів під ваше навантаження.

Як забезпечити відмовостійкість?

  1. Створіть тестовий топік з реплікацією 3.
  2. Вимкніть один брокер і перевірте, що продюсери не втрачають дані (при acks=all та min.insync.replicas=2).
  3. Увімкніть брокер назад і переконайтеся, що репліки синхронізувалися.
  4. Перевірте consumer lag — він має повернутися до нуля.
  5. Повторіть з кожним брокером.
kafka-topics.sh --bootstrap-server kafka-1:9092 --create --topic test-topic --partitions 6 --replication-factor 3
kafka-producer-perf-test.sh --topic test-topic --num-records 1000000 --record-size 1024 --throughput -1 --producer-props bootstrap.servers=kafka-1:9092,kafka-2:9092,kafka-3:9092 acks=all compression.type=lz4
kafka-consumer-perf-test.sh --bootstrap-server kafka-1:9092 --topic test-topic --messages 1000000 --group perf-test-group

Гарантуємо SLA 99.99% для вашого кластера. Замовте розгортання — зв'яжіться з нами для консультації. Отримайте попередню оцінку вартості та термінів.

Процес роботи та терміни

Етап Тривалість
Аналіз вимог та проєктування архітектури 1-2 дні
Встановлення та налаштування кластера (3 вузли) 2-3 дні
Налаштування TLS та безпеки 1 день
Інтеграція моніторингу (Prometheus + Grafana) 1 день
Тестування відмовостійкості та навантаження 1-2 дні
Документація та навчання команди 1 день

Разом: 5-7 робочих днів для базового кластера. Вартість розраховується індивідуально.

Що входить в роботу

  • Проєктування архітектури кластера (ролі, партиції, реплікація)
  • Встановлення та налаштування Kafka в режимі KRaft
  • Налаштування TLS між брокерами та клієнтами
  • Впровадження моніторингу (JMX Exporter + Prometheus + Grafana)
  • Створення продуктивних топіків з оптимальними параметрами
  • Навантажувальне тестування та перевірка відмовостійкості
  • Документація (схема кластера, інструкції, runbook)
  • Навчання вашої команди (основи адміністрування, робота з CLI)
  • Технічна підтримка 2 тижні після запуску

Результати та гарантії

Понад 30 впроваджених кластерів з навантаженням до 1 млн повідомлень на секунду. Середнє зниження витрат на інфраструктуру — 35%. Час окупності — до 6 місяців. Зверніться до наших інженерів — ми допоможемо налаштувати кластер під ваше навантаження.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1369
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060