一臺Linux主機搭建kafka集羣

一、搭建Zookeeper集羣

二、kafka broker集羣搭建

  • kafka 下載、解壓
    wget http://apache.opencas.org/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz
    tar -xzf kafka_2.11-0.9.0.0.tgz
  • kafka broker配置文件修改
    修改kafka根目錄下的config/server.properties
    broker.id=0 #整個集羣內唯一id號,整數,一般從0開始
    listeners=PLAINTEXT://192.168.6.56:9092 #協議、當前broker機器ip、端口,此值可以配置多個,應該跟SSL等有關係,更多用法尚未弄懂,這裏修改爲ip和端口。
    port=9092 #broker端口
    host.name=192.168.6.56 #broker 機器ip
    log.dirs=/zyxx_data/kafka-logs/kafka00 #kafka存儲數據的目錄
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 #zookeeper 集羣列表
  • kafka broker多節點配置

    kafka多節點配置,可以像zookeeper一樣把軟件目錄copy多份,修改各自的配置文件。這裏介紹另外一種方式:同一個軟件目錄程序,但使用不同的配置文件啓動

    使用不同的配置文件啓動多個broker節點,這種方式只適合一臺機器下的僞集羣搭建,在多臺機器的真正集羣就沒有意義了

  • 把kafka根目錄下的config/server.properties copy兩份,名稱分別修改爲:server-1.properties 、server-2.properties。各自修改他們的配置如下:

    config/server-1.properties

    broker.id=1 
    listeners=PLAINTEXT://192.168.6.56:9093
    port=9093 
    host.name=192.168.6.56
    log.dirs=/zyxx_data/kafka-logs/kafka01 
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183

    config/server-2.properties

    broker.id=2 
    listeners=PLAINTEXT://192.168.6.56:9094
    port=9094 
    host.name=192.168.6.56
    log.dirs=/zyxx_data/kafka-logs/kafka02 
    zookeeper.connect=192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183

集羣啓動

  • zookeeper集羣啓動

    進入到/var/zookeeper/目錄,執行

    zookeeper00/bin/zkServer.sh start
    zookeeper01/bin/zkServer.sh start
    zookeeper02/bin/zkServer.sh start

    我們可以通過以下命令查看zookeeper是否已啓動

    ps -ef | grep zoo.cfg

    查看zookeeper進程信息
  • kafka 集羣啓動

    進入到kafka目錄,執行

    bin/kafka-server-start.sh -daemon config/server.properties
    bin/kafka-server-start.sh -daemon config/server-1.properties
    bin/kafka-server-start.sh -daemon config/server-2.properties

    "-daemon" 參數代表以守護進程的方式啓動kafka server。
    官網及網上大多給的啓動命令是沒有"-daemon"參數,如:“bin/kafka-server-start.sh config/server.properties &”,但是這種方式啓動後,如果用戶退出的ssh連接,進程就有可能結束,具體不清楚爲什麼。

    我們可以通過以下命令查看kafka server是否已啓動

    ps -ef | grep config/server

    查看kafka server進程信息

測試

爲了簡單起見,這裏通過命令行的方式啓動生產者和消費者進行測試。

  • 創建主題

    進入到kafka目錄,創建“test5”topic主題:分區爲3、備份爲3的

    bin/kafka-topics.sh --create --zookeeper 192.168.6.56:2181,192.168.6.56:2182,192.168.6.56:2183 --replication-factor 3 --partitions 3 --topic test5

    --zookeeper : zookeeper集羣列表,用英文逗號分隔。可以不用指定zookeeper整個集羣內的節點列表,只指定某個或某幾個zookeeper節點列表也是你可以的
    replication-factor複製數目,提供failover機制;1代表只在一個broker上有數據記錄,一般值都大於1,代表一份數據會自動同步到其他的多個broker,防止某個broker宕機後數據丟失。
    partitions一個topic可以被切分成多個partitions,一個消費者可以消費多個partitions,但一個partitions只能被一個消費者消費,所以增加partitions可以增加消費者的吞吐量。kafka只保證一個partitions內的消息是有序的,多個一個partitions之間的數據是無序的。

    查看"test5"主題詳情

    bin/kafka-topics.sh --describe --zookeeper  192.168.6.56:2181 --topic test5

    test5 topic詳情
  • 啓動生產者、消費者

    啓動生產者

    bin/kafka-console-producer.sh --broker-list 192.168.6.56:9092 --topic test5

    --broker-list : 值可以爲broker集羣中的一個或多個節點

    啓動消費者(在新的ssh連接窗口)

    bin/kafka-console-consumer.sh --zookeeper 192.168.6.56:2181 --topic test5 --from-beginning

    --zookeeper : 值可以爲zookeeper集羣中的一個或多個節點

    我們可以發現,在生產者下輸入一個消息,回車後可以在消費者下輸出,說明我們集羣搭建的沒問題


    生產者和消費者
  • 模擬kafka broker集羣某個節點宕機

    我們直接通過kill 進程來模擬


    再觀察 生產者和消費者


    某個broker節點宕機後的生產者消費者

    我們可以發現,消費者出現了警告信息,但是依舊可以消費數據。

  • 模擬zookeeper集羣某個節點宕機

    我們直接通過kill 進程來模擬


    再觀察 生產者和消費者


    某個zookeeper節點宕機後的生產者和消費

    我們可以發現,消費者依舊可以消費數據。
    這就說明我們整個集羣環境的搭建已經成功。

    注意一點,你啓動消費者時在命令中只指定了一個zookeeper節點,且模擬zookeeper某個節點宕機時,你kill掉的正好又是這個節點。這種情況下你的消費者會不停的報警告信息,但是不影響消費信息。

轉自:http://www.jianshu.com/p/dc4770fc34b6
發佈了177 篇原創文章 · 獲贊 405 · 訪問量 94萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章