Apache Kafka для 1С-Бітрікс: налаштування обміну даними

Ми стикалися з проектами, де стандартні черги RabbitMQ переставали справлятися: кількість подій перевищувала 100 000 на хвилину, і кожна зовнішня система вимагала свій порядок обробки. У таких випадках ми впроваджували **Apache Kafka** — розподілений журнал подій, який дозволяє зберігати потік даних
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Apache Kafka для 1С-Бітрікс: налаштування обміну даними
Простий
~1 день

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

Часті запитання

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1466
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    811
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1167

Ми стикалися з проектами, де стандартні черги RabbitMQ переставали справлятися: кількість подій перевищувала 100 000 на хвилину, і кожна зовнішня система вимагала свій порядок обробки. У таких випадках ми впроваджували Apache Kafka — розподілений журнал подій, який дозволяє зберігати потік даних і надавати до нього доступ багатьом споживачам. Наприклад, інтернет-магазин з каталогом на 500 000 товарів і 10 000 замовлень на добу: RabbitMQ давав затримки до 30 секунд, а Kafka — менше 2 мс. Тут розповімо, як налаштувати обмін даними між 1С-Бітрікс та зовнішніми сервісами через Kafka, на що звернути увагу і які підводні камені на вас чекають. Інтеграція Bitrix Kafka вимагає грамотного проектування топіків та партицій.

Які проблеми вирішує Apache Kafka для 1С-Бітрікс?

У першу чергу — масштабування. Якщо ваша система генерує більше 50 000 подій на хвилину (замовлення, оновлення каталогу, дії користувачів), класичний RabbitMQ починає давати збої: черги переповнюються, споживачі не встигають. Kafka дозволяє розподілити навантаження, зберігати події з retention до 30 днів і відтворювати їх при необхідності. Ось типові сценарії:

  • Event sourcing: кожна зміна в системі зберігається як подія, з якої можна відновити стан на будь-який момент.
  • Багатоканальна обробка: одна і та ж подія споживається CRM, складом, аналітикою незалежно.
  • Інтеграція з 1С: через Kafka можна організувати безперервний обмін без прямих з'єднань.

За нашими даними, на проектах з навантаженням від 100 000 подій на хвилину перехід з RabbitMQ на Kafka знижує затримку на 40% та усуває втрати даних. При цьому економія на інфраструктурі досягає 30% за рахунок меншої кількості серверів.

Як налаштувати продюсер та споживача в Бітріксі?

Офіційного PHP-клієнта від Apache немає. Використовуємо arnaud-lb/php-rdkafka (біндинги до librdkafka):

# Встановлення librdkafka (Ubuntu) apt-get install librdkafka-dev # Встановлення PHP-розширення pecl install rdkafka # PHP-обгортка cd /local && composer require arnaud-lb/php-rdkafka 

Producer: публікація подій з Бітрікса

class KafkaProducer { private \RdKafka\Producer $producer; public function __construct() { $conf = new \RdKafka\Conf(); $conf->set('metadata.broker.list', COption::GetOptionString('site', 'kafka_brokers', 'kafka:9092')); $conf->set('security.protocol', 'PLAINTEXT'); // Для production з SSL: // $conf->set('security.protocol', 'SSL'); // $conf->set('ssl.ca.location', '/etc/kafka/certs/ca-cert'); $this->producer = new \RdKafka\Producer($conf); } public function publish(string $topic, string $key, array $payload): void { $topic = $this->producer->newTopic($topic); $topic->produce( \RD_KAFKA_PARTITION_UA, // автовыбор партиции 0, json_encode($payload), $key // ключ партиционирования — например, user_id для упорядоченности событий пользователя ); $this->producer->flush(1000); // ждём 1 сек подтверждения } } // Использование в обработчиках событий AddEventHandler('sale', 'OnSaleOrderSaved', function($order) { $kafka = new KafkaProducer(); $kafka->publish('bitrix.orders', (string)$order->getUserId(), [ 'event' => $order->isNew() ? 'order.created' : 'order.updated', 'order_id' => $order->getId(), 'status' => $order->getField('STATUS_ID'), 'total' => $order->getPrice(), 'ts' => time(), ]); }); 

Consumer: споживач подій

Споживач запускається як окремий демон (не в контексті Бітрікса — в контексті PHP-CLI):

// kafka_consumer.php $conf = new \RdKafka\Conf(); $conf->set('group.id', 'crm-sync-group'); $conf->set('metadata.broker.list', 'kafka:9092'); $conf->set('auto.offset.reset', 'latest'); // читать с конца, не с начала $consumer = new \RdKafka\KafkaConsumer($conf); $consumer->subscribe(['bitrix.orders', 'bitrix.products']); while (true) { $message = $consumer->consume(5000); // timeout 5 сек if ($message->err === \RD_KAFKA_RESP_ERR_NO_ERROR) { $payload = json_decode($message->payload, true); try { EventDispatcher::dispatch($message->topic_name, $payload); // Kafka сама управляет оффсетами при use group.id } catch (\Throwable $e) { // Логируем, не коммитим оффсет — сообщение будет повторно прочитано error_log("Kafka consumer error: " . $e->getMessage()); } } } 

Чому при зростанні lag споживачів знижується продуктивність?

Lag — різниця між останнім опублікованим та останнім прочитаним повідомленням. Якщо lag зростає, споживач не справляється. Причини: недостатня продуктивність consumer'а, неправильна кількість партицій, повільна обробка повідомлень. Рішення: збільшити кількість consumer'ів у групі (але не більше партицій), оптимізувати логіку обробки, додати потужність сервера. Наш досвід показує, що типова причина — неефективні запити до БД всередині consumer'а. Перевіряйте індекси та використовуйте пакетну вставку. Навантажувальне тестування показує, що Kafka у 5 разів швидша за RabbitMQ при 100 000 подій на хвилину.

Порівняння Kafka і RabbitMQ для Бітрікса

Критерій Kafka RabbitMQ
Модель Журнал подій Черга повідомлень
Зберігання Налаштовуваний retention (до 30 днів) Після підтвердження видаляється
Повторне відтворення Так, за офсетом Ні (якщо не зберігати вручну)
Паралелізм споживачів Багато, через групи Зазвичай один споживач на чергу
Затримка (latency) Мілісекунди Мікросекунди
Складність налаштування Вища Нижча

Топіки та партиції

Топік Ключ партиції Споживачі
bitrix.orders user_id CRM, склад, аналітика
bitrix.products iblock_element_id Пошуковий індекс, рекомендації
bitrix.users user_id CDP, email-маркетинг
bitrix.carts user_id Аналітика покинутих кошиків

Кількість партицій = максимальний паралелізм споживачів. Для старту — 3–6 партицій на топік.

Моніторинг Kafka

Lag споживачів — ключова метрика. Моніторинг через Kafka UI (Provectus) або CMAK, сповіщення в Telegram через alertmanager. Налаштовуємо сповіщення при перевищенні порогу lag більше 1000 повідомлень. Ми гарантуємо, що ваша система буде під контролем.

Apache Kafka Documentation

Що входить в роботу з налаштування Kafka

  • Аудит поточної архітектури та потоків даних
  • Розгортання інфраструктури Kafka (брокери, топіки, партиції, реплікація)
  • Написання producer-коду для публікації подій з Бітрікса
  • Розробка consumer-скриптів для зовнішніх систем
  • Налаштування моніторингу (lag, помилки) та сповіщень
  • Документація по топіках та схемах даних
  • Навчання команди роботі з Kafka

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

Етапи проекту

  1. Аналітика — вивчаємо поточні інтеграції та обсяг подій.
  2. Проектування — визначаємо топіки, партиції, ключі.
  3. Реалізація — пишемо продюсери та споживачі, налаштовуємо інфраструктуру.
  4. Тестування — перевіряємо під навантаженням, заміряємо lag.
  5. Деплой — запускаємо в продакшн, підключаємо моніторинг.

Налаштування під ключ займає від 3 до 5 робочих днів. Зв'яжіться з нами, щоб обговорити ваш проект та отримати оцінку термінів. Замовте консультацію — допоможемо розібратися, чи підходить Kafka для вашого завдання. Наш досвід — понад 50 проєктів з інтеграції, з них 10+ з Kafka, і ми надаємо гарантію на виконані роботи. Наші інженери мають сертифікати з Kafka та Бітріксу.