我已经在docker的fig.yml文件中配置了zookeeper和kafka容器。两个容器都很好。但是在发送了大量消息之后,我的应用程序/zk客户端挂起。在检查zookeeper日志时,我看到错误: Error Path:/brokers Error:KeeperErrorCode = NoNode for /brokers
我的fig.yml如下:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
environment:
ZK_ADVERTISED_HOST_NAME: xx.xx.x.xxx
ZK_CONNECTION_TIMEOUT_MS: 6000
ZK_SYNC_TIME_MS: 2000
ZK_DATADIR: /path/to/data/zk/data/dir
kafka:
image: wurstmeister/kafka:0.8.2.0
ports:
- "xx.xx.x.xxx:9092:9092"
links:
- zookeeper:zk
environment:
KAFKA_ADVERTISED_HOST_NAME: xx.xx.x.xxx
KAFKA_LOG_DIRS: /home/svc_cis4/dl
volumes:
- /var/run/docker.sock:/var/run/docker.sock
我已经找了很长时间了,但还没有找到解决办法。我也尝试过使用zk\u datadir在fig.yml中设置数据目录:'/path/to/zk/data/dir',但似乎没有帮助。如有任何帮助,我们将不胜感激。
更新
的内容 /opt/kafka_2.10-0.8.2.0/config/server.properties
:
broker.id=0
port=9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
num.partitions=1
num.recovery.threads.per.data.dir=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
log.cleaner.enable=false
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
2条答案
按热度按时间o3imoua41#
在过去的两天里,我一直在使用的配置没有任何问题,包括为zookeeper和kafka指定主机地址。我的
fig.yml
内容是:以及随行人员
Dockerfile
内容:uemypmqf2#
您遇到的问题与zookeeper的数据目录无关。错误
Error Path:/brokers Error:KeeperErrorCode = NoNode for /brokers
是因为您的应用程序在zookeeper的数据中找不到任何代理znode。发生这种情况可能是因为kafka容器没有正确连接zookeeper,而查看wurstmeister的图片,我认为问题可能与变量有关KAFKA_ADVERTISED_HOST_NAME
可能是错的。我不知道是否有理由通过必须传递的env变量来分配该变量,但从我的观点来看,这不是一个好方法。有多种方法可以配置Kafka(实际上不需要设置advertised.host.name
您可以对其进行注解,kafka将采用默认主机名(可以使用docker设置),但使用此选项的快速解决方案是编辑start-kafka.sh
重建图像:如果这不能解决您的问题,您可以在容器内启动会话(即:
docker exec -it kafkadocker_kafka_1 /bin/bash
为了Kafka和docker exec -it kafkadocker_zookeeper_1 /bin/bash
对于zookeeper的),并检查Kafka日志,或zookeeper控制台(/opt/zookeeper-3.4.6/bin/zkCli.sh
)