国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

消息中間件(二)——kafka

這篇具有很好參考價(jià)值的文章主要介紹了消息中間件(二)——kafka。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Apache Kafka綜述

在大數(shù)據(jù)中,會使用到大量的數(shù)據(jù)。面對這些海量的數(shù)據(jù),我們一是需要做到能夠收集這些數(shù)據(jù),其次是要能夠分析和處理這些海量數(shù)據(jù)。在此過程中,需要一套消息系統(tǒng)。

Kafka專門為分布式高吞吐量系統(tǒng)設(shè)計(jì)。作為一個(gè)消息代理的替代品,Kafka往往做的比其他消息中間件做的更好。

與其他消息隊(duì)列產(chǎn)品相比,它主要有以下優(yōu)點(diǎn):

  • 吞吐量高
  • 內(nèi)置分區(qū)
  • 復(fù)制能力
  • 固有的容錯能力

因此,Kafka非常適合大規(guī)模的消息處理應(yīng)用。

什么是消息系統(tǒng)?

消息系統(tǒng)負(fù)責(zé)將數(shù)據(jù)從一個(gè)應(yīng)用傳遞到另一個(gè)應(yīng)用,應(yīng)用就可以專注于數(shù)據(jù),而不用擔(dān)心數(shù)據(jù)如何共享。分布式消息傳遞基于可靠消息隊(duì)列的概念。消息在客戶端應(yīng)用程序和消息傳遞系統(tǒng)之間異步排隊(duì)。
有兩種類型的消息模式可用:

  • 點(diǎn)對點(diǎn)模式
  • 訂閱-發(fā)布模式(pub-sub),也是最常用的一種消息模式
點(diǎn)對點(diǎn)消息類型

在點(diǎn)對點(diǎn)的消息傳遞類型中,所有的消息都保留在消息隊(duì)列中。一個(gè)或多個(gè)消費(fèi)者可以消耗隊(duì)列中的消息,但特定的消息只能有最多一個(gè)消費(fèi)者消費(fèi)。一旦消費(fèi)者消費(fèi)了隊(duì)列中的消息,該消息將會在消息隊(duì)列中消失。
點(diǎn)對點(diǎn)消息系統(tǒng)最典型的例子是訂單處理系統(tǒng),其中每個(gè)訂單將有由訂單處理器處理,但多個(gè)訂單處理器也可以同時(shí)工作。
消息中間件(二)——kafka,中間件,kafka,分布式

發(fā)布-訂閱消息類型

在發(fā)布-訂閱系統(tǒng)中,消息被保留在各個(gè)主題中。
與點(diǎn)對點(diǎn)系統(tǒng)不同的是,一個(gè)訂閱者可以訂閱一個(gè)或多個(gè)不同主題中的消息并使用這些主題中的所有消息。
在發(fā)布-訂閱系統(tǒng)中,消息的生產(chǎn)者稱為發(fā)布者,消息的使用者稱為訂閱者。
一個(gè)現(xiàn)實(shí)的例子是dish天線電視,它發(fā)布不同的渠道和主題,如運(yùn)動、音樂、電影等,任何人都可以訂閱自己需要的主題集,并接收到訂閱主題的消息。
消息中間件(二)——kafka,中間件,kafka,分布式

什么是Kafka?

Kafka is a distributed,partitioned,replicated commit logservice.

  1. Apache Kafka 是一個(gè)分布式發(fā)布 - 訂閱消息系統(tǒng)和一個(gè)強(qiáng)大的隊(duì)列,可以處理大量的數(shù)據(jù),并使你能夠?qū)⑾囊粋€(gè)端點(diǎn)傳遞到另一個(gè)端點(diǎn)。
  2. Kafka 適合離線和在線消息消費(fèi)。
  3. Kafka 消息保留在磁盤上,并在群集內(nèi)復(fù)制以防止數(shù)據(jù)丟失。
  4. Kafka 構(gòu)建在 ZooKeeper 同步服務(wù)之上。 它與 Apache Storm 和 Spark 非常好地集成,用于實(shí)時(shí)流式數(shù)據(jù)分析。
優(yōu)點(diǎn)
  • 可靠性
    Kafka是分布式、分區(qū)復(fù)制、可容錯的
  • 可擴(kuò)展性
    消息傳遞系統(tǒng)可以輕松擴(kuò)縮容,不用關(guān)機(jī)
  • 耐用性
    Kafka使用“分布式提交日志”,這意味著消息會盡可能快地保留在磁盤上,因此它是持久的。
  • 高性能
    Kafka無論是發(fā)布還是訂閱消息的吞吐量都是很高的。即使存儲了很多TB的消息,還是能夠保證高性能。

Kafka非常快,并且能保證零停機(jī)和零數(shù)據(jù)丟失

關(guān)鍵術(shù)語
  1. 生產(chǎn)者和消費(fèi)者:Productor & Customer
    在Kafka中,消息的發(fā)布者稱為生產(chǎn)者Productor,消息的接受和使用者稱為消費(fèi)者Customer
  2. broker:
    Kafka消息隊(duì)列集群中有很多臺server,每一臺server都可以存儲消息,這每一臺server都可以稱做是Kafka的一個(gè)實(shí)例,也稱為broker
  3. 主題:topic
    一個(gè)topic中會保存同一類的消息,相當(dāng)于對消息進(jìn)行分類。productor在向Custom發(fā)送消息的時(shí)候,需要指定topic,也就是制定了該消息屬于哪一分類。
  4. 分區(qū):partition
    每個(gè)topic都劃分為多個(gè)partition,每個(gè)partition在存儲層面都是一個(gè)append log文件。任何寫進(jìn)某partition的消息都會被追加在一個(gè)log文件的尾部。
    分區(qū)的意義:Kafka基于文件進(jìn)行存儲,當(dāng)文件內(nèi)容過大的時(shí)候,很容易達(dá)到單個(gè)磁盤的上限。使用分區(qū)進(jìn)行存儲,一個(gè)分區(qū)存儲一個(gè)文件,保證單個(gè)文件不會過大的情況下,還能將數(shù)據(jù)存在不同的broker = Kafka server上,從而實(shí)現(xiàn)了負(fù)載均衡,能夠承載更多的消費(fèi)者
  5. 偏移量:offset
    一個(gè)分區(qū)存儲一個(gè)文件,而消息在文件中的位置就稱為是偏移量offset,offset的字符類型為long長字符類型,它可以唯一標(biāo)記一條消息。由于Kafka并沒有提供額外的消息索引機(jī)制,因此文件只能順序讀寫,所以Kafka基本不允許對消息進(jìn)行“隨機(jī)讀寫”。

小結(jié)Kafka:

  • 是基于發(fā)布-訂閱分布式消息隊(duì)列
  • 面向大數(shù)據(jù),消息存儲在topic中,而每個(gè)topic會分為多個(gè)patition分區(qū);
  • 消息存儲在磁盤中,每個(gè)partition分區(qū)對應(yīng)一個(gè)磁盤上的一個(gè)文件來存儲消息,消息的寫入就是在log文件后追加內(nèi)容,文件可以在集群內(nèi)復(fù)制防止丟失;
  • 即使消息被消費(fèi),消息也不會立刻消失,可以通過配置以實(shí)現(xiàn)自動刪除來釋放空間
  • Kafka依賴分布式協(xié)調(diào)服務(wù)zookeeper,適合離線/在線消息的消費(fèi),與storm/spark等實(shí)時(shí)流式數(shù)據(jù)處理工具常常結(jié)合使用。
Kafka基本原理
  1. 分布式和分區(qū):distributed、partitioned
    Kafka是一個(gè)分布式的發(fā)布-訂閱消息隊(duì)列,主要體現(xiàn)在哪些方面?
    體現(xiàn)在大量的數(shù)據(jù)被保存在磁盤上,但單個(gè)磁盤的容量是有限的,于是消息被生產(chǎn)者生產(chǎn)的時(shí)候分為不同的topic主題來保存,每個(gè)topic又被分為多個(gè)partition分區(qū),而每個(gè)partition分區(qū)對應(yīng)一個(gè)文件,以文件的方式來保存消息數(shù)據(jù),每個(gè)文件又可以被保存在不同的broker上,這樣就實(shí)現(xiàn)了Kafka集群來分布式存儲消息隊(duì)列。
    另外,每個(gè)partition都有一定的副本,可以備份到不同的borker上,從而提高可用性。
    總的來說就是,一個(gè)topic對應(yīng)的多個(gè)partition上的文件分散保存在集群的多個(gè)不同broker上,存儲的方式是一個(gè)partition對應(yīng)一個(gè)文件,每個(gè)broker負(fù)責(zé)存儲在自己機(jī)器上的每個(gè)文件的讀寫。

  2. 副本:replicated
    Kafka可以通過配置指定partition的備份個(gè)數(shù)(replicas),每個(gè)partition將會被備份到多臺機(jī)器上,提高了可用性,備份數(shù)量通過配置文件可以指定。
    實(shí)質(zhì)上,冗余備份在分布式系統(tǒng)中很常見。
    有副本的存在,就會涉及到同一個(gè)文件的多個(gè)副本如何管理和調(diào)度
    Kafka設(shè)置了“l(fā)eader機(jī)制”,每個(gè)partition選舉一個(gè)broker作為leader,用來負(fù)責(zé)對該分區(qū)的讀寫,其余broker則作為follower,只需簡單地和leader同步即可。如果原來的leader失效,partition則會選舉新的broker成為leader。
    至于如何選取 leader,實(shí)際上如果我們了解 ZooKeeper,就會發(fā)現(xiàn)其實(shí)這正是 Zookeeper 所擅長的,Kafka 使用 ZK 在 Broker 中選出一個(gè) Controller,用于 Partition 分配和 Leader 選舉。
    實(shí)際上,作為leader的server,承擔(dān)了整個(gè)分區(qū)的所有讀寫請求,負(fù)擔(dān)是比較大的。從整體考慮,有多少個(gè)partition就有多少個(gè)leader,Kafka將leader分?jǐn)偟讲煌腷roker上,也算是整體上的一種負(fù)載均衡。

  3. Kafka數(shù)據(jù)流處理
    消息中間件(二)——kafka,中間件,kafka,分布式
    (1)數(shù)據(jù)產(chǎn)生方式:produce

生產(chǎn)者寫入消息數(shù)據(jù)可以指定4個(gè)參數(shù),分別為topic,partition,key,value。其中topic和value(要寫入的數(shù)據(jù))必須指定,而key和partition是可選的。
對于一條記錄,要先對其進(jìn)行序列化,再按照topic和partition,發(fā)送到對應(yīng)的隊(duì)列中去。如果沒有指定partition,有兩種情況:

  • 指定key,按照key進(jìn)行哈希,同一個(gè)key的消息進(jìn)一個(gè)partition

  • 未指定key, round-robin進(jìn)行partition的選擇
    producer將會和topic下的每個(gè)partiton leader保持socket連接,消息由producer直接發(fā)送給broker。
    其中partition leader的身份在zookeeper中已經(jīng)注冊,producer作為zookeeper client,已經(jīng)注冊了watch用來監(jiān)聽partition leader的變更事件,因此可以準(zhǔn)確知道leader是誰。
    producer端采用異步發(fā)送,先將一部分的消息存在客戶端的buffer里,并將其分批發(fā)送給broker,小數(shù)據(jù)io很多會增加整體網(wǎng)絡(luò)的延遲,批量延遲發(fā)送實(shí)際上是提供了網(wǎng)絡(luò)效率。
    (2)數(shù)據(jù)消費(fèi)過程:custome

  • 對于消費(fèi)者,不是以單獨(dú)形式存在的,每個(gè)消費(fèi)者都屬于一個(gè)消費(fèi)群租customer group,一個(gè)group包含多個(gè)consumer。需要注意的是,消費(fèi)者的訂閱topic行為都是以customer group的形式來訂閱的,發(fā)送到topic的消息,只會被訂閱該topic的每個(gè)group中的每個(gè)customer消費(fèi)。

  • 如果說所有的customer都有共同的group,那么就像是一個(gè)點(diǎn)對點(diǎn)的消息系統(tǒng);如果每個(gè)消費(fèi)者都屬于不同的group,那么消息會廣播給所有的消費(fèi)者。

  • 實(shí)際上消息是根據(jù)partition來分的,一個(gè)partition只能被消費(fèi)組里的一個(gè)消費(fèi)者消費(fèi),但是可以多個(gè)不同的消費(fèi)組消費(fèi),消費(fèi)組里的每個(gè)消費(fèi)者是關(guān)聯(lián)到一個(gè)partition的;因此有一個(gè)說法:對同一個(gè)topic,同一個(gè)group中不能有多于partitions個(gè)數(shù)的customer同時(shí)消費(fèi),否則某些customer將無法得到消息。

  • 同一個(gè)消費(fèi)組的兩個(gè)customer不能同時(shí)消費(fèi)一個(gè)partition

  • partition 中的消息只有一個(gè) consumer 在消費(fèi),且不存在消息狀態(tài)的控制,也沒有復(fù)雜的消息確認(rèn)機(jī)制,可見katka broker 端是相當(dāng)輕量級的。當(dāng)消息被 consumer 接收之后,需要保存 Offset 記錄消費(fèi)到哪,以前保存在ZK中,由于 ZK 的寫性能不好,以前的解決方法都是Consumer 每隔一分鐘上報(bào)一次,在0.10 版本后,Kafka 把這個(gè)Offset 的保存,從ZK 中剝離,保存在一個(gè)名叫 consumeroffsets topic 的Topic 中,由此可見consumer 客戶端也很輕量級

用例

Kafka可以在很多場景中使用,以下列出一些用例:文章來源地址http://www.zghlxwxcb.cn/news/detail-729780.html

  • 指標(biāo)
    Kafka通常用于操作監(jiān)控?cái)?shù)據(jù)。這涉及到聚合來自分布式應(yīng)用程序的統(tǒng)計(jì)信息,以產(chǎn)生操作數(shù)據(jù)的集中饋送。
  • 日志聚合解決方案
    可用于跨組織收集多個(gè)服務(wù)的日志,且以標(biāo)準(zhǔn)格式提供給多個(gè)服務(wù)器。
  • 流處理
    流行的框架(如Storm和Spark Streaming)從主題中讀取數(shù)據(jù),對其進(jìn)行處理,并將處理后的數(shù)據(jù)寫入新主題,供用戶和應(yīng)用程序使用。 Kafka的強(qiáng)耐久性在流處理的上下文中也非常有用。

到了這里,關(guān)于消息中間件(二)——kafka的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微服務(wù)中間件-分布式緩存Redis

    微服務(wù)中間件-分布式緩存Redis

    – 基于Redis集群解決單機(jī)Redis存在的問題 單機(jī)的Redis存在四大問題: 1.數(shù)據(jù)丟失問題: Redis是內(nèi)存存儲,服務(wù)重啟可能會丟失數(shù)據(jù) 2.并發(fā)能力問題: 單節(jié)點(diǎn)Redis并發(fā)能力雖然不錯,但也無法滿足如618這樣的高并發(fā)場景 3.故障恢復(fù)問題: 如果Redis宕機(jī),則服務(wù)不可用,需要一種自動

    2024年02月12日
    瀏覽(21)
  • 微服務(wù)中間件--分布式搜索ES

    微服務(wù)中間件--分布式搜索ES

    elasticsearch是一款非常強(qiáng)大的開源搜索引擎,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容。 elasticsearch結(jié)合kibana、Logstash、Beats,也就是elastic stack(ELK)。被廣泛應(yīng)用在日志數(shù)據(jù)分析、實(shí)時(shí)監(jiān)控等領(lǐng)域。 elasticsearch是elastic stack的核心,負(fù)責(zé)存儲、搜索、分析數(shù)據(jù)。 正向索引

    2024年02月11日
    瀏覽(21)
  • Springcloud中間件-----分布式搜索引擎 Elasticsearch

    Springcloud中間件-----分布式搜索引擎 Elasticsearch

    該筆記是根據(jù)黑馬程序員的課來自己寫了一遍的,b站有對應(yīng)教程和資料 第一部分 第二部分 第三部分 預(yù)計(jì)看完跟著練習(xí)5小時(shí)足夠 1.1.1.elasticsearch的作用 elasticsearch是一款非常強(qiáng)大的開源搜索引擎,具備非常多強(qiáng)大功能,可以幫助我們從海量數(shù)據(jù)中快速找到需要的內(nèi)容 例如:

    2024年02月08日
    瀏覽(136)
  • 在CSDN學(xué)Golang分布式中間件(ElasticSearch)

    倒排索引是一種用于快速查找文本中特定單詞或短語的數(shù)據(jù)結(jié)構(gòu)。它將文本中的每個(gè)單詞或短語與包含該單詞或短語的文檔列表相關(guān)聯(lián)。這使得可以輕松地查找包含給定單詞或短語的所有文檔。 在 Go 中,可以使用 map 和 slice 來實(shí)現(xiàn)倒排索引。具體來說,可以使用一個(gè) map 將每

    2024年02月15日
    瀏覽(26)
  • ShardingSphere:強(qiáng)大的分布式數(shù)據(jù)庫中間件【圖文】

    ShardingSphere:強(qiáng)大的分布式數(shù)據(jù)庫中間件【圖文】

    Sharding-JDBC :它提供了一個(gè)輕量級的 Java 框架,在 Java 的 JDBC 層提供額外的服務(wù)。使用客戶端直連數(shù)據(jù)庫,以 jar 包形式提供服務(wù),無需額外部署和依賴,可理解為增強(qiáng)版的 JDBC 驅(qū)動,完全兼容 JDBC 和各種 ORM 框架。Sharding-JDBC主要用于嵌入到應(yīng)用程序中,使應(yīng)用程序能夠透明地

    2024年04月28日
    瀏覽(23)
  • XXL-JOB中間件【實(shí)現(xiàn)分布式任務(wù)調(diào)度】

    XXL-JOB中間件【實(shí)現(xiàn)分布式任務(wù)調(diào)度】

    目錄 1:XXL-JOB介紹 2:搭建XXL-JOB 2.1:調(diào)度中心 2.2:執(zhí)行器 2.3:執(zhí)行任務(wù) 3:分片廣播 XXL-JOB是一個(gè)輕量級分布式任務(wù)調(diào)度平臺,其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級、易擴(kuò)展。現(xiàn)已開放源代碼并接入多家公司線上產(chǎn)品線,開箱即用。 官網(wǎng):https://www.xuxueli.com/xxl-

    2024年02月03日
    瀏覽(20)
  • 第5章 分布式緩存中間件的配置及其調(diào)用定義

    1 分布式緩存中間件的配置定義 1.1 Core.Configuration. CacheConfig namespace Core . Configuration { ? ? /// summary ? ? /// 【緩存配置 -- 類】 ? ? /// remarks ? ? /// 摘要: ? ? /// ? ? 通過該類中的屬性成員實(shí)例對 “appsettings.json” 文件中的 1 個(gè)指定緩存項(xiàng) ( 鍵 / 值對 ) 在內(nèi)存或指定分布式軟

    2024年02月03日
    瀏覽(25)
  • 中間件系列 - Redis入門到實(shí)戰(zhàn)(高級篇-分布式緩存)

    中間件系列 - Redis入門到實(shí)戰(zhàn)(高級篇-分布式緩存)

    學(xué)習(xí)視頻: 黑馬程序員Redis入門到實(shí)戰(zhàn)教程,深度透析redis底層原理+redis分布式鎖+企業(yè)解決方案+黑馬點(diǎn)評實(shí)戰(zhàn)項(xiàng)目 中間件系列 - Redis入門到實(shí)戰(zhàn) 本內(nèi)容僅用于個(gè)人學(xué)習(xí)筆記,如有侵?jǐn)_,聯(lián)系刪除 學(xué)習(xí)目標(biāo) Redis持久化 Redis主從 Redis哨兵 Redis分片集群 - 基于Redis集群解決單機(jī)R

    2024年02月03日
    瀏覽(23)
  • 《分布式中間件技術(shù)實(shí)戰(zhàn):Java版》學(xué)習(xí)筆記(一):搶紅包

    《分布式中間件技術(shù)實(shí)戰(zhàn):Java版》學(xué)習(xí)筆記(一):搶紅包

    數(shù)據(jù)庫建表 (1)red_send_record 記錄用戶發(fā)送了若干總金額的若干個(gè)紅包。 (2)red_detail 記錄用戶發(fā)送的紅包被分成的小紅包金額。 (3)red_rob_record 記錄用戶搶到的紅包金額。 隨機(jī)生成紅包金額 紅包金額的最小單位是分,將紅包金額放大100倍到int類型(為了方便生成隨機(jī)數(shù)),保證

    2024年02月10日
    瀏覽(22)
  • 【送書福利-第七期】《分布式中間件核心原理與RocketMQ最佳實(shí)踐》

    【送書福利-第七期】《分布式中間件核心原理與RocketMQ最佳實(shí)踐》

    大家好,我是洲洲,歡迎關(guān)注,一個(gè)愛聽周杰倫的程序員。關(guān)注公眾號【程序員洲洲】即可獲得10G學(xué)習(xí)資料、面試筆記、大廠獨(dú)家學(xué)習(xí)體系路線等…還可以加入技術(shù)交流群歡迎大家在CSDN后臺私信我! 分布式中間件核心原理與RocketMQ實(shí)戰(zhàn)技術(shù)一本通:實(shí)戰(zhàn)案例+操作步驟+執(zhí)行效

    2024年02月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包