Kafka2Rest ========== Проксирующий сервис между Apache Kafka, позволяющий выполнять REST-запросы для получения/выгрузки информации из Кафки. ----------- Оглавление ----------- * Installation_ * Launch_ * Configuration_ * Logging_ * Authorization_ * Requests_ * Notes_ Установка --------- .. _Installation: Для использования сервиса на линуксовой машине, необходимо установить следующие зависимости: .. code-block:: bash sudo apt install librdkafka-dev На линуксовой машине выполняем следующую команду. .. code-block:: bash pip install aiohttp pyyaml confluent-kafka Для Windows придётся собрать и подгрузить ``librdkafka``. После подготовки всех зависимостей и библиотек, клонируем репозиторий .. code-block:: bash git clone https://git-server/research/kafka-2-rest.git -b confluent И перемещаемся в каталог с репозиторием .. code-block:: bash cd kafka-2-rest Запуск ------ .. _Launch: Сервис можно запустить как просто .. code-block:: bash sudo python3 server.py Так и в фоновом режиме .. code-block:: bash sudo python3 server.py & Конфигурация ------------ .. _Configuration: В каталоге с сервером находится файл ``config.yml`` cо следующим содержимым: .. code-block:: yaml server: host: 0.0.0.0 # Адрес, на котором будет запущен сервис port: 5443 # Порт, на котором будет запущен сервис kafka: default_group_id: 12345 # Group Id, использующийся по умолчанию. Может быть любым, однако не рекомендуется использовать в его названии пробелы и спецсимволы. Системный параметр. bootstrap_servers: - localhost:9092 # Здесь может быть несколько ваших серверов с уже запущенной кафкой - 172.28.1.119:9292 consumer_options: auto_offset_reset: earliest consumer_timeout_ms: 1000 max_poll_records: 1 # enable_auto_commit: true producer_options: retries: 5 Логгирование ------------ .. _Logging: В сервисе предусмотрено логгирование двух видов - в консоль и в файл с логами, который располагается в той же директории и называется ``kafka2rest.log`` Авторизация ----------- .. _Authorization: Для использования сервиса необходимо авторизоваться. В Postman во вкладке ``Authorization`` выбираем тип авторизации ``Basic Auth`` и прописываем ваш логин и пароль для доступа к сервису. Можно сгенерировать токен ``Basic Auth`` следующим образом: Пару ``mylogin:mypassword`` кодируем в base64 И при всех дальнейших запросах используем следующий заголовок ``Authorization: Basic закодированная_пара_в_base64`` Запросы ------- .. _Requests: В сервисе предусмотрены следующие запросы: * **GET** ``https://193.232.107.172/status/test_topic/`` Получает все непрочитанные сообщения из топика ``test_topic``. * **POST** ``https://193.232.107.172/execute/`` Body: .. code-block:: json { "topic": "test_topic", "data": { // Здесь могут быть любые json-объекты, которые вам нужно передать "hello": "world", "answer": 42, "my_awesome_list": [], "my_awesome_inner_object": {} } } Отправляет сообщение в топик ``test_topic``. Условия ------- .. _Notes: В POST-запросе тело сообщения **должно быть строго в формате JSON** и содержать в себе аттрибут "topic", с заданым топиком для отправки.