0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

一文讀懂什么是分布式流處理系統(tǒng)Kafka

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

什么是Kafka

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

Kafka的基本概念

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

kafka有以下一些基本概念:

Producer - 消息生產(chǎn)者,就是向kafka broker發(fā)消息的客戶端。

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

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

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

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

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

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

Kafka分布式架構(gòu)

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

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

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

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

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

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

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

實驗一:kafka-python實現(xiàn)生產(chǎn)者消費者

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

這個實驗會實現(xiàn)一個producer和一個consumer,producer向kafka發(fā)送消息,consumer從topic中消費消息。結(jié)構(gòu)如下圖

producer代碼

consumer代碼

接下來創(chuàng)建test topic

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

在window2中運行consumer,如下

可以看到window2中的consumer成功的讀到了producer寫入的數(shù)據(jù)

實驗二:消費組實現(xiàn)容錯性機制

這個實驗將展示消費組的容錯性的特點。這個實驗中將創(chuàng)建一個有2個partition的topic,和2個consumer,這2個consumer共同消費同一個topic中的數(shù)據(jù)。結(jié)構(gòu)如下所示

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

接下來我們創(chuàng)建topic,名字test,設(shè)置partition數(shù)量為2

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

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

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

我們嘗試關(guān)閉window1中的consumer,可以看到如下結(jié)果

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

實驗三:offset管理

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

這個實驗的結(jié)構(gòu)和實驗一的結(jié)構(gòu)是一樣的,使用一個producer,一個consumer,test topic的partition數(shù)量設(shè)為1。

producer的代碼和實驗一中的一樣,這里不再重復(fù)。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開始繼續(xù)消費消息。之后每一次consumer重新啟動,consumer都會從上一次停止的地方繼續(xù)開始消費。

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

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

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84688
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    5222

原文標題:Python操作分布式流處理系統(tǒng)Kafka

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

收藏 人收藏

    評論

    相關(guān)推薦

    分布式軟件系統(tǒng)

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

    LED分布式原理

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

    如何設(shè)計分布式干擾系統(tǒng)?

    什么是分布式干擾系統(tǒng)?分布式干擾系統(tǒng)種綜合化、體化、小型化、網(wǎng)絡(luò)化和智能化
    發(fā)表于 08-08 06:57

    讀懂分布式架構(gòu)知識體系(內(nèi)含超全核心知識大圖)

    和修改的能力,隔離性可以防止多個事務(wù)并發(fā)執(zhí)行時,由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不致;Durabilit:事務(wù)處理結(jié)束后,對數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會丟失。分布式
    發(fā)表于 10-23 10:02

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

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

    分布式系統(tǒng)的優(yōu)勢是什么?

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

    分布式的優(yōu)缺點是什么?

     分布式技術(shù)就是在需要恒的節(jié)點上串接,低壓差線性恒驅(qū)動器。低壓差很重要,關(guān)系到產(chǎn)品驅(qū)動效率。做到恒驅(qū)動有很多種,其中低壓差線性恒
    發(fā)表于 04-01 09:03

    HarmonyOS鴻蒙操作系統(tǒng)之什么是“基于微內(nèi)核的全場景分布式操作系統(tǒng)”?

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

    分布式操作系統(tǒng)的相關(guān)資料分享

    文章目錄分布式操作系統(tǒng)嵌入操作系統(tǒng)集群操作系統(tǒng)集群系統(tǒng)管理
    發(fā)表于 12-22 07:23

    分布式測井曲線自動處理系統(tǒng)的實現(xiàn)

    本文介紹了分布式測井數(shù)據(jù)自動處理系統(tǒng)的研究與實現(xiàn);詳細介紹了測井曲線自動處理系統(tǒng)的模塊與組成;論述了分布式并行數(shù)據(jù)處理,人機交互,神經(jīng)網(wǎng)絡(luò)算
    發(fā)表于 06-15 10:34 ?8次下載

    采用DSP芯片的分級分布式管理系統(tǒng)設(shè)計

    采用DSP芯片的分級分布式管理系統(tǒng)設(shè)計 概述:通過個兩級分布式圖像處理系統(tǒng)中管理計算機的實現(xiàn),闡述基于DSP的控制電路的設(shè)計方法以及對兩
    發(fā)表于 03-07 12:58 ?583次閱讀
    采用DSP芯片的分級<b class='flag-5'>分布式</b>管理<b class='flag-5'>系統(tǒng)</b>設(shè)計

    大數(shù)據(jù)環(huán)境下的分布式數(shù)據(jù)處理關(guān)鍵技術(shù)探析

    的實時處理能力。詳細介紹了組成基于大數(shù)據(jù)的分布式數(shù)據(jù)處理系統(tǒng)的四個子系統(tǒng)及其關(guān)鍵技術(shù),討論和比較了各個子
    發(fā)表于 12-05 19:04 ?0次下載
    大數(shù)據(jù)環(huán)境下的<b class='flag-5'>分布式</b>數(shù)據(jù)<b class='flag-5'>流</b><b class='flag-5'>處理</b>關(guān)鍵技術(shù)探析

    分布式的產(chǎn)生與定義

    如果要更好的理解分布式是什么,首先得認識下,什么是集中式處理系統(tǒng)和分散式處理系統(tǒng)。集中式處理系統(tǒng)它主要是把
    的頭像 發(fā)表于 12-29 15:22 ?4102次閱讀

    分布式視頻處理系統(tǒng)有什么優(yōu)勢?

    分布式視頻處理系統(tǒng)作為基于網(wǎng)絡(luò)傳輸?shù)男滦推唇蛹夹g(shù),支持多種顯示系統(tǒng)同時控制,可實現(xiàn)將多種分辨率傳輸?shù)?b class='flag-5'>一塊超高清大屏上,它在LED小間距屏市場有著很高的滲透率,業(yè)內(nèi)三思航天級品質(zhì)的LED
    發(fā)表于 04-16 15:15 ?2417次閱讀

    分布式發(fā)布與訂閱系統(tǒng)Apache Kafka在即將發(fā)布的2.8版本

    分布式發(fā)布與訂閱系統(tǒng)Apache Kafka在即將發(fā)布的2.8版本,使用Kafka內(nèi)部的Quorum控制器來取代ZooKeeper,因此用戶第
    的頭像 發(fā)表于 05-31 09:58 ?1550次閱讀