Apache Kafka — PHP часть 1
Apache Kafka — это распределенная система потоковой передачи данных с открытым исходным кодом, разработанная для работы с большим количеством данных в реальном времени.
Что это такое простыми словами, читайте тут
Kafka позволяет публиковать, хранить и обрабатывать потоки событий или сообщений в масштабируемом, надежном и быстром окружении. Широко используется для различных приложений, таких как аналитика в реальном времени, обработка потоковых данных, логирование и мониторинг.
Для работы с Kafka на PHP вы можете использовать библиотеку php-rdkafka. Вот как с ней работать:
Установите расширение rdkafka через pecl:
pecl install rdkafka
Включите расширение в вашем php.ini, добавив следующую строку:
extension=rdkafka.so
Установите библиотеку php-rdkafka с помощью Composer:
composer require arnaud-lb/php-rdkafka
Создайте Producer
Producer (производитель) — это приложение или часть приложения, которая отправляет сообщения (обычно называемые записями) в топики.
Топик — это именованная категория или канал, в котором хранятся и передаются сообщения. Производитель может отправлять сообщения с различной частотой и объемом данных. Сообщения могут представлять собой события, логи, метрики или любые другие данные, которые требуются для обработки или анализа.
Примеры использования Producer:
- Отправка событий пользовательской активности с веб-сайта или мобильного приложения.
- Отправка логов сервера или приложения для централизованного хранения и анализа.
- Отправка метрик системы или приложения для мониторинга и алертинга.
Создайте Producer, который отправляет сообщения в топик Kafka. Замените localhost:9092 на адрес вашего Kafka сервера и test на имя топика, в который вы хотите отправлять сообщения:
<?php
require 'vendor/autoload.php';
use RdKafka\Producer;
use RdKafka\Conf;
$conf = new Conf();
$producer = new Producer($conf);
$producer->addBrokers("localhost:9092");
$topic = $producer->newTopic("test");
$message = "Hello, Kafka from PHP!";
$topic->produce(RD_KAFKA_PARTITION_UA, 0, $message);
$producer->flush(10000);
Создайте Consumer
Consumer (потребитель) — это приложение или часть приложения, которая читает и обрабатывает сообщения из топиков Kafka. Потребители могут работать независимо или объединяться в группы для распределенной обработки сообщений.
Когда несколько потребителей объединяются в группу, Kafka автоматически балансирует нагрузку и распределяет обработку сообщений между членами группы.
Примеры использования Consumer:
- Обработка событий пользовательской активности для аналитики, рекомендаций или персонализации.
- Анализ и агрегация логов сервера или приложения для обнаружения ошибок, предупреждений или важных событий.
- Мониторинг метрик системы или приложения для определения проблем производительности или других аномалий.
Создайте Consumer, который читает сообщения из топика Kafka. Замените localhost:9092 на адрес вашего Kafka сервера и test на имя топика, из которого вы хотите читать сообщения:
<?php
require 'vendor/autoload.php';
use RdKafka\Conf;
use RdKafka\KafkaConsumer;
$conf = new Conf();
$conf->set('group.id', 'myGroup');
$conf->set('metadata.broker.list', 'localhost:9092');
$consumer = new KafkaConsumer($conf);
$consumer->subscribe(['test']);
while (true) {
$message = $consumer->consume(1000);
if ($message->err === RD_KAFKA_RESP_ERR_NO_ERROR) {
echo "Received message: " . $message->payload . "\n";
}
}
В целом, Producer и Consumer работают вместе в системе Kafka для передачи и обработки данных в реальном времени, обеспечивая высокую пропускную способность, низкую задержку и отказоустойчивость.
Теперь, когда у вас есть примеры кода для отправки и чтения сообщений с использованием PHP и Kafka, вы можете адаптировать их для своих нужд и интегрировать с вашими приложениями.