1. 程式人生 > >kafka 外部機器連線不上由於防火牆問題

kafka 外部機器連線不上由於防火牆問題

1、版本問題:

在apache官網上,有兩個kafka0.10的版本一個是scala2.11的一個是2.10的,據scala官網描述,scala2.11主要在jdk6以上使用,scala2.10在主要在java5上使用,所以我們可以根據自己機器的java環境來選擇正確的kafka安裝使用,在客戶端方面,版本最好和伺服器保持一直,以免出現不必要的麻煩。

2、防火牆問題:

首先確保kafak伺服器的埠在開著,預設埠是9092,可以直接使用service iptables stop關閉防火牆,覺得太暴力的可以只打開對應的埠即可:

開啟方式1:vi /etc/sysconfig/iptables   在結尾新增:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9092-j ACCEPT

開啟方式2:kafka的網路協議是基於TCP的二進位制網路協議,所以執行下列命令即可

iptables -I INPUT -p tcp --dport 9092 -j ACCEPT  && service iptables save &&service iptables restart

3、kafka伺服器配置問題,咱們先看一段kafka的配置描述

# Hostname and port the broker will advertise to producers and consumers. If not set, 
# it uses the value for "listeners" if configured.  Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().

在我們使用預設配置時hostname和advertise.host.name是被註釋掉的,所以系統會呼叫InetAddress.getCanonicalHostName()方法獲取,這個值一般是localhost,如果kafka的消費者或者生產者那到這個localhost只能去本機kafka伺服器消費或生產訊息,所以當我們在本機使用時沒問題,而一旦連的是遠端的kafka伺服器,使用localhost去消費本機的訊息,這肯定是不可以的,感覺kafka這樣設計又一點不太方便。所以我們在使用遠端kafka伺服器時應該把../kafka/config/service.properties 中的advertised.host.name=<遠端kafka伺服器的ip地址>。

4、Failed to send messages after 3 tries

http://blog.csdn.net/uniquechao/article/details/20073953
原文:https://blog.csdn.net/cysdxy/article/details/52337364