網(wǎng)上有太多此類帖子衷蜓,然而本帖比他們?nèi)妗?/p>
背景
有一臺阿里云服務(wù)器A蔼夜,用作測試服務(wù)器屡限,一臺華為服務(wù)器B品嚣,用作生產(chǎn)服務(wù)器。均搭建相同配置和版本Apache Kafka【螅現(xiàn)在需遠(yuǎn)程生產(chǎn)和消費Kafka翰撑。在服務(wù)器B均無錯誤,在服務(wù)器A死活不通拓型。
問題排查
iptable input和output均打開Kafka端口额嘿。
telnet通。
log沒有任何報錯劣挫,就是沒接收到册养。
tcpdump檢測兩臺機器發(fā)送的tcp包是一樣的。
原因分析
首先压固,可以肯定網(wǎng)上的說法是沒錯的球拦。Kafka監(jiān)聽的地址(listeners)和廣播的地址(advertised.listeners)是會有默認(rèn)值的。但是為什么服務(wù)器A行不通帐我,服務(wù)器B行得通呢坎炼?這點目前應(yīng)該沒有文章提到過。就是網(wǎng)卡數(shù)量拦键。
華為服務(wù)器只有一塊網(wǎng)卡谣光,網(wǎng)卡地址是常用局域網(wǎng)地址
192.168.xxx.xxx
所以發(fā)送給該服務(wù)器的TCP報文會通過路由網(wǎng)關(guān)轉(zhuǎn)發(fā)到該網(wǎng)卡。無論是外網(wǎng)內(nèi)網(wǎng)最終都只會指向一個地址芬为。針對此類情況萄金,網(wǎng)上絕大多數(shù)文章所說指定監(jiān)聽和廣播地址的做法是沒有必要的。
而阿里云不同了媚朦,阿里云服務(wù)器有兩塊網(wǎng)卡氧敢,內(nèi)網(wǎng)網(wǎng)卡編號eth0,外網(wǎng)網(wǎng)卡編號eth1询张,如果不指定Kafka配置的地址孙乖,默認(rèn)監(jiān)聽內(nèi)網(wǎng)網(wǎng)卡eth0,而遠(yuǎn)程訪問一定是訪問eth1份氧,則Kafka是絕對監(jiān)聽不到的唯袄。所以這類情況需要把配置地址改掉。普遍情況是在兩塊網(wǎng)卡蜗帜,遠(yuǎn)程調(diào)用的機器和哪一塊網(wǎng)卡處于同一個環(huán)境就要把地址換成哪一塊網(wǎng)卡的地址越妈。