Kafka2Rest

Проксирующий сервис между Apache Kafka, позволяющий выполнять REST-запросы для получения/выгрузки информации из Кафки.

Оглавление

Установка

Для использования сервиса на линуксовой машине, необходимо установить следующие зависимости:

sudo apt install librdkafka-dev

На линуксовой машине выполняем следующую команду.

pip install aiohttp pyyaml confluent-kafka

Для Windows придётся собрать и подгрузить librdkafka.

После подготовки всех зависимостей и библиотек, клонируем репозиторий

git clone https://git-server/research/kafka-2-rest.git -b confluent

И перемещаемся в каталог с репозиторием

cd kafka-2-rest

Запуск

Сервис можно запустить как просто

sudo python3 server.py

Так и в фоновом режиме

sudo python3 server.py &

Конфигурация

В каталоге с сервером находится файл config.yml cо следующим содержимым:

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

Логгирование

В сервисе предусмотрено логгирование двух видов - в консоль и в файл с логами, который располагается в той же директории и называется kafka2rest.log

Авторизация

Для использования сервиса необходимо авторизоваться.

В Postman во вкладке Authorization выбираем тип авторизации Basic Auth и прописываем ваш логин и пароль для доступа к сервису.

Можно сгенерировать токен Basic Auth следующим образом:

Пару mylogin:mypassword кодируем в base64

И при всех дальнейших запросах используем следующий заголовок

Authorization: Basic закодированная_пара_в_base64

Запросы

В сервисе предусмотрены следующие запросы:

  • GET https://193.232.107.172/status/test_topic/

    Получает все непрочитанные сообщения из топика test_topic.

  • POST https://193.232.107.172/execute/

    Body:

       {
           "topic": "test_topic",
           "data": {
               // Здесь могут быть любые json-объекты, которые вам нужно передать
               "hello": "world",
               "answer": 42,
               "my_awesome_list": [],
               "my_awesome_inner_object": {}
           }
       }
    
    Отправляет сообщение в топик ``test_topic``.
    

Условия

В POST-запросе тело сообщения должно быть строго в формате JSON и содержать в себе аттрибут «topic», с заданым топиком для отправки.