Docker中搭建Kafka集群以及讓外網(wǎng)訪問

集群規(guī)劃,3個容器坯约,由最初的centos:latest鏡像開始制作

主機名 IP地址
kafka-node1 172.19.0.71
kafka-node2 172.19.0.72
kafka-node3 172.19.0.73
宿主機(虛擬機centos6.5) 10.20.0.128

172.19.0.0/16網(wǎng)段是docker內(nèi)部使用的橋接網(wǎng)段,外網(wǎng)是無法直接訪問的

安裝和配置zookeeper

下載解壓添加到環(huán)境變量即可莫鸭,zoo.cfg配置如下

server.1=kafka-node1:2888:3888
server.2=kafka-node2:2888:3888
server.3=kafka-node3:2888:3888

注意配置的data目錄下面的myid文件需要對應(yīng)的id編號即可

安裝和配置kafka

下載解壓添加到環(huán)境變量闹丐,server.properties修改如下參數(shù):

broker.id=1              //1,2,3因為配了3臺
listeners=PLAINTEXT://kafka-node1:9092   //這個參數(shù)非常重要,想要外網(wǎng)訪問docker內(nèi)的集群被因,只能配置主機名卿拴,不能配置IP地址
zookeeper.connect=172.19.0.71:2181,172.19.0.72:2181,172.19.0.73:2181
broker.id=2
listeners=PLAINTEXT://kafka-node2:9093  //注意不要在用9092端口,最好和docker暴露出去的端口一致
zookeeper.connect=172.19.0.71:2181,172.19.0.72:2181,172.19.0.73:2181
broker.id=3
listeners=PLAINTEXT://kafka-node3:9094
zookeeper.connect=172.19.0.71:2181,172.19.0.72:2181,172.19.0.73:2181

其他具體細節(jié)的配置參照官網(wǎng)說明梨与,作為測試堕花,默認(rèn)不會有什么影響

Docker容器創(chuàng)建語句
docker run -d --name kafka-node1 --ip 172.19.0.71 --net mariadb-net -p 9092:9092 -v /home/kafka-node1:/mnt -i -t cluster/hadoop:1.1-kafka /bin/bash
docker run -d --name kafka-node2 --ip 172.19.0.72 --net mariadb-net -p 9093:9093 -v /home/kafka-node2:/mnt -i -t cluster/hadoop:1.1-kafka /bin/bash
docker run -d --name kafka-node3 --ip 172.19.0.73 --net mariadb-net -p 9094:9094 -v /home/kafka-node3:/mnt -i -t cluster/hadoop:1.1-kafka /bin/bash
(把鏡像換成centos:latest即可)
啟動zookeeper

在3臺機器上分別執(zhí)行

zkServer.sh start
啟動kafka集群

在3臺機器上分別執(zhí)行

kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties(修改成自己的地址)
本機測試
創(chuàng)建topic
kafka-topics.sh --create --zookeeper kafka-node1:2181 --replication-factor 1 --partitions 1 --topic test1
發(fā)送一些消息
kafka-console-producer.sh --broker-list kafka-node1:9092 --topic test1  //注意這里不能在用localhost
查看消息
kafka-console-consumer.sh --bootstrap-server kafka-node2:9092 --topic test1 --from-beginning 

本機測試發(fā)現(xiàn)沒有問題

Java客戶端測試(其他機器,可以訪問宿主機粥鞋,但不能訪問docker)

參照官網(wǎng)構(gòu)建maven項目缘挽,代碼如下:

public class DemoProducer {
    public static void main(String[] args) {
        long events = 10;
        Random rnd = new Random();

        Properties props = new Properties();
        props.put("bootstrap.servers", "10.20.0.128:9092");
        props.put("acks", "all");
        props.put("retries", 0);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1);
        props.put("buffer.memory", 33554432);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        Producer<String, String> producer = new KafkaProducer<>(props);

        for (long nEvents = 0; nEvents < events; nEvents++) {
            long runtime = new Date().getTime();
            String ip = "192.168.2." + rnd.nextInt(255);
            String msg = runtime + ",www.example.com," + ip;
            ProducerRecord<String, String> data = new ProducerRecord<String, String>("test1", msg);
            producer.send(data);
            System.out.println(nEvents);
        }
        producer.close();
    }
}

發(fā)現(xiàn)一直卡在那里,最終以超時異常退出,或者報broker找不到的錯誤壕曼,跟進去之后發(fā)現(xiàn)苏研,程序獲得了cluster集群的信息,包括節(jié)點和分區(qū)等元信息腮郊,但是無法進一步訪問摹蘑,因為返回的信息是kafka-node1、kafka-node2和kafka-node3轧飞,這就是為什么在kafka的配置中不要配IP地址的原因衅鹿,如果返回的是IP地址,那么肯定是無法訪問的过咬,現(xiàn)在返回的是主機名大渤,很簡單,在客戶端的hosts文件中添加:

10.20.0.128 kafka-node1
10.20.0.128 kafka-node2
10.20.0.128 kafka-node3

把所有的主機名都映射到宿主機的IP援奢,OK兼犯,問題解決

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市集漾,隨后出現(xiàn)的幾起案子切黔,更是在濱河造成了極大的恐慌,老刑警劉巖具篇,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纬霞,死亡現(xiàn)場離奇詭異,居然都是意外死亡驱显,警方通過查閱死者的電腦和手機诗芜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埃疫,“玉大人伏恐,你說我怎么就攤上這事∷ㄋ” “怎么了翠桦?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胳蛮。 經(jīng)常有香客問我销凑,道長,這世上最難降的妖魔是什么仅炊? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任斗幼,我火速辦了婚禮,結(jié)果婚禮上抚垄,老公的妹妹穿的比我還像新娘蜕窿。我一直安慰自己谋逻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布渠羞。 她就那樣靜靜地躺著斤贰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪次询。 梳的紋絲不亂的頭發(fā)上荧恍,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音屯吊,去河邊找鬼送巡。 笑死,一個胖子當(dāng)著我的面吹牛盒卸,可吹牛的內(nèi)容都是我干的骗爆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蔽介,長吁一口氣:“原來是場噩夢啊……” “哼摘投!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起虹蓄,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤犀呼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后薇组,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體外臂,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年律胀,在試婚紗的時候發(fā)現(xiàn)自己被綠了宋光。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡炭菌,死狀恐怖罪佳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黑低,我是刑警寧澤赘艳,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站投储,受9級特大地震影響第练,放射性物質(zhì)發(fā)生泄漏阔馋。R本人自食惡果不足惜玛荞,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呕寝。 院中可真熱鬧勋眯,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至讶坯,卻和暖如春番电,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辆琅。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工漱办, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人婉烟。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓娩井,卻偏偏與公主長得像,于是被迫代替她去往敵國和親似袁。 傳聞我的和親對象是個殘疾皇子洞辣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)昙衅,斷路器扬霜,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • Kafka 0.9版本對java client的api做出了較大調(diào)整婴谱,本文主要總結(jié)了Kafka 0.9在集群搭建蟹但、...
    kelgon閱讀 1,430評論 0 51
  • ** 今天看了一下kafka官網(wǎng),嘗試著在自己電腦上安裝和配置谭羔,然后學(xué)一下官方document华糖。** Introd...
    RainChang閱讀 4,993評論 1 30
  • 最近在學(xué)習(xí)大數(shù)據(jù)技術(shù),朋友叫我直接學(xué)習(xí)Spark瘟裸,英雄不問出處客叉,菜鳥不問對錯,于是我就開始了Spark學(xué)習(xí)话告。 為什...
    Plokmijn閱讀 26,504評論 6 26
  • 今天開始兼搏,有趣的,能讓笑點很高的我會心一笑的沙郭,不低俗不下流的佛呻,算摘抄也好,練打字也好病线,可惜多數(shù)找不到原作者吓著。 當(dāng)然...
    甜甜命閱讀 195評論 0 0