Как настроить службу Kafka на gitlab-ci.yml? - PullRequest
0 голосов
/ 05 июля 2018

В настоящее время у меня возникают проблемы при настройке службы Kafka в gitlab CI для запуска интеграционных тестов, в настоящее время я использую образ dotify spotify / kafka. Буду очень признателен, если кто-нибудь сможет мне помочь с этим.

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Он прекрасно работает с контейнером, в котором размещены Kafka и Zookeeper, и позволяет контролировать как внутренних, так и внешних «объявленных слушателей». Для внешнего должен быть задан псевдоним контейнера, для внутреннего - localhost (то есть локальный хост контейнера).

В spotify / kafka-image можно указать только объявленный хост, а не полную объявленную строку слушателя; поскольку внутреннее и внешнее должны быть разными, это не сработает.

Krisgeus / Docker-Kafka (https://github.com/krisgeus/docker-kafka) позволяет установить все необходимое.

.gitlab-ci.yml ниже позволяет мне подключиться к kafka: 9092 из ci-jobs:

variables:
  ADVERTISED_LISTENERS: 'PLAINTEXT://kafka:9092,INTERNAL://localhost:9093'
  LISTENERS: 'PLAINTEXT://0.0.0.0:9092,INTERNAL://0.0.0.0:9093'
  SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT'
  INTER_BROKER: 'INTERNAL'
  KAFKA_CREATE_TOPICS: 'cc-event:36:1'

services:
  - name: krisgeus/docker-kafka
    alias: kafka
0 голосов
/ 19 января 2019

Я потратил впустую дни, пытаясь заставить это работать с док-контейнерами, включая упомянутый spotify/kafka.

Первоначально я пытался использовать его в качестве службы. Однако, что бы я ни делал, это не сработает. Фактически мои тесты могли нормально подключиться к сервису, и сервис действительно запустился. Однако это выглядело как странная проблема с сетью между zookeeper и kafka. Я предполагаю, что вам нужно установить ADVERTISED_HOST на spotify__kafka, что позволяет соединение между вашим бегуном и службой. Однако это означает, что zookeeper считает, что kafka также находится на этом имени хоста, а не на localhost, и вы сталкиваетесь с, казалось бы, невозможным решением проблемы с сетью, поскольку службы не могут взаимодействовать с другими службами в gitlab. Однако это только предположение, поэтому, пожалуйста, не стесняйтесь
поправьте меня, если я ошибаюсь.

Затем я попытался использовать docker в docker с намерением запустить kafka из моих тестов. Все снова пошло хорошо, и контейнер запустился, однако я понял, что вскоре вернулся к той проблеме, которая у меня была выше, в том, что localhost не является localhost при общении с dind в gitlab, вместо этого вам нужно использовать имя хоста docker , Что снова означало, что zookeeper не может подключиться к kafka, потому что ADVERTISED_HOST должен был измениться.

В конце я сказал вкрутить его и вручную установил kafka без докера в моем скрипте gitlab-ci.yml. Сценарий выглядит так

stages:
  - build

build:
  stage: build
  image: ubuntu:latest
  variables:
    KAFKA_HOST: localhost:9092
  script:
    - apt-get update
    - apt-get install -y wget nodejs npm default-jre-headless
    - wget http://ftp.heanet.ie/mirrors/www.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
    - tar -xzf kafka_2.11-2.1.0.tgz
    - ls -ltra kafka_2.11-2.1.0/bin
    - nohup kafka_2.11-2.1.0/bin/zookeeper-server-start.sh kafka_2.11-2.1.0/config/zookeeper.properties > /dev/null 2>&1 &
    - sleep 2
    - nohup kafka_2.11-2.1.0/bin/kafka-server-start.sh kafka_2.11-2.1.0/config/server.properties > /dev/null 2>&1 &
    - sleep 2
    - npm install
    - npm test

Это доступно на localhost. Это не элегантно, я знаю, но это делает работу

...