创build主题,但在Kubernetes上使用Python获取Kafka FailedPayloadsError

我在Python kafka库中使用SimpleProducer。 这个脚本已经完美的工作,以前我尝试过的其他更硬configuration的卡夫卡设置。

kafka = KafkaClient(u'[masterNodeIp]:[servicePort]') producer = SimpleProducer(kafka) #make a simple message, while true run producer.send_messages(b'oneMoreTopic', sentence) 

在运行这个脚本之后,我在python控制台中得到了这个响应。

 kafka.common.LeaderNotAvailableError: TopicMetadata(topic='oneMoreTopic', error=5, partitions=[]) 

然后我可以在我的zookeeper.log中进入我的Node并查看:

 2015-09-14 12:16:32,276 - INFO [ProcessThread(sid:3 cport:-1)::PrepRequestProcessor@627] - Got user-level KeeperException when processing sessionid:0x34fcb982d030000 type:setData cxid:0x71 zxid:0x1000000d8 txntype:-1 reqpath:n/a Error Path:/config/topics/oneMoreTopic Error:KeeperErrorCode = NoNode for /config/topics/oneMoreTopic 2015-09-14 12:16:32,278 - INFO [ProcessThread(sid:3 cport:-1)::PrepRequestProcessor@627] - Got user-level KeeperException when processing sessionid:0x34fcb982d030000 type:create cxid:0x72 zxid:0x1000000d9 txntype:-1 reqpath:n/a Error Path:/config/topics Error:KeeperErrorCode = NodeExists for /config/topics 2015-09-14 12:16:32,302 - INFO [ProcessThread(sid:3 cport:-1)::PrepRequestProcessor@627] - Got user-level KeeperException when processing sessionid:0x34fcb982d030000 type:create cxid:0x7b zxid:0x1000000dc txntype:-1 reqpath:n/a Error Path:/brokers/topics/oneMoreTopic/partitions/0 Error:KeeperErrorCode = NoNode for /brokers/topics/oneMoreTopic/partitions/0 2015-09-14 12:16:32,304 - INFO [ProcessThread(sid:3 cport:-1)::PrepRequestProcessor@627] - Got user-level KeeperException when processing sessionid:0x34fcb982d030000 type:create cxid:0x7c zxid:0x1000000dd txntype:-1 reqpath:n/a Error Path:/brokers/topics/oneMoreTopic/partitions Error:KeeperErrorCode = NoNode for /brokers/topics/oneMoreTopic/partitions 

这似乎只是Zookeeper创build一个新的Znode的话题,因为它不是从前。 而卡夫卡server.log打印:

 [2015-09-14 12:16:32,282] INFO Topic creation {"version":1,"partitions":{"0":[10200119]}} (kafka.admin.AdminUtils$) [2015-09-14 12:16:32,287] INFO [KafkaApi-10200219] Auto creation of topic oneMoreTopic with 1 partitions and replication factor 1 is successful! (kafka.server.KafkaApis) [2015-09-14 12:16:51,579] INFO Closing socket connection to /10.240.1.94. (kafka.network.Processor) 

但是,我的消息从来没有发布到该主题,下次我运行我总是得到的python脚本:

 kafka.common.FailedPayloadsError 

在我使它工作的情况下,advertised.host.name始终是节点的外部IP,但我似乎无法通过Kubernetes得到这个工作。 是否有可能使外部IP可以从容器中调用?

对于所有经纪人,我的kafka / config / server.properties如下所示:

 broker.id=10200121 host.name=kafka-f8p06 advertised.host.name=kafka-f8p06 ++ 

 broker.id=10200121 host.name=kafka-f8p06 <----- use IP here advertised.host.name=kafka-f8p06 <---- use IP here 

我认为你应该有host.nameadvertised.host.name IP地址,因为K8不能通过主机名来parsingPod,而是通过IP来完成。

你的kafka节点可能不能以这种方式彼此交谈,找不到领导者。

我的问题的根本原因是通过确保我所有的节点都可以通过互联网连接到互联网

 sudo iptables -t nat -A POSTROUTING ! -d 10.0.0.0/8 -o ens4v1 -j MASQUERADE 

在此之后,我将advertised.host.name更改为外部IP地址,我尝试联系我的经纪人。 因此,如果我的GCE节点位于156.99.33.101上,为我的kafka服务在33777上打开nodePort,我会放:

 advertised.host.name=156.99.33.101 advertised.host.port=33777 

advertised.host.name是kafka在其中一个代理获取请求时用于连接回自己的,因此使用外部地址至less可以使其可访问。 虽然我不确定是否有任何后果将其引导到本地地址空间之外。

有关LeaderNotAvailableException远程主题