Есть ли библиотека на PHP для работы с Kafka?

Какой клиент Kafka можно использовать только для чтения данных из кафки, с минимальными требованиями к дополнительным библиотекам и зависимостям, и без необходимости использовать Laravel или Symfony?
  • 25 января 2024 г. 10:39
Ответы на вопрос 2
Да, существуют библиотеки для работы с Apache Kafka из PHP.

Одной из таких библиотек является "php-rdkafka", которая является оболочкой над librdkafka C библиотекой. Это достаточно низкоуровневый клиент, который предоставляет большой контроль над взаимодействием с Kafka и поддерживает различные функции, включая только чтение.

Вот как вы можете установить php-rdkafka используя Composer:

```bash
composer require edenhill/php-rdkafka
```

Прежде чем использовать его в PHP, вам нужно будет установить librdkafka. Инструкции по установке librdkafka могут отличаться в зависимости от вашей ОС, но для большинства Linux-систем это можно сделать с помощью менеджера пакетов, например:

```bash
# Для Debian/Ubuntu:
sudo apt-get install librdkafka-dev

# Для CentOS/RHEL:
sudo yum install librdkafka-devel
```

Также необходимо подготовить расширение PHP для работы с этой библиотекой, что обычно включает в себя компиляцию расширения из исходников или установку через pecl:

```bash
pecl install rdkafka
```

После установки вы активируете расширение, добавив следующую строку в ваш php.ini файл:

```ini
extension=rdkafka.so
```

Пример кода, который подписывается на топик и читает сообщения:

```php
<?php

$conf = new \RdKafka\Conf();
$conf->set('group.id', 'myConsumerGroup');
$conf->set('metadata.broker.list', 'broker1,broker2');

$consumer = new \RdKafka\KafkaConsumer($conf);

$consumer->subscribe(['myTopic']);

while (true) {
    $message = $consumer->consume(120*1000); // Timeout в миллисекундах
    switch ($message->err) {
        case RD_KAFKA_RESP_ERR_NO_ERROR:
            // Обработать сообщение
            echo $message->payload;
            break;
        case RD_KAFKA_RESP_ERR__PARTITION_EOF:
            // Достигнут конец партиции
            break;
        case RD_KAFKA_RESP_ERR__TIMED_OUT:
            // Вышел таймаут ожидания сообщений
            break;
        default:
            // Ошибка
            throw new \Exception($message->errstr(), $message->err);
            break;
    }
}
```

Обязательно проверьте документацию и согласуйте опции конфигурации с версией Kafka, которую вы используете.


Следует учитывать, что работа с Kafka может потребовать разрешения сетевого доступа и соответствующих прав на чтение из определенных топиков. Убедитесь, что ваша система и Kafka-кластер сконфигурированы соответствующим образом, чтобы обеспечить безопасность и соблюдение политик доступа.
https://github.com/arnaud-lb/php-rdkafka - на данный момент это пока самая рабочая либа. И без глубокого понимания как работает кафка тебе не удасться сделать клиент учитывая все абсолютно все настройки для кафки. 
Через композер тебе только пакет (kwn/php-rdkafka-stubs - "Rdkafka extension stubs for your IDE"). Остальное уже librdkafka (pecl) и на оф manual для запуска циклов опроса для чтения данных из кафки есть примеры и они хочешь не хочешь завязаны уже в pecl
https://arnaud.le-blanc.net/php-rdkafka-doc/phpdoc...

Если тебя волнует проблема безопасности этих либ и внутрянки с уязвимостями то просто сделай
composer audit
никаких проблем с бозопасностью
Похожие вопросы