1

下面是我在本地的設置:三臺虛擬機(使用Virtualbox),kafka和zookeeper安裝在這三臺服務器上。他們都在互相交談。如何連接Virtualbox上的kafka羣集?

我想從本地使用kafka-console-producer,它需要代理列表。我提供我的虛擬機的IP,但它似乎並沒有工作。我也嘗試過虛擬機上的advertised.host屬性,但對我沒有任何影響。這裏是我的server.properties從三臺機器:

服務器1:

broker.id=4 
port=9092 
host.name=10.30.3.4 
advertised.host.name=10.30.3.4 
advertised.port=9092 
zookeeper.connect=10.30.3.4:2181 
zookeeper.connection.timeout.ms=6000 

服務器2:

broker.id=3 
port=9092 
host.name=10.30.3.3 
advertised.host.name=10.30.3.3 
advertised.port=9092 
zookeeper.connect=10.30.3.3:2181 
zookeeper.connection.timeout.ms=6000 

服務器3:

broker.id=2 
port=9092 
host.name=10.30.3.2 
advertised.host.name=10.30.3.2 
advertised.port=9092 
zookeeper.connect=10.30.3.2:2181 
zookeeper.connection.timeout.ms=6000 

我的VirtualBox也具有端口轉發設置: enter image description here 類似地,對於其他兩臺機器的端口也只是稍微調整了一下。

我能夠連接到飼養員就好了,所以:

bin/zkCli.sh -server 127.0.0.1:9999 

是能夠連接到ZooKeeper的虛擬機上。但如果我嘗試連接卡夫卡控制檯製片失敗當我嘗試發送郵件:

bin/kafka-console-producer.sh --broker-list 127.0.0.1:9502 --topic partition2replica2 --timeout 3000 

導致:

[2016-02-17 15:06:36,943] WARN Property topic is not valid (kafka.utils.VerifiableProperties) 
hi 
there 
[2016-02-17 15:07:23,699] WARN Failed to send producer request with correlation id 3 to broker 3 with data for partitions [partition2replica2,1] (kafka.producer.async.DefaultEventHandler) 
java.nio.channels.ClosedChannelException 
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100) 
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73) 
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply$mcV$sp(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer.send(SyncProducer.scala:101) 
    at kafka.producer.async.DefaultEventHandler.kafka$producer$async$DefaultEventHandler$$send(DefaultEventHandler.scala:255) 
    at kafka.producer.async.DefaultEventHandler$$anonfun$dispatchSerializedData$2.apply(DefaultEventHandler.scala:106) 
    at kafka.producer.async.DefaultEventHandler$$anonfun$dispatchSerializedData$2.apply(DefaultEventHandler.scala:100) 
    at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772) 
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98) 
    at scala.collection.mutable.HashMap$$anonfun$foreach$1.apply(HashMap.scala:98) 
    at scala.collection.mutable.HashTable$class.foreachEntry(HashTable.scala:226) 
    at scala.collection.mutable.HashMap.foreachEntry(HashMap.scala:39) 
    at scala.collection.mutable.HashMap.foreach(HashMap.scala:98) 
    at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771) 
    at kafka.producer.async.DefaultEventHandler.dispatchSerializedData(DefaultEventHandler.scala:100) 
    at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:72) 
    at kafka.producer.async.ProducerSendThread.tryToHandle(ProducerSendThread.scala:105) 
    at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:88) 
    at kafka.producer.async.ProducerSendThread$$anonfun$processEvents$3.apply(ProducerSendThread.scala:68) 
    at scala.collection.immutable.Stream.foreach(Stream.scala:547) 
    at kafka.producer.async.ProducerSendThread.processEvents(ProducerSendThread.scala:67) 
    at kafka.producer.async.ProducerSendThread.run(ProducerSendThread.scala:45) 
[2016-02-17 15:07:25,318] WARN Failed to send producer request with correlation id 7 to broker 3 with data for partitions [partition2replica2,1] (kafka.producer.async.DefaultEventHandler) 
java.nio.channels.ClosedChannelException 
    at kafka.network.BlockingChannel.send(BlockingChannel.scala:100) 
    at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:73) 
    at kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:72) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.producer.SyncProducer$$anonfun$send$1$$anonfun$apply$mcV$sp$1.apply(SyncProducer.scala:103) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply$mcV$sp(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.producer.SyncProducer$$anonfun$send$1.apply(SyncProducer.scala:102) 
    at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33) 
    at kafka.producer.SyncProducer.send(SyncProducer.scala:101) 
    at kafka.producer.async.DefaultEventHandler.kafka$producer$async 

不知道我在做什麼錯在這裏?有任何想法嗎? (如果有人願意,我可以提供ifconfig輸出)。任何幫助將不勝感激。

[編輯1]:添加動物園管理員法定人數的輸出:

That seems to be in quorum: 
echo stat| nc 10.30.3.2 2181 
Received: 81 
Sent: 80 
Connections: 1 
Outstanding: 0 
Mode: follower 
Node count: 149 

echo stat| nc 10.30.3.3 2181 
Received: 660 
Sent: 664 
Connections: 1 
Outstanding: 0 
Zxid: 0x600000109 
Mode: leader 
Node count: 149 

echo stat| nc 10.30.3.4 2181 
Received: 293 
Sent: 295 
Connections: 1 
Outstanding: 0 
Zxid: 0x600000109 
Mode: follower 
Node count: 149 

回答

0

至於我能理解你的設置中,每個節點上的飼養員也應該已經在仲裁相互支持3個卡夫卡服務器實例作爲一個集羣。你只提供了kafka配置,所以我不能確定它們是否以這種方式配置。

您可以通過使用4信命令各飼養員節點上像下面

echo stat | nc <zk ip> <zk port> 
echo mntr | nc <zk ip> <zk port> 

每個人都應該是一個「領頭羊」和另外兩個應該是「追隨者」檢查。

我不確定他們是否按預期工作,如果他們沒有配置爲法定人數。

+0

只是在主要問題中添加了這些命令的輸出。我認爲這個問題可能與kafka上的廣告端口有關,以及如何使用虛擬機訪問它。設置簡單的端口轉發後,我成功地從本地連接到VM上的zookeeper(正如我在原始文章中提到的)。 –

+0

明白了。我不確定問題是由於VirtualBox上的Kafka或端口轉發配置造成的;據我所知,客戶端將在advertised.host.name和advertised.port下面提供IP和端口,這實際上是10.30.3.X/9092。現在,當您嘗試從主機連接時,這些不同。可能需要對端口轉發規則進行一些更正,並在廣告*選項中進行適當的更改。你可以嘗試在廣告中使用HOSTIP/PORT嗎?主機和advertise.port和測試? – Mehul

+0

因此,我試着在轉發規則中添加10.30.3。*或10.0.2.15,並嘗試使用127.0.0.9502,它贏得了工作。對不起,經紀人列表中的127.0.0.1:5656,我創建了一個隧道,從這裏到當時我在端口轉發中使用的任何地方 - 這也不起作用:( –