2014-02-27 149 views
0

目標:我想從java cleint發送消息給kafka。
它一直是一個痛苦..
讓我簡單介紹一下。無法連接到我的虛擬機從客戶端kafka

  1. 我在centos虛擬機上安裝了kafka。
  2. 我運行了它附帶的動物園管理員,服務器,生產者和客戶端的所有默認屬性文件。
    我已成功發送和接收消息。
  3. 我有一臺從我的電腦到zookeeper(2181)端口和虛擬機上的kafka服務器(9092)端口的telnet連接。

現在,我想編寫Java代碼發送消息到主題。 我用的是例如,從快速啓動在現場:

Properties props = new Properties(); 
props.put("zk.connect", "http://XX.XX.XX.XX:2181"); // where X is the ip 
props.put("serializer.class", "kafka.serializer.StringEncoder"); 
producer = new Producer<String, String>(new ProducerConfig(props)); 

,並與以下excetptions第四行失敗:

kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries 

rg.I0Itec.zkclient.exception.ZkTimeoutException: Unable to connect to zookeeper server within timeout: 400 

問題。

  1. 例外。
    不好的參數:
    在kafka快速啓動的例子中,我看到它只需要zk.connect, serializer.class.,當我運行它時,它需要在Producer的構造函數中聲明metadata.broker.list。
    是嗎?所以我感覺到kafka服務器的ip和端口。 ?
    和順便說一句 - 是zk.connect或動物園管理員連接ZkTimeoutException:無法連接到超時時間內服務器的ZooKeeper:400個

  2. 行家不好版本
    我去到現場,我看到最新的版本是kafka_2 .8.0-0.8.0。
    問題1 - 我使用intelij下載它(我認爲它是maven central) -
    我得到所有相關的jar文件 - 只有kafka jar文件是空的(僅包含manifest文件)。

    問題2 - 有更晚的版本,然後在網站上。他們是否正式。
    什麼辦法,我下載org.apache.kafka:kafka_2.10:0.8.0

  3. 使用Wireshark的我看到三個SYN ACK &(三重握手)比,然後FYN & ACK
    權之後。在動物園管理員的日誌中,我看到以下內容 [2014-02-27 01:43:42,127]警告EndOfStreamException:無法從客戶端會話ID 0x0讀取其他數據,可能客戶端已關閉套接字
    (org.apache.zookeeper。 server.NIOServerCnxn)
    這意味着我關閉了連接。爲什麼?

回答

2

卡夫卡0.8不需要zk.connect params。
您可能已經關注了0.7 quickstart dodumentation。檢查您正在使用的是哪個版本,即使您使用舊版本的分發版DONT需要「http」屬於您的zk.connect屬性。刪除作爲"xx.xxx.xx.xx:9092" ...
應該只是

props.put(「zk.connect」, 「127.0.0.1:2181」); 

0.8跟隨this鏈接,也有一些變化在這兩個不同版本的方式製作的作品。 如果您是Kafka的新手,那麼您應該使用最新版本,因爲在該版本中有很多修復程序

1

在我的情況下,我嘗試從一個代理連接到HDP 2.2 Sandbox VM和Azure CentOS 6.6雲服務中的虛擬機無法連接。

我在我的Mac上運行了一個簡單的Java示例(類似於問題中發佈的代碼片段)。

什麼終於爲我工作是以下參數添加到./kafka/config/server.properties:

advertised.host.name advertised.port

爲天青我必須指定雲服務的名稱,因此,例如:

advertised.host.name = my-cloud-service.cloudapp.net advertised.port = 6667

此外,對於天青我必須確保端口6667被打開爲和終點。

一旦我配置了這些,我就可以從我的工作站上運行我的Java代碼,並查看VM上運行的使用者進程的輸出。

什麼導致我這個結論是以下網址:

https://cwiki.apache.org/confluence/display/KAFKA/FAQ

看:爲什麼我的消費者/生產者連接到經紀商?

+0

我只是偶然發現了這個問題,經過數小時的挖掘,你的文章幫助了我。抱歉提出一箇舊帖子,但只想說謝謝! –