2015-06-22 53 views
1

我正在尝试为使用卡夫卡的部分项目设置一些集成测试。我已选择使用包含kafka和Zookeeper的码头图像spotify/kafka。 如果我按照该项目站点所述运行kafka容器,我可以在本地机器上运行我的测试(并且它们通过!)。当我尝试在我的ec2构建服务器上运行它时,容器就会死亡。最后的致命错误是“INFO放弃:卡夫卡进入致命状态,太多开始重试太快”。在EC2实例上进行集成测试的卡夫卡

我怀疑它不喜欢传入的地址。我尝试过使用ec2提供的公有和私有ip地址,但结果与本地主机一样。

任何帮助,将不胜感激。谢谢!

+4

如果它帮助其他人,我只是有这个问题,这是因为我的t1.micro没有足够的内存运行kafka。您可以通过将'--env KAFKA_HEAP_OPTS =“ - Xmx256M -Xms128M”''传递给docker run命令来解决此问题。 –

+0

@RossDeane你的解决方案也适用于我。 –

回答

2

即使我仍然在做我之前做的事情,它现在可以神奇地工作了。但是,为了帮助其他可能会出现的人,我会发布我所做的工作。

我创建了以下批处理文件,让jenkins将其作为构建步骤运行。

#!/bin/bash 
if ! docker inspect -f 1 test_kafka &>/dev/null 
then docker run -d --name test_kafka -p 2181:2181 -p 9092:9092 --env ADVERTISED_HOST=localhost --env ADVERTISED_PORT=9092 spotify/kafka 
fi 

即使本地主机解析为私有IP地址,它似乎现在需要它。 if块只是为了测试容器是否已经存在,否则就重用它。