Kafka入門
1.定義
Kafka 是一個(gè)分布式的基于發(fā)布/訂閱模式的消息隊(duì)列,主要應(yīng)用于大數(shù)據(jù)實(shí)時(shí)處理領(lǐng)域推捐。
2.消息隊(duì)列
傳統(tǒng)的消息隊(duì)列的應(yīng)用場(chǎng)景如下:
使用消息隊(duì)列的好處:
- 解耦
允許我們獨(dú)立的擴(kuò)展或修改兩邊的處理過(guò)程,只要確保它們遵守同樣的接口約束。 - 可恢復(fù)性
系統(tǒng)的一部分組件失效時(shí),不會(huì)影響到整個(gè)系統(tǒng)纵顾。消息隊(duì)列降低了進(jìn)程間的耦合度,所以即使一個(gè)處理消息的進(jìn)程掛掉栋盹,加入隊(duì)列中的消息仍然可以在系統(tǒng)恢復(fù)后被處理施逾。 - 緩沖
有助于控制和優(yōu)化數(shù)據(jù)流經(jīng)過(guò)系統(tǒng)的速度,解決生產(chǎn)消息和消費(fèi)消息的處理速度不一致的情況例获。 - 靈活性&峰值處理能力
在訪問(wèn)量劇增的情況下汉额,應(yīng)用仍然需要繼續(xù)發(fā)揮作用,但是這樣的突發(fā)流量并不常見(jiàn)榨汤。如果為以能處理這類峰值訪問(wèn)為標(biāo)準(zhǔn)來(lái)投入資源隨時(shí)待命無(wú)疑是巨大的浪費(fèi)蠕搜。使用消息隊(duì)列能夠使關(guān)鍵組件頂住突發(fā)的訪問(wèn)壓力,而不會(huì)因?yàn)橥话l(fā)的超負(fù)荷的請(qǐng)求而完全崩潰收壕。 - 異步通信
在訪問(wèn)量劇增的情況下妓灌,應(yīng)用仍然需要繼續(xù)發(fā)揮作用,但是這樣的突發(fā)流量并不常見(jiàn)啼器。如果為以能處理這類峰值訪問(wèn)為標(biāo)準(zhǔn)來(lái)投入資源隨時(shí)待命無(wú)疑是巨大的浪費(fèi)旬渠。使用消息隊(duì)列能夠使關(guān)鍵組件頂住突發(fā)的訪問(wèn)壓力俱萍,而不會(huì)因?yàn)橥话l(fā)的超負(fù)荷的請(qǐng)求而完全崩潰端壳。
消息隊(duì)列的兩種模式: - 點(diǎn)對(duì)點(diǎn)模式
點(diǎn)對(duì)點(diǎn),即一對(duì)一枪蘑,消費(fèi)者主動(dòng)拉取數(shù)據(jù)损谦,消息收到后消息清除。消息生產(chǎn)者生產(chǎn)消息發(fā)送到Queue中岳颇,然后消息消費(fèi)者從Queue中取出并且消費(fèi)消息照捡。消息被消費(fèi)以后,queue 中不再有存儲(chǔ)话侧,所以消息消費(fèi)者不可能消費(fèi)到已經(jīng)被消費(fèi)的消息栗精。Queue 支持存在多個(gè)消費(fèi)者,但是對(duì)一個(gè)消息而言,只會(huì)有一個(gè)消費(fèi)者可以消費(fèi)悲立。 - 發(fā)布/訂閱模式
即一對(duì)多鹿寨,消費(fèi)者消費(fèi)數(shù)據(jù)之后不會(huì)清除數(shù)據(jù)。消息生產(chǎn)者(發(fā)布)將消息發(fā)布到 topic 中薪夕,同時(shí)有多個(gè)消息消費(fèi)者(訂閱)消費(fèi)該消息脚草。和點(diǎn)對(duì)點(diǎn)方式不同,發(fā)布到 topic 的消息會(huì)被所有訂閱者消費(fèi)原献。
3.Kafka基礎(chǔ)架構(gòu)
以下是各個(gè)組件的介紹:
1.Producer:消息生產(chǎn)者馏慨,就是向 kafka broker 發(fā)消息的客戶端。
2.Consumer:消息消費(fèi)者姑隅,向 kafka broker 取消息的客戶端写隶。
3.Consumer Group:消費(fèi)者組,由多個(gè) consumer 組成粤策。消費(fèi)者組內(nèi)每個(gè)消費(fèi)者負(fù)責(zé)消費(fèi)不同分區(qū)的數(shù)據(jù)樟澜,一個(gè)分區(qū)只能由一個(gè)組內(nèi)消費(fèi)者消費(fèi);消費(fèi)者組之間互不影響叮盘。所有的消費(fèi)者都屬于某個(gè)消費(fèi)者組秩贰,即消費(fèi)者組是邏輯上的一個(gè)訂閱者。
4.Broker:一臺(tái) kafka 服務(wù)器就是一個(gè) broker柔吼。一個(gè)集群由多個(gè) broker 組成毒费。一個(gè) broker可以容納多個(gè) topic。
5.Topic:可以理解為一個(gè)隊(duì)列愈魏,生產(chǎn)者和消費(fèi)者面向的都是一個(gè) topic觅玻。
6.Partition:為了實(shí)現(xiàn)擴(kuò)展性,一個(gè)非常大的 topic 可以分布到多個(gè) broker(即服務(wù)器)上培漏,一個(gè) topic 可以分為多個(gè)partition溪厘,每個(gè) partition 是一個(gè)有序的隊(duì)列。
7.Replica:副本牌柄,為保證集群中的某個(gè)節(jié)點(diǎn)發(fā)生故障時(shí)畸悬,該節(jié)點(diǎn)上的 partition 數(shù)據(jù)不丟失,且 kafka 仍然能夠繼續(xù)工作珊佣,kafka 提供了副本機(jī)制蹋宦,一個(gè) topic 的每個(gè)分區(qū)都有若干個(gè)副本,一個(gè) leader 和若干個(gè) follower咒锻。
8.leader:每個(gè)分區(qū)多個(gè)副本的“主”冷冗,生產(chǎn)者發(fā)送數(shù)據(jù)的對(duì)象,以及消費(fèi)者消費(fèi)數(shù)據(jù)的對(duì)象都是 leader惑艇。
9.follower:每個(gè)分區(qū)多個(gè)副本中的“從”蒿辙,實(shí)時(shí)從 leader 中同步數(shù)據(jù),保持和 leader 數(shù)據(jù)的同步。leader 發(fā)生故障時(shí)思灌,某個(gè) follower 會(huì)成為新的 follower碰镜。
4.Kafka集群的搭建
1.官網(wǎng)下載安裝包并解壓
tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
2.重命名文件夾
mv kafka_2.11-0.11.0.0/ kafka
3.修改配置文件
cd config/
vi server.properties
我們使用三臺(tái)機(jī)器來(lái)搭建kafka集群,需要保證每臺(tái)機(jī)器的broker.id是不同的數(shù)字习瑰,同是修改zookeeper.connect為對(duì)應(yīng)的zookeeper集群的值绪颖。
broker.id=0
zookeeper.connect=oushum1:2181,oushum2:2181,oushus1:2181
以上的步驟需要在集群中的每臺(tái)機(jī)器上操作,只需注意不同的機(jī)器需要配置不同的broker.id即可甜奄。
4.啟動(dòng)集群柠横,在三臺(tái)機(jī)器上依次執(zhí)行如下命令:
bin/kafka-server-start.sh -daemon config/server.properties
5.創(chuàng)建topic
bin/kafka-topics.sh --zookeeper oushum1:2181 --create --replication-factor 3 --partitions 1 --topic first
選項(xiàng)說(shuō)明:
--topic 定義 topic 名
--replication-factor 定義副本數(shù)
--partitions 定義分區(qū)數(shù)
6.發(fā)送消息
bin/kafka-console-producer.sh --broker-list oushum1:9092 --topic first
>hello world
>atguigu atguigu
7.消費(fèi)消息
bin/kafka-console-consumer.sh --zookeeper hadoop102:2181 --topic first
8.關(guān)閉集群
在三臺(tái)機(jī)器上執(zhí)行如下命令:
bin/kafka-server-stop.sh stop
5.使用可視化工具搭建集群
偶數(shù)科技是一家中國(guó)本土的AI和大數(shù)據(jù)產(chǎn)品和解決方案提供商,產(chǎn)品介紹網(wǎng)站為http://oushu.io/docs/ch/课兄,使用他們公司開發(fā)的lava數(shù)據(jù)中臺(tái)可以輕松的添加和管理hdfs牍氛,zookeeper,spark烟阐,kafka等集群搬俊。下面我們來(lái)介紹如何使用lava來(lái)添加kafka集群。
1.首先在網(wǎng)站http://yumazure.oushu-tech.com:12000/oushurepo/yumrepo/test/kafka/centos7/2.2.0/下載kafka的rpm安裝包
2.在lava的tar包解壓文件中新建kafka目錄蜒茄,并執(zhí)行如下命令:
cd /kafka
createrepo ./
3.之后我們進(jìn)入/etc/yum.repos.d目錄唉擂,執(zhí)行如下命令:
vim oushu.repo
參考文件中其他repo的寫法將kafka的repo寫到最后,可按照如下寫法:
[oushu-wasp]
name=oushu-wasp
baseurl=http://oushum1/oushu/wasp
gpgcheck=0
保存并退出檀葛,將此文件分發(fā)到集群其他機(jī)器上
4.現(xiàn)在執(zhí)行如下命令重新設(shè)置倉(cāng)庫(kù)
/oushu-software-full-x.x.x.x/setup_repo.sh
yum clean all
yum makecache
5.現(xiàn)在我們?cè)诰W(wǎng)頁(yè)上打開lava管理頁(yè)面找到部署Kafka集群的菜單玩祟,創(chuàng)建新的集群并一直點(diǎn)擊下一步直到部署完成。之后我們便可以在頁(yè)面上輕松地管理集群屿聋!