溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何實(shí)現(xiàn)Kafka的入門

發(fā)布時間:2022-01-14 18:01:28 來源:億速云 閱讀:138 作者:柒染 欄目:云計(jì)算

本篇文章給大家分享的是有關(guān)如何實(shí)現(xiàn)Kafka的入門,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、入門

1.    簡介

Kafka is a distributed, partitioned, replicated commit log service。它提供了類似于JMS的特性,但是在設(shè)計(jì)實(shí)現(xiàn)上完全不同,此外它并不是JMS規(guī)范的實(shí)現(xiàn)。kafka對消息保存時根據(jù)Topic進(jìn)行歸類,發(fā)送消息者成為Producer,消息接受者成為Consumer,此外kafka集群有多個kafka實(shí)例組成,每個實(shí)例(server)成為broker。無論是kafka集群,還是producer和consumer都依賴于zookeeper來保證系統(tǒng)可用性集群保存一些meta信息。

如何實(shí)現(xiàn)Kafka的入門

下面這張圖描述更準(zhǔn)確。

如何實(shí)現(xiàn)Kafka的入門

主要特性:

 1)消息持久化
要從大數(shù)據(jù)中獲取真正的價值,那么不能丟失任何信息。Apache Kafka設(shè)計(jì)上是時間復(fù)雜度O(1)的磁盤結(jié)構(gòu),它提供了常量時間的性能,即使是存儲海量的信息(TB級)。
2)高吞吐
記住大數(shù)據(jù),Kafka的設(shè)計(jì)是工作在標(biāo)準(zhǔn)硬件之上,支持每秒數(shù)百萬的消息。
3)分布式
Kafka明確支持在Kafka服務(wù)器上的消息分區(qū),以及在消費(fèi)機(jī)器集群上的分發(fā)消費(fèi),維護(hù)每個分區(qū)的排序語義。
4)多客戶端支持
Kafka系統(tǒng)支持與來自不同平臺(如java、.NET、PHP、Ruby或Python等)的客戶端相集成。
5)實(shí)時
生產(chǎn)者線程產(chǎn)生的消息對消費(fèi)者線程應(yīng)該立即可見,此特性對基于事件的系統(tǒng)(比如CEP系統(tǒng))是至關(guān)重要的。

2.    概念

Topics/logs

一個Topic可以認(rèn)為是一類消息,每個topic將被分成多個partition(區(qū)),每個partition在存儲層面是append log文件。任何發(fā)布到此partition的消息都會被直接追加到log文件的尾部,每條消息在文件中的位置稱為offset(偏移量),offset為一個long型數(shù)字,它是唯一標(biāo)記一條消息。它唯一的標(biāo)記一條消息。kafka并沒有提供其他額外的索引機(jī)制來存儲offset,因?yàn)樵趉afka中幾乎不允許對消息進(jìn)行“隨機(jī)讀寫”。

如何實(shí)現(xiàn)Kafka的入門

    kafka和JMS實(shí)現(xiàn)(activeMQ)不同的是:即使消息被消費(fèi),消息仍然不會被立即刪除.日志文件將會根據(jù)broker中的配置要求,保留一定的時間之后刪除;比如log文件保留2天,那么兩天后,文件會被清除,無論其中的消息是否被消費(fèi).kafka通過這種簡單的手段,來釋放磁盤空間,以及減少消息消費(fèi)之后對文件內(nèi)容改動的磁盤IO開支.

    對于consumer而言,它需要保存消費(fèi)消息的offset,對于offset的保存和使用,有consumer來控制;當(dāng)consumer正常消費(fèi)消息時,offset將會"線性"的向前驅(qū)動,即消息將依次順序被消費(fèi).事實(shí)上consumer可以使用任意順序消費(fèi)消息,它只需要將offset重置為任意值..(offset將會保存在zookeeper中,參見下文)

    kafka集群幾乎不需要維護(hù)任何consumer和producer狀態(tài)信息,這些信息有zookeeper保存;因此producer和consumer的客戶端實(shí)現(xiàn)非常輕量級,它們可以隨意離開,而不會對集群造成額外的影響.

    partitions的設(shè)計(jì)目的有多個.最根本原因是kafka基于文件存儲.通過分區(qū),可以將日志內(nèi)容分散到多個server上,來避免文件尺寸達(dá)到單機(jī)磁盤的上限,每個partiton都會被當(dāng)前server(kafka實(shí)例)保存;可以將一個topic切分多任意多個partitions,來消息保存/消費(fèi)的效率.此外越多的partitions意味著可以容納更多的consumer,有效提升并發(fā)消費(fèi)的能力.(具體原理參見下文).

Distribution

一個Topic的多個partitions,被分布在kafka集群中的多個server上;每個server(kafka實(shí)例)負(fù)責(zé)partitions中消息的讀寫操作;此外kafka還可以配置partitions需要備份的個數(shù)(replicas),每個partition將會被備份到多臺機(jī)器上,以提高可用性.

    基于replicated方案,那么就意味著需要對多個備份進(jìn)行調(diào)度;每個partition都有一個server為"leader";leader負(fù)責(zé)所有的讀寫操作,如果leader失效,那么將會有其他follower來接管(成為新的leader);follower只是單調(diào)的和leader跟進(jìn),同步消息即可..由此可見作為leader的server承載了全部的請求壓力,因此從集群的整體考慮,有多少個partitions就意味著有多少個"leader",kafka會將"leader"均衡的分散在每個實(shí)例上,來確保整體的性能穩(wěn)定.

Producers

    Producer將消息發(fā)布到指定的Topic中,同時Producer也能決定將此消息歸屬于哪個partition;比如基于"round-robin"方式或者通過其他的一些算法等.

Consumers

    本質(zhì)上kafka只支持Topic.每個consumer屬于一個consumer group;反過來說,每個group中可以有多個consumer.發(fā)送到Topic的消息,只會被訂閱此Topic的每個group中的一個consumer消費(fèi).

    如果所有的consumer都具有相同的group,這種情況和queue模式很像;消息將會在consumers之間負(fù)載均衡.

    如果所有的consumer都具有不同的group,那這就是"發(fā)布-訂閱";消息將會廣播給所有的消費(fèi)者.

    在kafka中,一個partition中的消息只會被group中的一個consumer消費(fèi);每個group中consumer消息消費(fèi)互相獨(dú)立;我們可以認(rèn)為一個group是一個"訂閱"者,一個Topic中的每個partions,只會被一個"訂閱者"中的一個consumer消費(fèi),不過一個consumer可以消費(fèi)多個partitions中的消息.kafka只能保證一個partition中的消息被某個consumer消費(fèi)時,消息是順序的.事實(shí)上,從Topic角度來說,消息仍不是有序的.

    kafka的設(shè)計(jì)原理決定,對于一個topic,同一個group中不能有多于partitions個數(shù)的consumer同時消費(fèi),否則將意味著某些consumer將無法得到消息.

Guarantees

    1) 發(fā)送到partitions中的消息將會按照它接收的順序追加到日志中

    2) 對于消費(fèi)者而言,它們消費(fèi)消息的順序和日志中消息順序一致.

    3) 如果Topic的"replication factor"為N,那么允許N-1個kafka實(shí)例失效.

3.    適用場景

1、Messaging

    對于一些常規(guī)的消息系統(tǒng),kafka是個不錯的選擇;partitons/replication和容錯,可以使kafka具有良好的擴(kuò)展性和性能優(yōu)勢.不過到目前為止,我們應(yīng)該很清楚認(rèn)識到,kafka并沒有提供JMS中的"事務(wù)性""消息傳輸擔(dān)保(消息確認(rèn)機(jī)制)""消息分組"等企業(yè)級特性;kafka只能使用作為"常規(guī)"的消息系統(tǒng),在一定程度上,尚未確保消息的發(fā)送與接收絕對可靠(比如,消息重發(fā),消息發(fā)送丟失等)

2、Websit activity tracking

    kafka可以作為"網(wǎng)站活性跟蹤"的最佳工具;可以將網(wǎng)頁/用戶操作等信息發(fā)送到kafka中.并實(shí)時監(jiān)控,或者離線統(tǒng)計(jì)分析等

3、Metrics

         Kafka通常被用于可操作的監(jiān)控?cái)?shù)據(jù)。這包括從分布式應(yīng)用程序來的聚合統(tǒng)計(jì)用來生產(chǎn)集中的運(yùn)營數(shù)據(jù)提要。

4、Log Aggregation

    kafka的特性決定它非常適合作為"日志收集中心";application可以將操作日志"批量""異步"的發(fā)送到kafka集群中,而不是保存在本地或者DB中;kafka可以批量提交消息/壓縮消息等,這對producer端而言,幾乎感覺不到性能的開支.此時consumer端可以使hadoop等其他系統(tǒng)化的存儲和分析系統(tǒng).

4.    命令

1.  啟動Server

Kafka 依賴 ZK 服務(wù)

nohup bin/kafka-server-start.sh config/server.properties &

2.  創(chuàng)建Topic

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic page_visits

3.  查看命令

bin/kafka-topics.sh --list --zookeeper localhost:2181

4.  發(fā)送消息

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic page_visits

5.  消費(fèi)消息

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic page_visits --from-beginning

6.  多 Broker 方式

bin/kafka-server-start.sh config/server-1.properties &

bin/kafka-server-start.sh config/server-2.properties &

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic visits

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic visits

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic visits

my message test1

my message test2

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic visits

7.  停止服務(wù)

pkill -9 -f config/server.properties

8.       刪除無用的topic

bin/kafka-run-class.sh kafka.admin.DeleteTopicCommand --topic visits --zookeeper sjxt-hd02:2181,sjxt-hd03:2181,sjxt-hd04:2181

beta in 0.8.1

bin/kafka-topics.sh --zookeeper zk_host:port --delete --topic my_topic_name

以上就是如何實(shí)現(xiàn)Kafka的入門,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI