MQ本質(zhì):
例如 ActiveMQ、RabbitMQ、RocketMQ 等中間件。采用這種模型,本質(zhì)就是將要推送的數(shù)據(jù),不在存放在當(dāng)前應(yīng)用程序的內(nèi)存中,而是將數(shù)據(jù)存放到另一個(gè)專門負(fù)責(zé)數(shù)據(jù)處理的應(yīng)用程序中,從而實(shí)現(xiàn)服務(wù)解耦。
kafuka模型:
如果你看不懂這些概念沒關(guān)系,我會(huì)帶著大家一起梳理一遍!
? Producer:Producer 即生產(chǎn)者,消息的產(chǎn)生者,是消息的入口
? Broker:Broker 是 kafka 一個(gè)實(shí)例,每個(gè)服務(wù)器上有一個(gè)或多個(gè) kafka 的實(shí)例,簡(jiǎn)單的理解就是一臺(tái) kafka 服務(wù)器,kafka cluster表示集群的意思
? Topic:消息的主題,可以理解為消息隊(duì)列,kafka的數(shù)據(jù)就保存在topic。在每個(gè) broker 上都可以創(chuàng)建多個(gè) topic 。
? Partition:Topic的分區(qū),每個(gè) topic 可以有多個(gè)分區(qū),分區(qū)的作用是做負(fù)載,提高 kafka 的吞吐量。同一個(gè) topic 在不同的分區(qū)的數(shù)據(jù)是不重復(fù)的,partition 的表現(xiàn)形式就是一個(gè)一個(gè)的文件夾!
? Replication:每一個(gè)分區(qū)都有多個(gè)副本,副本的作用是做備胎,主分區(qū)(Leader)會(huì)將數(shù)據(jù)同步到從分區(qū)(Follower)。當(dāng)主分區(qū)(Leader)故障的時(shí)候會(huì)選擇一個(gè)備胎(Follower)上位,成為 Leader。在kafka中默認(rèn)副本的最大數(shù)量是10個(gè),且副本的數(shù)量不能大于Broker的數(shù)量,follower和leader絕對(duì)是在不同的機(jī)器,同一機(jī)器對(duì)同一個(gè)分區(qū)也只可能存放一個(gè)副本
? Message:每一條發(fā)送的消息主體。
? Consumer:消費(fèi)者,即消息的消費(fèi)方,是消息的出口。
? Consumer Group:我們可以將多個(gè)消費(fèi)組組成一個(gè)消費(fèi)者組,在 kafka 的設(shè)計(jì)中同一個(gè)分區(qū)的數(shù)據(jù)只能被消費(fèi)者組中的某一個(gè)消費(fèi)者消費(fèi)。同一個(gè)消費(fèi)者組的消費(fèi)者可以消費(fèi)同一個(gè)topic的不同分區(qū)的數(shù)據(jù),這也是為了提高kafka的吞吐量!
? Zookeeper:kafka 集群依賴 zookeeper 來保存集群的的元信息,來保證系統(tǒng)的可用性。
簡(jiǎn)而言之,kafka 本質(zhì)就是一個(gè)消息系統(tǒng),與大多數(shù)的消息系統(tǒng)一樣,主要的特點(diǎn)如下:
? 使用推拉模型將生產(chǎn)者和消費(fèi)者分離
? 為消息傳遞系統(tǒng)中的消息數(shù)據(jù)提供持久性,以允許多個(gè)消費(fèi)者
? 提供高可用集群服務(wù),主從模式,同時(shí)支持橫向水平擴(kuò)展
tips:
與 ActiveMQ、RabbitMQ、RocketMQ 不同的地方在于,它有一個(gè)分區(qū)Partition的概念。
這個(gè)分區(qū)的意思就是說,如果你創(chuàng)建的topic有5個(gè)分區(qū),當(dāng)你一次性向 kafka 中推 1000 條數(shù)據(jù)時(shí),這 1000 條數(shù)據(jù)默認(rèn)會(huì)分配到 5 個(gè)分區(qū)中,其中每個(gè)分區(qū)存儲(chǔ) 200 條數(shù)據(jù)。
這樣做的目的,就是方便消費(fèi)者從不同的分區(qū)拉取數(shù)據(jù),假如你啟動(dòng) 5 個(gè)線程同時(shí)拉取數(shù)據(jù),每個(gè)線程拉取一個(gè)分區(qū),消費(fèi)速度會(huì)非常非???!
這是 kafka 與其他的消息系統(tǒng)最大的不同!
kafuka安裝:
1.安裝依賴: 【jdk+zookeeper】
#安裝jdk1.8
yum -y install java-1.8.0-openjdk
下載zookeeper,并解壓文件包
#在線下載zookeeper
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz
#解壓
tar -zxvf zookeeper-3.4.12.tar.gz
#創(chuàng)建數(shù)據(jù)和日志存放目錄
cd /usr/zookeeper/
mkdir data
mkdir log
#把conf下的zoo_sample.cfg備份一份,然后重命名為zoo.cfg
cd conf/
cp zoo_sample.cfg zoo.cfg
配置zookeeper
#編輯zoo.cfg文件
vim zoo.cfg
重新配置dataDir和dataLogDir的存儲(chǔ)路徑
最后,啟動(dòng) Zookeeper 服務(wù)
#進(jìn)入Zookeeper的bin目錄
cd zookeeper/zookeeper-3.4.12/bin
#啟動(dòng)Zookeeper
./zkServer.sh start
#查詢Zookeeper狀態(tài)
./zkServer.sh status
#關(guān)閉Zookeeper狀態(tài)
./zkServer.sh stop
2.正式安裝Kafuka
到官網(wǎng)http://kafka.apache.org/downloads.html下載想要的版本,我這里下載是最新穩(wěn)定版2.8.0。
#下載kafka 安裝包
wget https://apache.osuosl.org/kafka/2.8.0/kafka-2.8.0-src.tgz
#解壓文件包
tar -xvf kafka-2.8.0-src.tgz
按需修改配置文件server.properties(可選)
#進(jìn)入配置文件夾
cd kafka-2.8.0-src/config
#編輯server.properties
vim server.properties
server.properties文件內(nèi)容如下:
broker.id=0
listeners=PLAINTEXT://localhost:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
其中有四個(gè)重要的參數(shù):
? broker.id:唯一標(biāo)識(shí)ID
? listeners=PLAINTEXT://localhost:9092:kafka服務(wù)監(jiān)聽地址和端口
? log.dirs:日志存儲(chǔ)目錄
? zookeeper.connect:指定zookeeper服務(wù)地址
可根據(jù)自己需求修改對(duì)應(yīng)的配置!
啟動(dòng)kafuka
./kafka-server-start.sh -daemon ../config/server.properties
創(chuàng)建主題topic
./kafka-topics.sh --bootstrap-server localhost:9092 --create --topic heima --partitions 2 --replication-factor 1
結(jié)果:
tips:
topic創(chuàng)建失敗可能是因?yàn)椋?br> 在較新版本(2.2 及更高版本)的 Kafka 不再需要 ZooKeeper 連接字符串,即- -zookeeper localhost:2181。
使用 Kafka Broker的 --bootstrap-server localhost:9092來替代- -zookeeper localhost:2181。文章來源:http://www.zghlxwxcb.cn/news/detail-409931.html
可參考文章文章來源地址http://www.zghlxwxcb.cn/news/detail-409931.html
到了這里,關(guān)于消息中間件Kafuka學(xué)習(xí)——初次配置使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!