1.kafka是什麼html
根據標題能夠有個概念:kafka是storm的上游數據源之一,也是一對經典的組合,就像郭德綱和于謙java
根據官網:http://kafka.apache.org/intro 的解釋呢,是這樣的:redis
Apache Kafka® is a distributed streaming platformapache
ApacheKafka®是一個分佈式流媒體平臺vim
l Apache Kafka是一個開源消息系統,由Scala寫成。是由Apache軟件基金會開發的一個開源消息系統項目。windows
l Kafka最初是由LinkedIn開發,並於2011年初開源。2012年10月從Apache Incubator畢業。該項目的目標是爲處理實時數據提供一個統1、高通量、低等待的平臺。緩存
l Kafka是一個分佈式消息隊列:生產者、消費者的功能。它提供了相似於JMS的特性,可是在設計實現上徹底不一樣,此外它並非JMS規範的實現。bash
l Kafka對消息保存時根據Topic進行歸類,發送消息者稱爲Producer,消息接受者稱爲Consumer,此外kafka集羣有多個kafka實例組成,每一個實例(server)成爲broker。app
l 不管是kafka集羣,仍是producer和consumer都依賴於zookeeper集羣保存一些meta信息,來保證系統可用性負載均衡
2.主要feature
1:It lets you publish and subscribe to streams of records.發佈和訂閱消息流,這個功能相似於消息隊列,這也是kafka歸類爲消息隊列框架的緣由
2:It lets you store streams of records in a fault-tolerant way.以容錯的方式記錄消息流,kafka以文件的方式來存儲消息流
3:It lets you process streams of records as they occur.能夠再消息發佈的時候進行處理
3.使用場景
在流式計算中,Kafka通常用來緩存數據,Storm經過消費Kafka的數據進行計算。
經典組合是:kafka+storm+redis
4.消息隊列補充
JMS參考基礎篇ActiveMQ相關介紹:http://www.cnblogs.com/jiangbei/p/8311148.html
爲何須要消息隊列:
消息系統的核心做用就是三點:解耦,異步和並行
kafka是類JMS,它吸取了JMS兩種模式,將發佈/訂閱模式中消費者或者數據的方式從被動推送變成主動拉取
更多詳細介紹,參考:http://kafka.apache.org/intro
http://blog.csdn.net/a568078283/article/details/51464524
消息發送流程:
請帶着如下問題思考:
分組策略
如何保證數據的徹底生產
partition數量和broker的關係
每一個partition數據如何保存到硬盤上
kafka有什麼獨特的特色(爲何它是大數據下消息隊列的寵兒)
消費者如何標記消費狀態
消費者負載均衡的策略
如何保證消費者消費數據是有序的
1.下載
這裏換成一下wget,下載速度仍是很是快的!
wget http://mirrors.tuna.tsinghua.edu.cn/apache/kafka/0.11.0.2/kafka_2.11-0.11.0.2.tgz
// 這裏也可使用windows下載完成後經過ftp進行上傳(help命令進行提示),rz/sz請勿使用!屬於遠古時代的協議!大文件速度堪憂!
前導條件是java環境和zk,固然,新版的kafka已經內置了zk(屬於可選配置了)
2.解壓
tar -zxvf kafka_2.11-0.11.0.2.tgz -C apps/
這裏就不採用mv進行解壓後目錄的重命名了,採用一下建立軟鏈接的方式!
ln -s kafka_2.11-0.11.0.2/ kafka
3.修改配置文件
一樣的,養成一個備份出廠設置的習慣:
[hadoop@mini1 config]$ cp server.properties server.properties.bak
此配置文件的各項說明參考:http://blog.csdn.net/lizhitao/article/details/25667831
[hadoop@mini1 config]$ vim server.properties
主要修改的配置以下:
最重要的參數爲:broker.id、log.dir、zookeeper.connect
broker.id=0 listeners=PLAINTEXT://192.168.137.128:9092
port=9092 log.dirs=home/hadoop/apps/kafka/logs
number.partition=2 zookeeper.connect=mini1:2181,mini2:2181,mini3:2181
// 注意listener處必須是IP!緣由參考:http://blog.csdn.net/louisliaoxh/article/details/51567515
4.分發安裝包
[hadoop@mini1 apps]$ scp -r kafka_2.11-0.11.0.2/ mini2:/home/hadoop/apps/
[hadoop@mini1 apps]$ scp -r kafka_2.11-0.11.0.2/ mini3:/home/hadoop/apps/
5.修改分發的節點配置
先依次給mini2,mini3建立軟鏈接:
ln -s kafka_2.11-0.11.0.2/ kafka
再修改配置:
修改broker.id分別是1和2(不得重複);修改監聽處的IP
6.啓動kafka
先啓動zk(使用了本身的zk)
這裏能夠配置一下環境變量,能夠方便後續的一些操做,而且這裏配置了軟鏈接的話是很是方便的(後續即便安裝新版本,環境變量也無需變動)
模仿zk寫一個一鍵啓動腳本
#!/bin/bash BROKERS="mini1 mini2 mini3" KAFKA_HOME="/home/hadoop/apps/kafka" for BROKER in $BROKERS do echo "Starting kafka on ${BROKER} ... " ssh ${BROKER} "source /etc/profile; nohup sh ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties > /dev/null 2>&1 &" if [[ $? -ne 0 ]]; then echo "Start kafka on ${BROKER} is OK !" fi done
kafka啓動命令以下:(這裏使用後臺啓動)
bin/kafka-server-start.sh config/server.properties &
參考博文:http://www.javashuo.com/article/p-fqsjtlrp-ez.html
官網配置講解:http://kafka.apache.org/0110/documentation.html#configuration