<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一文讀懂什么是分布式流處理系統Kafka

馬哥Linux運維 ? 2017-12-12 09:14 ? 次閱讀

什么是Kafka

Kafka是一個分布式流處理系統,流處理系統使它可以像消息隊列一樣publish或者subscribe消息,分布式提供了容錯性,并發處理消息的機制。

Kafka的基本概念

kafka運行在集群上,集群包含一個或多個服務器。kafka把消息存在topic中,每一條消息包含鍵值(key),值(value)和時間戳(timestamp)。

kafka有以下一些基本概念:

Producer - 消息生產者,就是向kafka broker發消息的客戶端。

Consumer - 消息消費者,是消息的使用方,負責消費Kafka服務器上的消息。

Topic - 主題,由用戶定義并配置在Kafka服務器,用于建立Producer和Consumer之間的訂閱關系。生產者發送消息到指定的Topic下,消息者從這個Topic下消費消息。

Partition - 消息分區,一個topic可以分為多個 partition,每個partition是一個有序的隊列。partition中的每條消息都會被分配一個有序的id(offset)。

Broker - 一臺kafka服務器就是一個broker。一個集群由多個broker組成。一個broker可以容納多個topic。

Consumer Group - 消費者分組,用于歸組同類消費者。每個consumer屬于一個特定的consumer group,多個消費者可以共同消息一個Topic下的消息,每個消費者消費其中的部分消息,這些消費者就組成了一個分組,擁有同一個分組名稱,通常也被稱為消費者集群。

Offset - 消息在partition中的偏移量。每一條消息在partition都有唯一的偏移量,消息者可以指定偏移量來指定要消費的消息。

Kafka分布式架構

如上圖所示,kafka將topic中的消息存在不同的partition中。如果存在鍵值(key),消息按照鍵值(key)做分類存在不同的partiition中,如果不存在鍵值(key),消息按照輪詢(Round Robin)機制存在不同的partition中。默認情況下,鍵值(key)決定了一條消息會被存在哪個partition中。

partition中的消息序列是有序的消息序列。kafka在partition使用偏移量(offset)來指定消息的位置。一個topic的一個partition只能被一個consumer group中的一個consumer消費,多個consumer消費同一個partition中的數據是不允許的,但是一個consumer可以消費多個partition中的數據。

kafka將partition的數據復制到不同的broker,提供了partition數據的備份。每一個partition都有一個broker作為leader,若干個broker作為follower。所有的數據讀寫都通過leader所在的服務器進行,并且leader在不同broker之間復制數據。

上圖中,對于Partition 0,broker 1是它的leader,broker 2和broker 3是follower。對于Partition 1,broker 2是它的leader,broker 1和broker 3是follower。

在上圖中,當有Client(也就是Producer)要寫入數據到Partition 0時,會寫入到leader Broker 1,Broker 1再將數據復制到follower Broker 2和Broker 3。

在上圖中,Client向Partition 1中寫入數據時,會寫入到Broker 2,因為Broker 2是Partition 1的Leader,然后Broker 2再將數據復制到follower Broker 1和Broker 3中。

上圖中的topic一共有3個partition,對每個partition的讀寫都由不同的broker處理,因此總的吞吐量得到了提升。

實驗一:kafka-python實現生產者消費者

kafka-python是一個python的Kafka客戶端,可以用來向kafka的topic發送消息、消費消息。

這個實驗會實現一個producer和一個consumer,producer向kafka發送消息,consumer從topic中消費消息。結構如下圖

producer代碼

consumer代碼

接下來創建test topic

打開兩個窗口中,我們在window1中運行producer,如下

在window2中運行consumer,如下

可以看到window2中的consumer成功的讀到了producer寫入的數據

實驗二:消費組實現容錯性機制

這個實驗將展示消費組的容錯性的特點。這個實驗中將創建一個有2個partition的topic,和2個consumer,這2個consumer共同消費同一個topic中的數據。結構如下所示

producer部分代碼和實驗一相同,這里不再重復。consumer需要指定所屬的consumer group,代碼如下

接下來我們創建topic,名字test,設置partition數量為2

打開三個窗口,一個窗口運行producer,還有兩個窗口運行consumer。

運行consumer的兩個窗口的輸出如下:

可以看到兩個consumer同時運行的情況下,它們分別消費不同partition中的數據。window1中的consumer消費partition 0中的數據,window2中的consumer消費parition 1中的數據。

我們嘗試關閉window1中的consumer,可以看到如下結果

剛開始window2中的consumer只消費partition1中的數據,當window1中的consumer退出后,window2中的consumer中也開始消費partition 0中的數據了。

實驗三:offset管理

kafka允許consumer將當前消費的消息的offset提交到kafka中,這樣如果consumer因異常退出后,下次啟動仍然可以從上次記錄的offset開始向后繼續消費消息。

這個實驗的結構和實驗一的結構是一樣的,使用一個producer,一個consumer,test topic的partition數量設為1。

producer的代碼和實驗一中的一樣,這里不再重復。consumer的代碼稍作修改,這里consumer中打印出下一個要被消費的消息的offset。consumer代碼如下

在一個窗口中啟動producer,在另一個窗口并且啟動consumer。consumer的輸出如下

可以嘗試退出consumer,再啟動consumer。每一次重新啟動,consumer都是從offset=98的消息開始消費的。

修改consumer的代碼如下,在consumer消費每一條消息后將offset提交回kafka

啟動consumer

可以看到consumer從offset=98的消息開始消費,到offset=829時,我們Ctrl+C退出consumer。

我們再次啟動consumer

可以看到重新啟動后,consumer從上一次記錄的offset開始繼續消費消息。之后每一次consumer重新啟動,consumer都會從上一次停止的地方繼續開始消費。

本文主要介紹了一下kafka的基本概念,并結合一些實驗幫助理解kafka中的一些難點,如多個consumer的容錯性機制,offset管理。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • python
    +關注

    關注

    52

    文章

    4700

    瀏覽量

    83643
  • kafka
    +關注

    關注

    0

    文章

    49

    瀏覽量

    5174

原文標題:Python操作分布式流處理系統Kafka

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    分布式軟件系統

    。 分布式程序設計語言用于編寫運行于分布式計算機系統上的分布式程序。分布式程序由若干個可以獨立執行的程序模塊組成,它們
    發表于 07-22 14:53

    分布式控制系統

    和集中控制的自動控制系統。分布式控制系統采用微處理機分別控制各個回路,而用中小型工業控制計算機或高性能的微處理機實施上級的控制。各回路之間
    發表于 03-01 22:19

    LED分布式原理

    本帖最后由 eehome 于 2013-1-5 09:49 編輯 1. 分布式技術分布式就是:在各并聯支路點均設立獨立恒流源,從而管理、維持、控制支路與整體線路穩定。在使
    發表于 03-09 16:47

    分布式聲波傳感系統DAS

    發生干涉,干涉光反射回來以后,反向散射的干涉光回到信號處理裝置,同時將光纖沿線振動聲波信號帶來信號處理裝置。由于光速保持不變,因此可得到每米光纖的聲波振動的測量結果。3、分布式光纖聲波傳感系統
    發表于 11-09 11:48

    如何設計分布式干擾系統?

    什么是分布式干擾系統?分布式干擾系統種綜合化、體化、小型化、網絡化和智能化
    發表于 08-08 06:57

    如何利用FPGA設計無線分布式采集系統?

    的選擇無線分布式采集來進行?,F有的無線分布式采集系統中,往往使用單片機、DSP等作為系統的主控控制單元。但是由于其自身工作特點,往往對于精確的定時控制以及并行
    發表于 10-14 07:10

    讀懂分布式架構知識體系(內含超全核心知識大圖)

    和修改的能力,隔離性可以防止多個事務并發執行時,由于交叉執行而導致數據的不致;Durabilit:事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。分布式
    發表于 10-23 10:02

    分布式處理器的效率怎么提高?

    3和PSoC 5架構的分布式處理技術示例,該架構由個主CPU(在本例中為8051或ARM Cortex M3)、個DMA引擎、以及通用數字模塊(UDB)陣列構成。UDB可高效用作
    發表于 11-07 07:01

    分布式系統的優勢是什么?

    當討論分布式系統時,我們面臨許多以下這些形容詞所描述的 同類型: 分布式的、刪絡的、并行的、并發的和分散的。分布式處理
    發表于 03-31 09:01

    分布式的優缺點是什么?

     分布式技術就是在需要恒的節點上串接,低壓差線性恒驅動器。低壓差很重要,關系到產品驅動效率。做到恒驅動有很多種,其中低壓差線性恒
    發表于 04-01 09:03

    HarmonyOS鴻蒙操作系統之什么是“基于微內核的全場景分布式操作系統”?

    分布式:這個要提它對應的個詞來看,就是集中式;分布式是負責處理系統資源和控制程序運行。它與集中式操作系統的區別在于資源管理、進程通信和
    發表于 09-23 17:06

    各種分布式電源的電氣特性

    PS:滲透率的概念:從字面上理解,“滲透”就是由分布式電源發出的功率進入(滲入)到配電系統,所謂的“率”就是由分布式電源發出的電和整個系統所消耗的電(或者說總發電量)的
    發表于 07-12 07:54

    分布式操作系統的相關資料分享

    文章目錄分布式操作系統嵌入操作系統集群操作系統集群系統管理
    發表于 12-22 07:23

    帶你看懂分布式軟總線在家庭場景的應用

    。HarmonyOS分布式軟總線為此應運而生,為HarmonyOS分布式通信提供了可靠的解決方案,并通過系列簡單的API接口服務于整個HarmonyOS系統。
    發表于 01-06 11:32

    分布式測井曲線自動處理系統的實現

    本文介紹了分布式測井數據自動處理系統的研究與實現;詳細介紹了測井曲線自動處理系統的模塊與組成;論述了分布式并行數據處理,人機交互,神經網絡算
    發表于 06-15 10:34 ?8次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>