亚洲 日韩 激情 无码 中出,无码人妻久久一区二区三区蜜桃,亚无码乱人伦一区二区,四虎影视永久免费观看,四虎成人精品一区二区免费网站

將kafka集群端口映射到公網(wǎng)訪問

小編:迷魂冰 更新時(shí)間:2022-05-01 14:34
將kafka集群端口映射到公網(wǎng)訪問

場(chǎng)景假設(shè)

比如你有一個(gè)kafka集群,在同一個(gè)vpc(私有網(wǎng)絡(luò))里面也即是在一個(gè)內(nèi)網(wǎng)環(huán)境里,該kafka集群有3個(gè)broker,broker1、broker2和broker3。

kafka集群信息如下:

broker1 IP: 192.168.xxx.1

broker2 IP: 192.168.xxx.2

broker3 IP: 192.168.xxx.3

kafka集群各個(gè)節(jié)點(diǎn) server.properties配置

config/server-1.properties: broker.id=1 listeners=PLAINTEXT://192.168.xxx.1:19092 config/server-2.properties: broker.id=2 listeners=PLAINTEXT://192.168.xxx.2:19092 config/server-3.properties: broker.id=3 listeners=PLAINTEXT://192.168.xxx.3:19092

現(xiàn)在希望通過配置vpc公網(wǎng)ip做端口轉(zhuǎn)發(fā)(也可以通過nginx做端口轉(zhuǎn)發(fā)),就可以通過外網(wǎng)訪問了(但是實(shí)際用kafka客戶端連接會(huì)報(bào)超時(shí))

想通過vpc外的機(jī)器來訪問kafka集群,也就想訪問192.168.xxx.1:19092,192.168.xxx.2:19092,192.168.xxx.3:19092

在vpc上做端口轉(zhuǎn)發(fā),vpc公網(wǎng)ip為192.168.xxx.xx,并在相應(yīng)防火墻打開對(duì)應(yīng)端口(19092、19093、19093),比如:

192.168.xxx.xx:19092 -> 192.168.xxx.1:19092 192.168.xxx.xx:19093 -> 192.168.xxx.2:19092 192.168.xxx.xx:19094 -> 192.168.xxx.2:19092

測(cè)試

這時(shí),如果你通過vpc的公網(wǎng)ip和對(duì)應(yīng)端口連接私有網(wǎng)絡(luò)(內(nèi)網(wǎng))內(nèi)的kafka集群,192.168.xxx.xx:19092、192.168.xxx.xx:19093、192.168.xxx.xx:19094端口都是通的,但是訪問kafka發(fā)送或消費(fèi)消息時(shí),會(huì)報(bào)網(wǎng)絡(luò)超時(shí),這是為什么呢?

kafka producer端(客戶端)和server之間有個(gè)類似協(xié)商的階段, server會(huì)把lkafka配置文件里listeners這里的地址直接返給producer,producer再發(fā)數(shù)據(jù)給這個(gè)listeners地址。

因?yàn)閗afka客戶端是主動(dòng)發(fā)現(xiàn)集群地址的,當(dāng)你通過192.168.xxx.xx:19092、192.168.xxx.xx:19093、192.168.xxx.xx:19094確實(shí)是連接到kafka集群了,kafka集群返回給你的ip列表是你listeners配置的,也就是

192.168.xxx.1:19092 192.168.xxx.2:19092 192.168.xxx.3:19092

客戶端producer 在vpc這個(gè)私有網(wǎng)絡(luò)以外,producer 端通過ip轉(zhuǎn)發(fā)和端口都沒有用,producer 和vpc對(duì)應(yīng)的公網(wǎng)ip是通的,但是與vpc內(nèi)私有網(wǎng)絡(luò)不通,這就是訪問kafka發(fā)送或消費(fèi)消息時(shí)會(huì)報(bào)網(wǎng)絡(luò)超時(shí)等等的本質(zhì)原因。

解決

一種解決方式是客戶端通過域名映射的方式。

1.kafka配置:

修改kafka集群服務(wù)端各個(gè)節(jié)點(diǎn)的server.properties配置,注意listeners之后的ip和端口配置

config/server-1.properties: broker.id=1 listeners=PLAINTEXT://kafka-1:19092 config/server-2.properties: broker.id=2 listeners=PLAINTEXT://kafka-2:19093 config/server-3.properties: broker.id=3 listeners=PLAINTEXT://kafka-3:19094

kafka集群的各個(gè)節(jié)點(diǎn)在服務(wù)端配置hosts

cat /etc/hosts

192.168.xxx.1 kafka-1

192.168.xxx.2 kafka-2

192.168.xxx.3 kafka-3

2.vpc做端口映射

kafka-1 映射至 192.168.xxx.1:19092 kafka-2 映射至 192.168.xxx.2:19093 kafka-3 映射至 192.168.xxx.3:19094

3.客戶端配置:

客戶端在host文件中把kafka01、kafka02、kafka03都映射到公網(wǎng)地址。這個(gè)很關(guān)鍵,上面提到過客戶端會(huì)獲取到kafka配置的元數(shù)據(jù) ,客戶端會(huì)獲取到 kafka-1、kafka-2、kafka-3 這3個(gè)hostname,之后生產(chǎn)或消費(fèi)數(shù)據(jù)會(huì)直接通過這個(gè)地址訪問。如果不把這三個(gè)hostname重新映射到公網(wǎng)IP,就不能成功生產(chǎn)或者消費(fèi)數(shù)據(jù)。

#/etc/hosts 192.168.xxx.xx kafka01 kafka02 kafka03

客戶端訪問kafka集群時(shí),獲取的是kafka-1:19092,kafka-2:19093,kafka-3:19094,通過客戶端配置的hosts映射,都轉(zhuǎn)成了對(duì)應(yīng)的外網(wǎng)的ip,因此就可以訪問了。

注意:端口要一致,hosts映射只轉(zhuǎn)ip。