Kafka從搭建到使用
kafka簡介
Kafka是一款流行分布式消息分布訂閱系統(tǒng)衰絮,除Kafka之外還有MQ练俐、Redis等沸久。我們可以把消息隊(duì)列視為一個(gè)管道季眷,管道的兩端分別是消息生產(chǎn)者(producer)和消息消費(fèi)者(consumer),消息生產(chǎn)者產(chǎn)生日志等消息后可以發(fā)送到管道中卷胯,這時(shí)消息隊(duì)列可以駐留在內(nèi)存或者磁盤上子刮,直到消費(fèi)者來把它讀走為止。
上述就是Kafka的一個(gè)概括窑睁,我們只需要了解一下Kafka的架構(gòu)和一些專業(yè)術(shù)語即可挺峡,下面就來介紹一下Kafka 中一些專業(yè)術(shù)語。
Producer:消息生產(chǎn)者担钮,負(fù)責(zé)把產(chǎn)生的消息發(fā)送到Kafka服務(wù)器上橱赠。
Consumer:消息消費(fèi)者,從Kafka服務(wù)器讀取消息箫津。
Consumer Group:消費(fèi)者群組狭姨,每個(gè)消息消費(fèi)者可以劃分為一個(gè)特定的群組。
Topic:這是Kafka使用中非常重要的一個(gè)術(shù)語苏遥,它相當(dāng)于消息的"身份標(biāo)識(shí)"饼拍,消息生產(chǎn)者產(chǎn)生消息時(shí)會(huì)給它貼上一個(gè)Topic標(biāo)簽,當(dāng)消息消費(fèi)者需要讀取消息時(shí)田炭,可以根據(jù)這個(gè)Topic讀取特定的數(shù)據(jù)师抄。
Broker:Kafka集群中包含的服務(wù)器。
kafka配置
然后解壓并且進(jìn)入kafka的路徑下
tar xzf kafka_2.13-3.2.0.tgz
cd kafka_2.13-3.2.0
這里需要簡單的介紹一下ZooKeeper教硫,它是一個(gè)開源的分布式協(xié)調(diào)框架司澎,它可以將那些容易出錯(cuò)的分布式一致性服務(wù)封裝起來欺缘,構(gòu)成一個(gè)高效、可靠挤安、簡單易用的結(jié)構(gòu)提供給用戶使用谚殊。
之所以提到ZooKeeper是因?yàn)镵afka就是使用ZooKeeper作為協(xié)調(diào)框架,因?yàn)榍懊嫦螺d的壓縮包中已經(jīng)包含了ZooKeeper蛤铜,因此不需要在單獨(dú)去下載它的安裝包嫩絮。
bin/zookeeper-server-start.sh config/zookeeper.properties
啟動(dòng)ZooKeeper服務(wù)之后再啟動(dòng)Kafka服務(wù),
bin/kafka-server-start.sh config/server.properties
需要強(qiáng)調(diào)一下围肥,config/server.properties
是Kafka的配置文件剿干,可以用于配置監(jiān)聽的host、port穆刻、broker等置尔。
默認(rèn)的ZooKeeper連接服務(wù)為localhost:2181,
# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=localhost:2181
另外氢伟,producer和consumer的監(jiān)聽端口為9092榜轿,如果需要更改server的host和port端口可以通過修改config/server.properties進(jìn)行配置。
Kafka使用
命令行
命令行的使用方式相對簡單朵锣,通過前面的Kafka配置之后可以直接在命令行下進(jìn)行使用谬盐。
1. 創(chuàng)建Topic
使用Kafka,我們首先需要?jiǎng)?chuàng)建一個(gè)Topic诚些,這樣后續(xù)消息生產(chǎn)者和消息消費(fèi)者才能針對性的發(fā)送和消費(fèi)數(shù)據(jù)飞傀,
> bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test(創(chuàng)建的topic名稱)
這樣我們就創(chuàng)建了一個(gè)名為test的Topic。
我們也可以通過命令來查看我們已經(jīng)創(chuàng)建的 Topic诬烹,
> bin/kafka-topics.sh --list --bootstrap-server localhost:9092
2. 發(fā)送消息
前面介紹Kafka專業(yè)術(shù)語中已經(jīng)闡述砸烦,Kafka使用過程中首先需要消息生產(chǎn)者發(fā)送消息,那么消費(fèi)者才可以讀取到消息绞吁。
啟動(dòng)一個(gè)終端A外冀,執(zhí)行下面命令,
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>hello world
>
當(dāng)執(zhí)行producer腳本后掀泳,會(huì)出現(xiàn)消息輸入提示符,這是我們可以輸入消息(數(shù)據(jù))西轩,然后它會(huì)發(fā)送到對應(yīng)的服務(wù)器(Broker)员舵。
3. 消費(fèi)消息
現(xiàn)在管道中已經(jīng)有了數(shù)據(jù),接下來我就可以使用消費(fèi)者去讀取數(shù)據(jù)藕畔。
另外啟動(dòng)一個(gè)終端B马僻,執(zhí)行下面命令,
> bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
hello world
可以看到注服,消息消費(fèi)者一直處于監(jiān)聽狀態(tài)韭邓,每當(dāng)在終端A輸入一條消息措近,終端B也會(huì)更新一條消息。