Kafka部署, 簡單應用(一)

什麼是Kafka

在流式計算中,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

一. 解壓和修改配置文件

1. 解壓和修改配置文件,解壓到當前目錄下:

$ tar -zxvf kafka_2.11-0.11.0.2.tgz -C ./
複製代碼

2. 在kafka目錄下穿件一個文件夾存放log日誌

$ 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

3. 啓動:(分別在集羣機器上後臺啓動)

$ bin/kafka-server-start.sh config/server.properties 1>dev/null 2>&1
複製代碼

4. 中止: (分別在集羣的其餘機器上中止)

$ bin/kafka-server-stop.sh 
複製代碼

二. 演示功能: (這裏使用機器號hadoop106作演示,固然集羣下使用其餘的機器同樣的效果)

1. 建立topic

$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --create --replication-factor 3 --partitions 3 --topic topic_name

1.replication-factor : 副本數量
2.partitions : 分區數量
3.topic : 定義topic名稱
複製代碼

2. 查看topic列表

$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --list
複製代碼

3. 刪除topic

$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --delete --topic topic_name
複製代碼

4. 生產者producer (注意: 端口號9092是producer端口號)

$ bin/kafka-console-producer.sh --broker-list hadoop106:9092 --topic topic_name
複製代碼

5. 消費者consumer(把全部的消息打印到控制檯上)

$ 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
複製代碼

6.查看topic詳細信息

$ bin/kafka-topics.sh --zookeeper hadoop106:2181 --describe --topic topic_name
複製代碼

在部署kafka應用是, 須要注意的是, kafka和zookeeper是強依賴關係, 必須配合zookeeper集羣部署, 這裏只是簡單部署引用和演示, 具體方便若是想深究的話, 各位小夥伴能夠結合官方開發文檔, 協助開發學習, 後期還會加入kafka streaming的方法演示, 請期待...

三. 如下了解Kafka消費過程

1. 消費分區(partition):

kafka的模型, 和rokectMQ基本一致, 生產者在寫入消息過程當中, 會根據該消息的topic的生產過程當中設置的屬性, 寫入到分區中, 理論上分區是partition Log, 消息會將數據寫入到Log日誌中, 因爲消息是異步發送的, 並且是順序消費, 每個分區都是一個獨立的, 有序的, 不可變的記錄序號列, 因此分區帶來的是很高的擴展性, 分區會根據數據的大小長度, 進行分區消費.

2. 消費副本(replication):

在分佈式的集羣中, 數據副本能夠起到集羣宕機的狀況下, 其餘機器能夠正常的消費, 不影響應用的消費, 在沒有副本的狀態下, 一旦broker.id宕機, 那麼可能致使生產應用的崩潰或者業務數據的丟失等等, 爲了不這種狀況, 咱們能夠進行分區, 同時producer也不能再將數據存於其上的patition, 引入replication以後,同一個partition可能會有多個replication,而這時須要在這些replication之間選出一個leader,producer和consumer只與這個leader交互,其它replication做爲follower從leader 中複製數據.

  • 寫入流程

相關文章
相關標籤/搜索