我目前在gitlab CI上设置Kafka服务以运行集成测试时遇到麻烦,我目前正在使用spotify / kafka docker映像。如果有人可以帮助我解决这个问题,我将不胜感激。
答案 0 :(得分:0)
我一生都在浪费时间,试图使它与Docker容器一起使用,包括提到的spotify/kafka
。
最初,我尝试将其用作服务。但是,无论我做什么,都行不通。实际上,我的测试可以正常连接到服务,并且服务确实已启动。但是,这似乎是zookeeper和kafka之间的一些奇怪的网络问题。我的猜测是,您需要将ADVERTISED_HOST设置为spotify__kafka
,以允许运行程序和服务之间建立连接。但是,这意味着Zookeeper认为kafka也是该主机名而不是localhost,并且由于服务无法与gitlab中的其他服务进行通信,因此您似乎无法解决网络问题。但这只是一个猜测,请随时
如果我错了,请纠正我。
接下来,我尝试在docker中使用docker,目的是从测试中启动kafka。一切都很好,容器开始了,但是我意识到我很快又回到了上面的问题,因为在gitlab中与dind通信时,本地主机不是本地主机,而是需要使用主机名{{1 }}。这再次意味着动物园管理员由于必须更改ADVERTISED_HOST而无法连接到kafka。
最后,我说要拧紧它,并在docker
脚本中手动安装kafka而不使用docker。脚本看起来像这样
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
上访问它。我知道这并不优雅,但可以完成工作
答案 1 :(得分:0)
它与托管Kafka和Zookeeper的容器一起很好地工作,并允许控制内部和外部“播发的侦听器”。外部应设置为容器的别名,内部应设置为localhost(即:容器的localhost)。
spotify / kafka-image仅允许您设置播发的主机,而不是完整播发的侦听器字符串。因为内部和外部必须不同,所以这行不通。
krisgeus / docker-kafka(https://github.com/krisgeus/docker-kafka)确实可以设置所需的一切。
下面的.gitlab-ci.yml允许我从ci-jobs连接到kafka:9092:
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