在流式計算中,Kafka通常用來緩存數據,Storm經過消費Kafka的數據進行計算。apache
Apache Kafka是一個開源消息系統,由Scala寫成。是由Apache軟件基金會開發的一個開源消息系統項目。bootstrap
Kafka最初是由LinkedIn公司開發,並於 2011年初開源。2012年10月從Apache Incubator畢業。該項目的目標是爲處理實時數據提供一個統1、高通量、低等待的平臺。api
Kafka是一個分佈式消息隊列。Kafka對消息保存時根據Topic進行歸類,發送消息者稱爲Producer,消息接受者稱爲Consumer,此外kafka集羣有多個kafka實例組成,每一個實例(server)成爲broker。緩存
不管是kafka集羣,仍是producer和consumer都依賴於zookeeper集羣保存一些meta信息,來保證系統可用性。異步
下載地址:kafka.apache.org/downloads分佈式
演示版本號: kafka_2.11-0.11.0.2ide
在此感謝Apache基金會對開源社區的巨大貢獻oop
$ tar -zxvf kafka_2.11-0.11.0.2.tgz -C ./
複製代碼
$ mkdir kafkaLogs
$ vi config/server.properties
#打開註釋, 表示, topic能夠刪除
delete.topic.enable=true
# zookeeper地址:多個是用 "," 隔開
zookeeper.connect=hadoop106:2181,hadoop107:2181,hadoop108:2181
#設置位置標識(這裏我配置的是我機器的ip號)
broker.id=106
#設置log生成地址(絕對路徑)
log.dirs=/opt/module/kafka_2.11-0.11.0.2/kafkaLogs
複製代碼
退出vi學習
scp 分發到其餘機器上, 注意: broker.id的其餘機器上須要修改, 集羣中必須惟一.spa
$ bin/kafka-server-start.sh config/server.properties 1>dev/null 2>&1
複製代碼
$ bin/kafka-server-stop.sh
複製代碼
$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --create --replication-factor 3 --partitions 3 --topic topic_name
1.replication-factor : 副本數量
2.partitions : 分區數量
3.topic : 定義topic名稱
複製代碼
$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --list
複製代碼
$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --delete --topic topic_name
複製代碼
$ bin/kafka-console-producer.sh --broker-list hadoop106:9092 --topic topic_name
複製代碼
$ bin/kafka-console-consumer.sh --zookeeper hadoop106:2181 --from-beginning --topic topic_name
複製代碼
注: 因爲執行上一條命令出現警告, 緣由是api過時
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
咱們能夠執行一下操做
$ bin/kafka-console-consumer.sh --bootstrap-server hadoop107:9092 --topic topic_name --from-beginning
複製代碼
$ bin/kafka-topics.sh --zookeeper hadoop106:2181 --describe --topic topic_name
複製代碼
在部署kafka應用是, 須要注意的是, kafka和zookeeper是強依賴關係, 必須配合zookeeper集羣部署, 這裏只是簡單部署引用和演示, 具體方便若是想深究的話, 各位小夥伴能夠結合官方開發文檔, 協助開發學習, 後期還會加入kafka streaming的方法演示, 請期待...
kafka的模型, 和rokectMQ基本一致, 生產者在寫入消息過程當中, 會根據該消息的topic的生產過程當中設置的屬性, 寫入到分區中, 理論上分區是partition Log, 消息會將數據寫入到Log日誌中, 因爲消息是異步發送的, 並且是順序消費, 每個分區都是一個獨立的, 有序的, 不可變的記錄序號列, 因此分區帶來的是很高的擴展性, 分區會根據數據的大小長度, 進行分區消費.
在分佈式的集羣中, 數據副本能夠起到集羣宕機的狀況下, 其餘機器能夠正常的消費, 不影響應用的消費, 在沒有副本的狀態下, 一旦broker.id宕機, 那麼可能致使生產應用的崩潰或者業務數據的丟失等等, 爲了不這種狀況, 咱們能夠進行分區, 同時producer也不能再將數據存於其上的patition, 引入replication以後,同一個partition可能會有多個replication,而這時須要在這些replication之間選出一個leader,producer和consumer只與這個leader交互,其它replication做爲follower從leader 中複製數據.