我目前在gitlab ci上设置kafka服务以运行集成测试时遇到问题,我目前正在使用spotify/kafka docker映像。如果有人能帮我解决这个问题,我会非常感激的。
xcitsw881#
它可以很好地与托管kafka和zookeeper的容器配合使用,并允许控制内部和外部的“广告侦听器”。external应该设置为容器的别名,localhost的内部别名(即:容器的localhost)。spotify/kafka图像只允许设置播发主机,而不允许设置完整的播发侦听器字符串;因为内部和外部必须是不同的,这是行不通的。克丽斯格斯/ Docker Kafka(https://github.com/krisgeus/docker-kafka)允许设置所需的一切。下面的.gitlab-ci.yml允许我连接到kafka:9092 from ci作业:
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
i2loujxw2#
我浪费了好几天的时间,试图用docker容器来处理这个问题,包括上面提到的那个 spotify/kafka .起初我试着把它当作一种服务。但是不管我做了什么,它都不起作用。事实上,我的测试可以很好地连接到服务,服务确实启动了。不过,这看起来像是Zookeeper和Kafka之间的一些奇怪的网络问题。我猜您需要将主机设置为 spotify__kafka 它允许您的跑步者和服务之间的连接。然而,这意味着zookeeper认为kafka也是这个主机名而不是localhost,并且由于服务无法与gitlab中的其他服务进行通信,您会遇到一个似乎不可能解决的网络问题。不过,这只是一个猜测,所以请随时联系我们如果我错了,请纠正我。接下来,我尝试在docker中使用docker,目的是从我的测试中启动kafka。一切都很顺利,容器启动了,但是我意识到我很快就回到了我上面提到的问题,在gitlab中与dind通信时localhost不是localhost,而是需要使用主机名 docker . 这再次意味着zookeeper无法连接到Kafka,因为主机必须更改。最后,我说去死吧,手动安装Kafka,我的电脑里没有docker gitlab-ci.yml 脚本。剧本是这样的
spotify/kafka
spotify__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
可在上访问 localhost . 我知道这并不优雅,但它能完成任务
localhost
2条答案
按热度按时间xcitsw881#
它可以很好地与托管kafka和zookeeper的容器配合使用,并允许控制内部和外部的“广告侦听器”。external应该设置为容器的别名,localhost的内部别名(即:容器的localhost)。
spotify/kafka图像只允许设置播发主机,而不允许设置完整的播发侦听器字符串;因为内部和外部必须是不同的,这是行不通的。
克丽斯格斯/ Docker Kafka(https://github.com/krisgeus/docker-kafka)允许设置所需的一切。
下面的.gitlab-ci.yml允许我连接到kafka:9092 from ci作业:
i2loujxw2#
我浪费了好几天的时间,试图用docker容器来处理这个问题,包括上面提到的那个
spotify/kafka
.起初我试着把它当作一种服务。但是不管我做了什么,它都不起作用。事实上,我的测试可以很好地连接到服务,服务确实启动了。不过,这看起来像是Zookeeper和Kafka之间的一些奇怪的网络问题。我猜您需要将主机设置为
spotify__kafka
它允许您的跑步者和服务之间的连接。然而,这意味着zookeeper认为kafka也是这个主机名而不是localhost,并且由于服务无法与gitlab中的其他服务进行通信,您会遇到一个似乎不可能解决的网络问题。不过,这只是一个猜测,所以请随时联系我们如果我错了,请纠正我。
接下来,我尝试在docker中使用docker,目的是从我的测试中启动kafka。一切都很顺利,容器启动了,但是我意识到我很快就回到了我上面提到的问题,在gitlab中与dind通信时localhost不是localhost,而是需要使用主机名
docker
. 这再次意味着zookeeper无法连接到Kafka,因为主机必须更改。最后,我说去死吧,手动安装Kafka,我的电脑里没有docker
gitlab-ci.yml
脚本。剧本是这样的可在上访问
localhost
. 我知道这并不优雅,但它能完成任务