使用Docker启动kafka创建topic异常
我自己打了kafka的docker镜像,启动后日志正常且zk中有对应节点,使用命令创建topic提示成功,但对应log文件夹没有test3-0 这个文件夹生成,我使用相同的配置文件和命令在本机进行试验是可以正常创建的。
启动:
docker run -d -p 9093:9092 -v /root/docker/kafka/kafkalogs/:/opt/kafka-logs: --name kafka kafka:latest
创建:
docker exec kafka kafka-topics.sh --replication-factor 1 --partitions 1 --create --topic test3 --zookeeper 192.168.40.207:2181/kafkadocker
以及下图中的语句
ZK节点中存在topic:
Dockerfile,最后脚本只是前台启动kafka:
补充一下,我用的zookeeper不是docker的,是本机启动的zookeeper服务
1、尝试下发送消息,看看是否成功
2、对应的文件夹没有,容器里面有确认过吗?
消息发送失败,没有对应的topic,容器内也没有
我后来试了一下,把配置文件的端口,和映射的端口设置成一样的,就可以正常运行,当我配置文件内是9093,宿主机使用9094映射9093的话就不能使用了。
kafka客户端是主动发现其他的集群的,也就是说,它发现的实际上还是原来的,而不是转换后的端口。
1:也就是说我不管映射什么端口,实际上他发现的还是配置文件里配置的那个端口,那么我要在一台上起多个的话,就需要配置9092/3/4这样的吗?
2:还有一个问题宿主机启动一个kafka占用9092,再启动一个容器也是9092端口映射宿主机9093,这样容器里的kafka可以正常启动,但是却没办法创建topic和生产消费。
对于连接端口的事情我还是有些不太明白。
1、是的
2、简单点,你的docker的端口和宿主机的端口都保持一致,容器里是9093,那就都9093。
端口和ip都有这个问题,就是你配置的转发规则什么的,客户端是不认的,它自己主动发现集群的列表,而这个列表是你配置文件中的。
懂了,谢谢
你的答案