window環境搭建zookeeper,kafka叢集

來源:互聯網
上載者:User

標籤:seve   bsp   send   customer   val   ip地址   建立   先後   amp   

為了示範叢集的效果,這裡準備一台虛擬機器(window 7),在虛擬機器中搭建了單IP多節點的zookeeper叢集(多IP節點的也是同理的),並且在本機(win 7)和虛擬機器中都安裝了kafka。

前期準備說明:

1.三台zookeeper伺服器,本機安裝一個作為server1,虛擬機器安裝兩個(單IP)

2.三台kafka伺服器,本機安裝一個作為server1,虛擬機器安裝兩個。

 

備忘:當然你可以直接在虛擬機器上安裝三個伺服器分別為server1、server2、server3 。

  • 虛擬機器和本機網路環境

1.將虛擬機器的網路模式調整為橋接模式,將虛擬機器的防火牆功能關閉;

2.將主機的防火牆也關閉。

3.互相ping,測試是否能正常串連.。

  • 下載kafka

從Kafka官網http://kafka.apache.org/downloads下載Kafka安裝包。(要下載Binary downloads這個類型,不要下載源檔案,方便使用)

  • 下載zookeeper

從zookeeper官網http://zookeeper.apache.org/releases.html下載zookeeper安裝包。

  • 下載JDK

從官網http://www.java.com/download/下載(建議下載Oracle官方發布的Java),,配置環境變數。

zookeeper叢集環境搭建本機配置修改本機sever1的zoo.cfg檔案配置:
#儲存記憶體中資料庫快照集的位置,如果不設定參數,更新交易記錄將被儲存到預設位置。#dataDir=/tmp/zookeeperdataDir=D:/bigData/zookeeper-3.4.10/data#記錄檔的位置dataLogDir=D:/bigData/zookeeper-3.4.10/zlog#監聽連接埠clientPort=2181#叢集伺服器配置server.1=192.168.1.130:9000:7000server.2=192.168.1.103:9001:7001server.3=192.168.1.103:9002:7002

格式: server.A = B:C:D

A:是一個數字,表示第幾號伺服器

B:伺服器IP地址

C:是一個連接埠號碼,用來叢集成員的資訊交換,表示這個伺服器與叢集中的leader伺服器交換資訊的連接埠

D:是在leader掛掉時專門用來進行選舉leader所用的連接埠

完整設定檔如下:

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.#dataDir=/tmp/zookeeperdataDir=D:/bigData/zookeeper-3.4.10/datadataLogDir=D:/bigData/zookeeper-3.4.10/zlog# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the # administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.1=192.168.1.130:9000:7000server.2=192.168.1.101:9001:7001server.3=192.168.1.101:9002:7002
View Code建立serverID

在zoo.cfg設定檔中dataDir目錄中建立一個沒有尾碼的myid檔案,裡邊寫1。

虛擬機器設定

將原生zookeeper安裝包拷貝到虛擬機器上,然後在盤中建立兩個目錄,server2,server3目錄。

修改server2的zoo.cfg設定檔:
#儲存記憶體中資料庫快照集的位置,如果不設定參數,更新交易記錄將被儲存到預設位置。#dataDir=/tmp/zookeeperdataDir=E:/bigData/server2/zookeeper-3.4.10/data#記錄檔的位置dataLogDir=E:/bigData/server2/zookeeper-3.4.10/zlog#監聽連接埠clientPort=2182#叢集伺服器配置server.1=192.168.1.130:9000:7000server.2=192.168.1.103:9001:7001server.3=192.168.1.103:9002:7002
建立SeverID

在zoo.cfg設定檔中dataDir目錄中建立一個沒有尾碼的myid檔案,裡邊寫2。

同理配置server3中的zookeeper,這樣zookeeper叢集的配置工作已經完成。

下面我們啟動zookeeper叢集:一個一個啟動每一個zookeeper伺服器:
先後進入每一個zookeeper伺服器的bin目錄下執行zkserver.cmd,在先啟動的zookeeper會列印其他zookeeper伺服器未啟動的錯誤資訊,直至到最後一個啟動的時候就沒有異常資訊了。正常介面:

zookeeper叢集環境搭建遇到問題總結:
  1. zookeeper啟動時報Cannot open channel to X at election address Error contacting service. It is probably not running.

解決方案:

a.     關閉所有伺服器防火牆

b.    將本伺服器的IP修改成0.0.0.0

例如:server.1=0.0.0.0:9000:7000

Kafka叢集環境搭建:

下載kafka後解壓到某個目錄,然後修改server.properties配置。

server.properties修改說明:
broker.id=0?    在kafka這個叢集中的唯一標識,且只能是正整數port=9091?    該服務監聽的連接埠host.name=192.168.1.130?    broker 綁定的主機名稱(IP) 如果不設定將綁定所有的介面。advertised.host.name=192.168.1.130?    broker服務將通知消費者和生產者 換言之,就是消費者和生產者就是通過這個主機(IP)來進行通訊的。如果沒有設定就預設採用host.name。num.network.threads=2?    broker處理訊息的最大線程數,一般情況是CPU的核心數num.io.threads=8?    broker處理IO的線程數 一般是num.network.threads的兩倍socket.send.buffer.bytes=1048576?    socket發送的緩衝區。socket調優參數SO_SNDBUFFsocket.receive.buffer.bytes=1048576?    socket接收的緩衝區 socket的調優參數SO_RCVBUFsocket.request.max.bytes=104857600?    socket請求的最大數量,防止serverOOM。log.dirs=\logs?    kafka資料的存放地址,多個地址的話用逗號隔開。多個目錄分布在不同的磁碟上可以提高讀寫效能num.partitions=2?    每個tipic的預設分區個數,在建立topic時可以重新制定log.retention.hours=168?    資料檔案的保留時間 log.retention.minutes也是一個道理。log.segment.bytes=536870912?    topic中的最大檔案的大小 -1表示沒有檔案大小限制 log.segment.bytes 和log.retention.minutes 任意一個 達到要求 都會刪除該檔案 在建立topic時可以重新制定。若沒有.則選取該預設值log.retention.check.interval.ms=60000?    檔案大小檢查的周期時間,是否處罰 log.cleanup.policy中設定的策略log.cleaner.enable=false?    是否開啟日誌清理zookeeper.connect=192.168.1.130:num1,192.168.1.130:num2,192.168.1.130:num3?    上面我們的Zookeeper叢集zookeeper.connection.timeout.ms=1000000?    進群連結時間逾時
本機配置修改本機server1的server.properties配置:
#在kafka這個叢集中的唯一標識,且只能是正整數broker.id=0# kafka叢集的地址broker.list=192.168.0.130:9092,192.168.0.103:9093,192.168.0.103:9094#listener and portport=9092#broker 綁定的主機名稱(IP) 如果不設定將綁定所有的介面。host.name=192.168.1.130#kafka資料的存放地址,多個地址的話用逗號隔開。多個目錄分布在不同的磁碟上可以提高讀寫效能# A comma separated list of directories under which to store log files#log.dirs=/tmp/kafka-logslog.dirs=D:/bigData/kafka_2.11-1.1.0/kafka-logs#每個tipic的預設分區個數,在建立topic時可以重新制定num.partitions=3# root directory for all kafka znodes.zookeeper.connect=192.168.1.130:2181,192.168.1.103:2182,192.168.1.103:2183
虛擬機器設定

將原生kafka安裝包拷貝到虛擬機器上,存放在server2,server3目錄。

注意:若本機拷貝到虛擬機器中kafka之前有使用過,產生過topics,直接拷貝搭建叢集,啟動kafka時會報如下錯誤:

原因:在單點環境下建立的topic中,kafka伺服器的broker.id為0,在搭建叢集時修改了borker.id,先前建立的topic就無法找到對應的broker.id。

解決辦法:刪除原來的topic資訊。

修改server2目錄中kafka配置:
#在kafka這個叢集中的唯一標識,且只能是正整數broker.id=1# kafka叢集的地址broker.list=192.168.0.130:9092,192.168.0.103:9093,192.168.0.103:9094#listener and portport=9093#broker 綁定的主機名稱(IP) 如果不設定將綁定所有的介面。host.name=192.168.1.103#kafka資料的存放地址,多個地址的話用逗號隔開。多個目錄分布在不同的磁碟上可以提高讀寫效能# A comma separated list of directories under which to store log files#log.dirs=/tmp/kafka-logslog.dirs=D:/bigData/server2/kafka_2.11-1.1.0/kafka-logs#每個tipic的預設分區個數,在建立topic時可以重新制定num.partitions=3# root directory for all kafka znodes.zookeeper.connect=192.168.1.130:2181,192.168.1.103:2182,192.168.1.103:2183

同理修改server3中的kafka配置,配置好之後,kafkaIntegration Environment已經配置完成,下面我們來驗證下Integration Environment是否OK。

驗證叢集環境依次先啟動zookeeper伺服器

進入zookeeper的bin目錄,執行zkServer.cmd

依次啟動kafka伺服器

進入kafka安裝目錄D:\bigData\kafka_2.11-1.1.0,按下shift+滑鼠右鍵,選擇"在此處開啟命令視窗",開啟命令列,在命令列中輸入:.\bin\windows\kafka-server-start.bat .\config\server.properties斷行符號。正常啟動介面

在主機kafka伺服器建立topic主要參數說明:partitions分區數

(1). partitions :分區數,控制topic將分區成多少個log。可以顯示指定,如果不指定則會使用broker(server.properties)中的num.partitions配置的數量
(2). 雖然增加分區數可以提供kafka叢集的輸送量、但是過多的分區數或者或是單台伺服器上的分區數過多,會增加不可用及延遲的風險。因為多的分區數,意味著需要開啟更多的檔案控制代碼、增加點到點的延時、增加用戶端的記憶體消耗。
(3). 分區數也限制了consumer的並行度,即限制了並行consumer訊息的線程數不能大於分區數
(4). 分區數也限制了producer發送訊息是指定的分區。如建立topic時分區設定為1,producer發送訊息時通過自訂的分區方法指定分區為2或以上的數都會出錯的;這種情況可以通過alter –partitions 來增加分區數。

replication-factor副本

1. replication factor 控制訊息儲存在幾個broker(伺服器)上,一般情況下等於broker的個數。
2. 如果沒有在建立時顯示指定或通過API向一個不存在的topic生產訊息時會使用broker(server.properties)中的default.replication.factor配置的數量。

建立Topic

1. 建立主題,命名為"test20180430",replicationfactor=3(因為這裡有三個kafka伺服器在運行)。可根據叢集中kafka伺服器個數來修改replicationfactor的數量,以便提高系統容錯性等。
2.在D:\bigData\kafka_2.11-1.1.0\bin\windows目錄下開啟新的命令列,輸入命令:kafka-topics.bat --create --zookeeper 192.168.1.130:2181 --replication-factor 3 --partitions 1 --topic test20180430斷行符號。

查看Topic

kafka-topics.bat --zookeeper 192.168.1.130:2181 --describe --topic test20180430

結果說明:
第一行,列出了topic的名稱,分區數(PartitionCount),副本數(ReplicationFactor)以及其他的配置(Config.s)
Leader:1 表示為做為讀寫的broker的編號
Replicas:表示該topic的每個分區在那些borker中儲存
Isr:表示當前有效broker, Isr是Replicas的子集

建立Producer訊息提供者

1. 在D:\bigData\kafka_2.11-1.1.0\bin\windows目錄下開啟新的命令列,輸入命令:kafka-console-producer.bat --broker-list 192.168.1.130:9092,192.168.1.101:9093,192.168.1.101:9094 --topic test20180430 斷行符號。(該視窗不要關閉)

建立Customer訊息消費者

1. 在D:\bigData\kafka_2.11-1.1.0\bin\windows目錄下開啟新的命令列,輸入命令:kafka-console-consumer.bat --zookeeper 192.168.1.130:2181 --topic test20180430斷行符號。

以同樣的方式,將虛擬機器上server2和server3的訊息者customer建立,然後通過主機上的producer進行訊息發送操作。

至此,叢集環境已經驗證OK。

叢集容錯性

1. 首先查看topic的資訊
kafka-topics.bat --list --zookeeper 192.168.1.130:2181
查看指定的topic的詳細資料:
kafka-topics.bat --zookeeper 192.168.1.130:2181 --describe --topic test20180430

可以看到此時選舉的leader是0,即就是虛擬機器中的kafka伺服器,現在把虛擬機器的kafka伺服器給幹掉。此時leader為變為1,消費者能繼續消費。

注意:zk的部署個數最好為基數,ZK叢集的機制是只要超過半數的節點OK,叢集就能正常提供服務。只有ZK節點掛得太多,只剩一半或不到一半節點能工作,叢集才失效。

 

window環境搭建zookeeper,kafka叢集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.