2016-07-29 166 views
4

我有一個關於AWS上的Kafka代理集羣的問題。現在有一個AWS ELB坐在集羣前面,但是當我將生產者或消費者的「bootstrap.servers」屬性設置爲我的ELB的「A」記錄(和正確的端口號)時,生產者和消費者不能分別產生和使用消息。我已經關閉了我的經紀人的所有SSL,並通過PLAINTEXT 9092端口連接,我的ELB將端口1234轉發到9092.因此,在我的Producer Configs屬性中,例如,我將擁有...卡夫卡是否支持經紀集羣前的ELB?

bootstrap.servers =( 「A」 ELB的記錄):1234

更多信息:

  • 我ELB的協議是TCP/TCP
  • 我的經紀人 「advertised.listeners」 屬性是PLAINTEXT://(EC2 -private-ip):9092

有沒有人在ELB後面跑過卡夫卡?如果是這樣,請幫助我!

回答

5

您可以使用ELB作爲bootstrap.servers,但代理仍然需要客戶端直接訪問。 ELB將用於客戶端初始元數據請求,以確定哪些主題分區位於哪個代理上,但在此之後它將使用服務器的主機名(或者如果需要對其進行自定義,則使用advertised.listeners設置,例如EC2實例可能需要獲取服務器的公共IP)。

+0

我還是有點困惑。 ELB不通過專用IP與其實例通話,所以我不希望advertised.listeners成爲私有IP?我已經嘗試了ec2s的公共和私人IP地址,但它們都無法工作。順便說一句,我正在使用Java的kafka客戶端庫。 – Mattnv92

+0

運行Kafka的EC2實例可以在單個接口上偵聽,但能夠接受針對公共和私有IP的流量。我試圖得到的是,ELB僅*用於獲取關於集羣的元數據的初始請求。之後,客戶端需要能夠直接與每個主題分區的領導代理交談。如果您試圖使用ELB將卡夫卡羣集公開爲可用,您需要確保每個代理的'advertised.listeners'也可以公開訪問。 –

+1

我覺得很愚蠢。所以它實際上是在工作,但ELB報告說實例「無法使用」,因爲健康檢查失敗。它在默認情況下指向80端口,它不是「可以ping通」的。所以ELB並沒有將流量路由到任何經紀人。我們有ELB現在在我們的經紀人上ping了Zookeeper端口,它工作得很好!知道它必須是愚蠢的:p。謝謝您的幫助!它肯定揭示了卡夫卡的工作原理,並且我相信在將來會幫助其他人! – Mattnv92

1

恕我直言,建議不要向kafka集羣添加額外的SLB。

  • 卡夫卡集羣本質上是分散的,SLB增加單點故障風險並使集羣設置複雜化。
  • 消息收發是網絡滯後敏感,SLB會明顯降低消息吞吐量。