Kafka0.8.0集群構建

jopen 10年前發布 | 41K 次閱讀 Kafka 消息系統

最近要做實時計算相關的東西,目前每天約100G日志,還在不斷增長,高峰時一天400G日志。

考慮過flume+activemq+storm+redis+hadoop, 考慮用kafka做mq的備用方案。

我這里用了公司的三臺機器
192.168.197.170
192.168.197.171
192.168.197.172

一. Zookeeper集群構建

ZooKeeper集群中具有兩個關鍵的角色:Leader和Follower。集群中所有的結點作為一個整體對分布式應用提供服務,集群中每個結點之間都互相連接。

ZooKeeper采用一種稱為Leader election的選舉算法。在整個集群運行過程中,只有一個Leader,其他的都是Follower,如果ZooKeeper集群在運行過程中Leader出了問題,系統會采用該算法重新選出一個Leader。

ZooKeeper集群啟動的時候,會首先選出一個Leader,在Leader election過程中,某一個滿足選舉算的結點就能成為Leader。

可以使用自帶的zookeeper.
命令:$nohup bin/zookeeper-server-start.sh config/zookeeper.properties &   
不過我選擇了自己搭建zookeeper集群。

下載并解壓zookeeper.
修改$zookeeper_home/conf 下面的配置文件

cp zoo_simple.cfg zoo.cfg
內容修改為
dataDir=/usr/local/tmp/zookeeper
clientPort=2181
server.170=192.168.197.170:2888:3888
server.171=192.168.197.171:2888:3888
server.172=192.168.197.172:2888:3888

在我們配置的dataDir指定的目錄下面,創建一個myid文件,里面內容為一個數字,用來標識當前主機,conf/zoo.cfg文件中配置的server.X中X為什么數字,則myid文件中就輸入這個數字,例如:
  1. $ echo "170" >  /usr/local/tmp/zookeeper/myid
bin/zkServer.sh start 啟動zookeeper



二. Kafka集群構建

1. 下載并解壓Kafka
看官方文檔里介紹,先得構建scala環境, 但是我自己沒有執行下面的操作,居然也能運行,有點莫名其妙,
> tar xzf kafka-<VERSION>.tgz
> cd kafka-<VERSION>
> ./sbt update
> ./sbt package
> ./sbt assembly-package-dependency

2. 修改配置文件
修改 conf/server.properties

zookeeper.connect=192.168.197.170:2181,192.168.197.171:2181,192.168.197.172:2181

broker.id分別改成
broker.id=170
broker.id=171
broker.id=172
host.name分別改成(如果不改,client訪問集群時,如果沒在hosts配置對應機器的 hostname,訪問將會報錯)
host.name=192.168.197.170
host.name=192.168.197.171
host.name=192.168.197.172
可根據需求修改
port: broker節點使用端口號 默認 9092
log.dir: 消息目錄位置

3. 啟動Kafka
cd /usr/local/kafka_2.8.0-0.8.0
JMX_PORT=9999 bin/kafka-server-start.sh config/server.properties &

4. 創建Topic并查看
bin/kafka-create-topic.sh --zookeeper 192.168.197.170:2181 --partition 1 --topic leo-test
bin/kafka-list-topic.sh --zookeeper 192.168.197.170:2181
topic: leo-test partition: 0 leader: 171 replicas: 171 isr: 171
說明:
partiton: partion id,由于此處只有一個partition,因此partition id 為0
leader:當前負責讀寫的lead broker id
relicas:當前partition的所有replication broker list
isr:relicas的子集,只包含出于活動狀態的broker

bin/kafka-create-topic.sh --zookeeper 192.168.197.170:2181 --replica 2 --partition 2 --topic leo-test2
topic: leo-test partition: 0 leader: 171 replicas: 171 isr: 171
topic: leo-test2 partition: 0 leader: 171 replicas: 171,170 isr: 171,170
topic: leo-test2 partition: 1 leader: 170 replicas: 170,171 isr: 170,171
5.試著干掉一個非leader 的broker,然后在干掉leader broker,看看會有什么情況發生。
命令:
pkill -9 -f server.properties



安裝過程遇到的問題:
1. kafka啟動后提示
Unrecognized VM option '+UseCompressedOops'
Could not create the Java virtual machine.
開始以為是內存大小的問題, 后來發現不是,是JDK的問題, 我用的32位centos,jdk1.6_24,  換成JDK1.7依然報錯。
查看 bin/kafka-run-class.sh 
找到
if [ -z "$KAFKA_JVM_PERFORMANCE_OPTS" ]; then
  KAFKA_JVM_PERFORMANCE_OPTS="-server  -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true"
fi
去掉-XX:+UseCompressedOops
JMX_PORT=9999 bin/kafka-server-start.sh config/server.properties &
啟動成功
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!