中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

如何解析分布式消息系統Kafka

發布時間:2021-11-22 17:55:37 來源:億速云 閱讀:137 作者:柒染 欄目:大數據

如何解析分布式消息系統Kafka,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

Kafka是分布式發布-訂閱消息系統。它最初由LinkedIn公司開發,之后成為Apache項目的一部分。Kafka是一個分布式的,可劃分的,冗余備份的持久性的日志服務。它主要用于處理活躍的流式數據。

在大數據系統中,常常會碰到一個問題,整個大數據是由各個子系統組成,數據需要在各個子系統中高性能,低延遲的不停流轉。傳統的企業消息系統并不是非常適合大規模的數據處理。為了已在同時搞定在線應用(消息)和離線應用(數據文件,日志)Kafka就出現了。Kafka可以起到兩個作用:

  1. 1.降低系統組網復雜度。

  2. 2.降低編程復雜度,各個子系統不在是相互協商接口,各個子系統類似插口插在插座上,Kafka承擔高速數據總線的作用。

Kafka主要特點:

  1. 1.同時為發布和訂閱提供高吞吐量。據了解,Kafka每秒可以生產約25萬消息(50 MB),每秒處理55萬消息(110 MB)。

  2. 2.可進行持久化操作。將消息持久化到磁盤,因此可用于批量消費,例如ETL,以及實時應用程序。通過將數據持久化到硬盤以及replication防止數據丟失。

  3. 3.分布式系統,易于向外擴展。所有的producer、broker和consumer都會有多個,均為分布式的。無需停機即可擴展機器。

  4. 4.消息被處理的狀態是在consumer端維護,而不是由server端維護。當失敗時能自動平衡。

  5. 5.支持online和offline的場景。

Kafka的架構:

如何解析分布式消息系統KafkaKafka的整體架構非常簡單,是顯式分布式架構,producer、broker(kafka)和consumer都可以有多個。Producer,consumer實現Kafka注冊的接口,數據從producer發送到broker,broker承擔一個中間緩存和分發的作用。broker分發注冊到系統中的consumer。broker的作用類似于緩存,即活躍的數據和離線處理系統之間的緩存。客戶端和服務器端的通信,是基于簡單,高性能,且與編程語言無關的TCP協議。幾個基本概念:

  1. 1.Topic:特指Kafka處理的消息源(feeds of messages)的不同分類。

  2. 2.Partition:Topic物理上的分組,一個topic可以分為多個partition,每個partition是一個有序的隊列。partition中的每條消息都會被分配一個有序的id(offset)。

    3.Message:消息,是通信的基本單位,每個producer可以向一個topic(主題)發布一些消息。

  3. 4.Producers:消息和數據生產者,向Kafka的一個topic發布消息的過程叫做producers。

  4. 5.Consumers:消息和數據消費者,訂閱topics并處理其發布的消息的過程叫做consumers。

  5. 6.Broker:緩存代理,Kafka集群中的一臺或多臺服務器統稱為broker。

消息發送的流程:

如何解析分布式消息系統Kafka

  1. 1.Producer根據指定的partition方法(round-robin、hash等),將消息發布到指定topic的partition里面

  2. 2.kafka集群接收到Producer發過來的消息后,將其持久化到硬盤,并保留消息指定時長(可配置),而不關注消息是否被消費。

  3. 3.Consumer從kafka集群pull數據,并控制獲取消息的offset

Kayka的設計:

1、吞吐量

高吞吐是kafka需要實現的核心目標之一,為此kafka做了以下一些設計:

  1. 1.數據磁盤持久化:消息不在內存中cache,直接寫入到磁盤,充分利用磁盤的順序讀寫性能

  2. 2.zero-copy:減少IO操作步驟

  3. 3.數據批量發送

  4. 4.數據壓縮

  5. 5.Topic劃分為多個partition,提高parallelism

2、負載均衡

  1. 1.producer根據用戶指定的算法,將消息發送到指定的partition

  2. 2.存在多個partiiton,每個partition有自己的replica,每個replica分布在不同的Broker節點上

  3. 3.多個partition需要選取出lead partition,lead partition負責讀寫,并由zookeeper負責fail over

  4. 4.通過zookeeper管理broker與consumer的動態加入與離開

3、拉取系統

由于kafka broker會持久化數據,broker沒有內存壓力,因此,consumer非常適合采取pull的方式消費數據,具有以下幾點好處:

  1. 1.簡化kafka設計

  2. 2.consumer根據消費能力自主控制消息拉取速度

  3. 3.consumer根據自身情況自主選擇消費模式,例如批量,重復消費,從尾端開始消費等

4、可擴展性

當需要增加broker結點時,新增的broker會向zookeeper注冊,而producer及consumer會根據注冊在zookeeper上的watcher感知這些變化,并及時作出調整。

Kafka的應用場景:

1、消息隊列

比起大多數的消息系統來說,Kafka有更好的吞吐量,內置的分區,冗余及容錯性,這讓Kafka成為了一個很好的大規模消息處理應用的解決方案。消息系統一般吞吐量相對較低,但是需要更小的端到端延時,并嘗嘗依賴于Kafka提供的強大的持久性保障。在這個領域,Kafka足以媲美傳統消息系統,如ActiveMR或RabbitMQ。

2、行為跟蹤

Kafka的另一個應用場景是跟蹤用戶瀏覽頁面、搜索及其他行為,以發布-訂閱的模式實時記錄到對應的topic里。那么這些結果被訂閱者拿到后,就可以做進一步的實時處理,或實時監控,或放到hadoop/離線數據倉庫里處理。

3、元信息監控

作為操作記錄的監控模塊來使用,即匯集記錄一些操作信息,可以理解為運維性質的數據監控吧。

4、日志收集

日志收集方面,其實開源產品有很多,包括Scribe、Apache Flume。很多人使用Kafka代替日志聚合(log aggregation)。日志聚合一般來說是從服務器上收集日志文件,然后放到一個集中的位置(文件服務器或HDFS)進行處理。然而Kafka忽略掉文件的細節,將其更清晰地抽象成一個個日志或事件的消息流。這就讓Kafka處理過程延遲更低,更容易支持多數據源和分布式數據處理。比起以日志為中心的系統比如Scribe或者Flume來說,Kafka提供同樣高效的性能和因為復制導致的更高的耐用性保證,以及更低的端到端延遲。

5、流處理 

這個場景可能比較多,也很好理解。保存收集流數據,以提供之后對接的Storm或其他流式計算框架進行處理。很多用戶會將那些從原始topic來的數據進行階段性處理,匯總,擴充或者以其他的方式轉換到新的topic下再繼續后面的處理。例如一個文章推薦的處理流程,可能是先從RSS數據源中抓取文章的內容,然后將其丟入一個叫做“文章”的topic中;后續操作可能是需要對這個內容進行清理,比如回復正常數據或者刪除重復數據,最后再將內容匹配的結果返還給用戶。這就在一個獨立的topic之外,產生了一系列的實時數據處理的流程。Strom和Samza是非常著名的實現這種類型數據轉換的框架。

6、事件源

事件源是一種應用程序設計的方式,該方式的狀態轉移被記錄為按時間順序排序的記錄序列。Kafka可以存儲大量的日志數據,這使得它成為一個對這種方式的應用來說絕佳的后臺。比如動態匯總(News feed)。

7、持久性日志(commit log)

Kafka可以為一種外部的持久性日志的分布式系統提供服務。這種日志可以在節點間備份數據,并為故障節點數據回復提供一種重新同步的機制。Kafka中日志壓縮功能為這種用法提供了條件。在這種用法中,Kafka類似于Apache BookKeeper項目。

Kafka的設計要點:

1、直接使用linux 文件系統的cache,來高效緩存數據。

2、采用linux Zero-Copy提高發送性能。傳統的數據發送需要發送4次上下文切換,采用sendfile系統調用之后,數據直接在內核態交換,系統上下文切換減少為2次。根據測試結果,可以提高60%的數據發送性能。Zero-Copy詳細的技術細節可以參考:https://www.ibm.com/developerworks/linux/library/j-zerocopy/

3、數據在磁盤上存取代價為O(1)。kafka以topic來進行消息管理,每個topic包含多個part(ition),每個part對應一個邏輯log,有多個segment組成。每個segment中存儲多條消息(見下圖),消息id由其邏輯位置決定,即從消息id可直接定位到消息的存儲位置,避免id到位置的額外映射。每個part在內存中對應一個index,記錄每個segment中的第一條消息偏移。發布者發到某個topic的消息會被均勻的分布到多個part上(隨機或根據用戶指定的回調函數進行分布),broker收到發布消息往對應part的最后一個segment上添加該消息,當某個segment上的消息條數達到配置值或消息發布時間超過閾值時,segment上的消息會被flush到磁盤,只有flush到磁盤上的消息訂閱者才能訂閱到,segment達到一定的大小后將不會再往該segment寫數據,broker會創建新的segment。

4、顯式分布式,即所有的producer、broker和consumer都會有多個,均為分布式的。Producer和broker之間沒有負載均衡機制。broker和consumer之間利用zookeeper進行負載均衡。所有broker和consumer都會在zookeeper中進行注冊,且zookeeper會保存他們的一些元數據信息。如果某個broker和consumer發生了變化,所有其他的broker和consumer都會得到通知。

關于如何解析分布式消息系統Kafka問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金沙县| 和政县| 德安县| 龙胜| 札达县| 临泽县| 罗山县| 泸溪县| 临猗县| 新民市| 都匀市| 呼玛县| 大悟县| 迁西县| 荣成市| 体育| 原阳县| 景东| 武乡县| 南康市| 澄迈县| 翼城县| 固阳县| 建瓯市| 社旗县| 乐业县| 宝兴县| 页游| 刚察县| 米林县| 静宁县| 马山县| 廉江市| 临安市| 原平市| 禄丰县| 福泉市| 金坛市| 保山市| 石城县| 毕节市|