apache zookeeper kafka 路径
Posted
技术标签:
【中文标题】apache zookeeper kafka 路径【英文标题】:apache zookeeper kafka path 【发布时间】:2018-01-17 04:08:10 【问题描述】:我有一个应用程序可以设置与 kafka 主题的风暴连接。我从我们组织中另一个类似 repo 中模仿的设置具有如下属性:
zookeeper.connect=127.0.0.1:2181/kafka_0.9
我发现使用此设置,在我的本地开发环境中,我的应用在尝试创建 Storm Spout 时会引发错误。该错误可追溯到对getNumPartitions
的调用。详细的错误日志如下:
org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/Moment_2018_01_16_07_59_08/partitions
at org.apache.zookeeper.KeeperException.create(KeeperException.java:111) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
at org.apache.zookeeper.KeeperException.create(KeeperException.java:51) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1590) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
at org.apache.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:214) ~[curator-framework-2.5.0.jar:na]
at org.apache.curator.framework.imps.GetChildrenBuilderImpl$3.call(GetChildrenBuilderImpl.java:203) ~[curator-framework-2.5.0.jar:na]
at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:107) ~[curator-client-2.5.0.jar:na]
at org.apache.curator.framework.imps.GetChildrenBuilderImpl.pathInForeground(GetChildrenBuilderImpl.java:199) ~[curator-framework-2.5.0.jar:na]
at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:191) ~[curator-framework-2.5.0.jar:na]
at org.apache.curator.framework.imps.GetChildrenBuilderImpl.forPath(GetChildrenBuilderImpl.java:38) ~[curator-framework-2.5.0.jar:na]
at storm.kafka.DynamicBrokersReader.getNumPartitions(DynamicBrokersReader.java:91) ~[storm-kafka-0.9.6.jar:na]
当我像这样从属性中取出尾随 /kafka_0.9
时:
zookeeper.connect=127.0.0.1:2181
然后这个错误就消失了。我的猜测是,我们组织的代码在我们的暂存和生产环境中有一个特定的路径 /kafka_0.9
设置(可能使用 kafka 0.9 指定)。但我想知道如何在本地开发环境中创建这条路径,以便与我们的登台和生产环境保持一致?目前,我的docker-compose.yml
为 zookeeper 和 kafka 提供以下内容:
zookeeper:
image: myorg/zookeeper:3.4.8
ports:
- "2181:2181"
kafka:
image: myorg/kafka:kafka-0.10
hostname: myapp.docker
ports:
- "9092:9092"
environment:
EXPOSED_HOST: myapp.docker
KAFKA_PORT: 9092
KAFKA_ADVERTISED_PORT: 9092
ZOOKEEPER_PORT_2181_TCP_ADDR: zookeeper
ZOOKEEPER_PORT_2181_TCP_PORT: 2181
ZOOKEEPER_IP: zookeeper
links:
- zookeeper
extra_hosts:
- "localhost:0.0.0.0"
【问题讨论】:
【参考方案1】:尝试添加环境变量:CHROOT=/kafka_0.9
Zookeeper 还允许您添加一个“chroot”路径,这将使所有 该集群的 kafka 数据出现在特定路径下。这是一个 在同一台上设置多个 Kafka 集群或其他应用程序的方法 动物园管理员集群。为此,请以表格形式提供连接字符串 hostname1:port1,hostname2:port2,hostname3:port3/chroot/path 其中 会将所有这个集群的数据放在路径 /chroot/path 下。笔记 您必须在启动代理之前自己创建此路径 并且消费者必须使用相同的连接字符串。
【讨论】:
以上是关于apache zookeeper kafka 路径的主要内容,如果未能解决你的问题,请参考以下文章