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

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

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

Kafka的核心概念

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 作者:馬哥Linux運(yùn)維 ? 2022-06-20 14:24 ? 次閱讀

Kafka 是主流的消息流系統(tǒng),其中的概念還是比較多的,下面通過圖示的方式來梳理一下 Kafka 的核心概念,以便在我們的頭腦中有一個(gè)清晰的認(rèn)識(shí)。

01 基礎(chǔ)

Kafka 是一套流處理系統(tǒng)(也可以叫消息隊(duì)列),可以讓后端服務(wù)輕松地相互溝通,是微服務(wù)架構(gòu)中的常用組件。

d73d250e-efd4-11ec-ba43-dac502259ad0.jpg

02 生產(chǎn)者消費(fèi)者

生產(chǎn)者服務(wù) Producer 向 Kafka 發(fā)送消息,消費(fèi)者服務(wù) Consumer 監(jiān)聽 Kafka 接收消息。

d74b5980-efd4-11ec-ba43-dac502259ad0.jpg

一個(gè)服務(wù)可以同時(shí)為生產(chǎn)者和消費(fèi)者。

d75cb8f6-efd4-11ec-ba43-dac502259ad0.jpg

03 Topics 主題

Topic 是生產(chǎn)者發(fā)送消息的目標(biāo)地址,是消費(fèi)者的監(jiān)聽目標(biāo)。

d76a322e-efd4-11ec-ba43-dac502259ad0.jpg

一個(gè)服務(wù)可以監(jiān)聽、發(fā)送多個(gè) Topics。

d785daa6-efd4-11ec-ba43-dac502259ad0.jpg

Kafka 中有一個(gè)【consumer-group(消費(fèi)者組)】的概念。

這是一組服務(wù),扮演一個(gè)消費(fèi)者。

d79d6504-efd4-11ec-ba43-dac502259ad0.jpg

如果是消費(fèi)者組接收消息,Kafka 會(huì)把一條消息路由到組中的某一個(gè)服務(wù)。

d7bbde76-efd4-11ec-ba43-dac502259ad0.jpg

這樣有助于消息的負(fù)載均衡,也方便擴(kuò)展消費(fèi)者。

Topic 扮演一個(gè)消息的隊(duì)列。首先,一條消息發(fā)送了。

d7ccbb06-efd4-11ec-ba43-dac502259ad0.jpg

然后,這條消息被記錄和存儲(chǔ)在這個(gè)隊(duì)列中,不允許被修改。

d7ef00d0-efd4-11ec-ba43-dac502259ad0.jpg

接下來,消息會(huì)被發(fā)送給此 Topic 的消費(fèi)者。

但是,這條消息并不會(huì)被刪除,會(huì)繼續(xù)保留在隊(duì)列中。

d7fe1098-efd4-11ec-ba43-dac502259ad0.jpg

繼續(xù)發(fā)送消息。

d814eea8-efd4-11ec-ba43-dac502259ad0.jpg

像之前一樣,這條消息會(huì)發(fā)送給消費(fèi)者,不允許被改動(dòng),一直呆在隊(duì)列中(消息在隊(duì)列中能待多久,取決于 Kafka 的配置)。

d825185a-efd4-11ec-ba43-dac502259ad0.jpg

d8426d9c-efd4-11ec-ba43-dac502259ad0.jpg

04 Partitions 分區(qū)

上面 Topic 的描述中,把 Topic 看做了一個(gè)隊(duì)列,實(shí)際上,一個(gè) Topic 是由多個(gè)隊(duì)列組成的,被稱為【Partition(分區(qū))】。

這樣可以便于 Topic 的擴(kuò)展。

d85453e0-efd4-11ec-ba43-dac502259ad0.jpg

生產(chǎn)者發(fā)送消息的時(shí)候,這條消息會(huì)被路由到此 Topic 中的某一個(gè)分區(qū)(Partition)。

d85f8152-efd4-11ec-ba43-dac502259ad0.jpg

消費(fèi)者監(jiān)聽的是所有分區(qū)并消耗所有人的事件。

d879a960-efd4-11ec-ba43-dac502259ad0.jpg

生產(chǎn)者發(fā)送消息時(shí),默認(rèn)是面向 Topic 的,由 Topic 決定放在哪個(gè) Partition,默認(rèn)使用輪詢策略。

d889aef0-efd4-11ec-ba43-dac502259ad0.jpg

也可以配置 Topic,讓同類型的消息都在同一個(gè) Partition。

例如,處理用戶消息,可以讓某一個(gè)用戶所有消息都在一個(gè) Partition。

例如,用戶 1 發(fā)送了 3 條消息:A、B、C,默認(rèn)情況下,這 3 條消息是在不同的 Partition 中(如 P1、P2、P3)。

在配置之后,可以確保用戶 1 的所有消息都發(fā)到同一個(gè)分區(qū)中(如 P1)。

d8a34644-efd4-11ec-ba43-dac502259ad0.jpg

這個(gè)功能有什么用呢?這是為了提供消息的【有序性】。

消息在不同的 Partition 是不能保證有序的,只有一個(gè) Partition 內(nèi)的消息是有序的。

d8bd0782-efd4-11ec-ba43-dac502259ad0.jpg

d8cf8ca4-efd4-11ec-ba43-dac502259ad0.jpg

05 架構(gòu)

Kafka 是集群架構(gòu)的,ZooKeeper 是其重要組件。

d8f4aa84-efd4-11ec-ba43-dac502259ad0.jpg

ZooKeeper 管理著所有的 Topic 和 Partition。

Topic 和 Partition 存儲(chǔ)在 Node 物理節(jié)點(diǎn)中,ZooKeeper 負(fù)責(zé)維護(hù)這些 Node。

d907fc4c-efd4-11ec-ba43-dac502259ad0.jpg

例如,有 2 個(gè) Topic,各自有 2 個(gè) Partition。

d919a65e-efd4-11ec-ba43-dac502259ad0.jpg

這是邏輯上的形式,但在 Kafka 集群中的實(shí)際存儲(chǔ)可能是這樣的:

d92779aa-efd4-11ec-ba43-dac502259ad0.jpg

Topic A 的 Partition#1有 3 份,分布在各個(gè) Node 上。

這樣可以增加 Kafka 的可靠性和系統(tǒng)彈性。

3 個(gè) Partition#1中,ZooKeeper 會(huì)指定一個(gè) Leader,負(fù)責(zé)接收生產(chǎn)者發(fā)來的消息。

d93a0c5a-efd4-11ec-ba43-dac502259ad0.jpg

其他 2 個(gè) Partition #1 會(huì)作為 Follower,Leader 接收到的消息會(huì)復(fù)制給 Follower。

d958fc82-efd4-11ec-ba43-dac502259ad0.jpg

這樣,每個(gè) Partition 都含有了全量消息數(shù)據(jù)。

d9782cf6-efd4-11ec-ba43-dac502259ad0.jpg

即使某個(gè) Node 節(jié)點(diǎn)出現(xiàn)了故障,也不用擔(dān)心消息的損壞。

Topic A 和 Topic B 的所有 Partition 分布可能就是這樣的:

d98d59b4-efd4-11ec-ba43-dac502259ad0.jpg

這樣一來,你對(duì) Kafka 的組件有了一個(gè)初步認(rèn)識(shí),更多關(guān)于 Kafka 或消息隊(duì)列的內(nèi)容,可以查閱相關(guān)資料,感謝您的閱讀,希望對(duì)您有所幫助。

審核編輯 :李倩

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

    關(guān)注

    1

    文章

    506

    瀏覽量

    25430
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    5202

原文標(biāo)題:講真!Kafka 的原理竟是這樣的,一看就明白!

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Docker和k8s的核心概念

    這是在HWL負(fù)責(zé)網(wǎng)校云業(yè)務(wù)線測(cè)試時(shí),給同事分享的基礎(chǔ)概念文檔。
    的頭像 發(fā)表于 11-04 15:47 ?120次閱讀
    Docker和k8s的<b class='flag-5'>核心</b><b class='flag-5'>概念</b>

    具身智能的核心概念解析

    1. 具身性(Embodiment) 具身性是具身智能的一個(gè)核心概念,它強(qiáng)調(diào)智能行為不僅僅是大腦中抽象的計(jì)算過程,而是與身體和環(huán)境緊密相關(guān)。具身性認(rèn)為,智能是通過身體與環(huán)境的互動(dòng)而產(chǎn)生的,智能
    的頭像 發(fā)表于 10-27 09:52 ?287次閱讀

    Linux應(yīng)用編程的基本概念

    Linux應(yīng)用編程涉及到在Linux環(huán)境下開發(fā)和運(yùn)行應(yīng)用程序的一系列概念。以下是一些涵蓋Linux應(yīng)用編程的基本概念
    的頭像 發(fā)表于 10-24 17:19 ?161次閱讀

    智慧城市的核心概念與聯(lián)系

    智慧城市是指利用信息通信技術(shù)、大數(shù)據(jù)分析等現(xiàn)代科技手段,以提升城市管理效率、改善居民生活質(zhì)量為目標(biāo)的城市發(fā)展模式。在 智慧城市 構(gòu)建過程中,有幾個(gè)核心概念與聯(lián)系需要被理解和把握: 1. 信息與通信
    的頭像 發(fā)表于 10-23 15:55 ?139次閱讀

    Kafka高性能背后的技術(shù)原理

    Kafka 是一款性能非常優(yōu)秀的消息隊(duì)列,每秒處理的消息體量可以達(dá)到千萬級(jí)別。
    的頭像 發(fā)表于 10-23 09:37 ?222次閱讀
    <b class='flag-5'>Kafka</b>高性能背后的技術(shù)原理

    輸入阻抗與輸出阻抗的概念

    在電子學(xué)和電路理論中,阻抗是一個(gè)核心概念,它描述了電路對(duì)電流的阻礙作用。在電路分析和設(shè)計(jì)中,我們經(jīng)常遇到輸入阻抗和輸出阻抗這兩個(gè)概念。它們分別代表了電路在輸入端和輸出端對(duì)外部電路的阻礙作用。本文將詳細(xì)探討輸入阻抗和輸出阻抗的
    的頭像 發(fā)表于 05-28 14:33 ?2920次閱讀

    面試官:Kafka會(huì)丟消息嗎?

    許多開發(fā)人員普遍認(rèn)為,Kafka 的設(shè)計(jì)本身就能保證不會(huì)丟失消息。然而,Kafka 架構(gòu)和配置的細(xì)微差別會(huì)導(dǎo)致消息的丟失。我們需要了解它如何以及何時(shí)可能丟失消息,并防止此類情況的發(fā)生。
    的頭像 發(fā)表于 04-29 17:32 ?956次閱讀
    面試官:<b class='flag-5'>Kafka</b>會(huì)丟消息嗎?

    fpga的概念

    到目前為止,有沒有變化和發(fā)展? 有無淘汰的概念?
    發(fā)表于 03-30 11:40

    Redis流與Kafka相比如何?

    我們先來看看Kafka的基本架構(gòu)?;镜臄?shù)據(jù)結(jié)構(gòu)是主題。它是一個(gè)按時(shí)間排序的記錄序列,只需追加。使用這種數(shù)據(jù)結(jié)構(gòu)的好處在Jay Kreps的經(jīng)典博文The Log中得到了很好的描述。
    的頭像 發(fā)表于 02-21 16:09 ?417次閱讀
    Redis流與<b class='flag-5'>Kafka</b>相比如何?

    kafka基本原理詳解

    今天浩道跟大家分享一篇關(guān)于kafka相關(guān)原理的硬核干貨,可以說即使你沒有接觸過kafka,也可以秒懂,一起看看!
    的頭像 發(fā)表于 01-03 09:57 ?842次閱讀
    <b class='flag-5'>kafka</b>基本原理詳解

    kafka支持哪些消息交付語(yǔ)義?

    在讀完kafka官方文檔,kafka設(shè)計(jì)里的消息交付語(yǔ)義一章后,給我的第一印象是內(nèi)容很抽象,于是草擬和總結(jié)了給個(gè)副標(biāo)題,并把相關(guān)內(nèi)容進(jìn)行了歸類;有些生澀的句子,盡量用大白話和舉例進(jìn)行說明,并加入了總結(jié)。
    的頭像 發(fā)表于 12-22 11:27 ?447次閱讀
    <b class='flag-5'>kafka</b>支持哪些消息交付語(yǔ)義?

    如何保證kafka消息不丟失

    如果在簡(jiǎn)歷上寫了使用過kafka消息中間件,面試官大概80%的概率會(huì)問你:"如何保證kafka消息不丟失?"反正我是屢試不爽。
    的頭像 發(fā)表于 12-19 09:52 ?690次閱讀
    如何保證<b class='flag-5'>kafka</b>消息不丟失

    zookeeper和kafka的關(guān)系

    Zookeeper和Kafka是兩個(gè)不同的開源軟件,它們可以在分布式系統(tǒng)中發(fā)揮不同的作用。下面我將詳細(xì)說明它們之間的關(guān)系以及它們?cè)诜植际较到y(tǒng)中的作用。 首先,讓我們先介紹一下Zookeeper
    的頭像 發(fā)表于 12-03 16:39 ?1468次閱讀

    golang中使用kafka的綜合指南

    kafka是一個(gè)比較流行的分布式、可拓展、高性能、可靠的流處理平臺(tái)。在處理kafka的數(shù)據(jù)時(shí),這里有確保處理效率和可靠性的多種最佳實(shí)踐。本文將介紹這幾種實(shí)踐方式,并通過sarama實(shí)現(xiàn)他們。
    的頭像 發(fā)表于 11-30 11:18 ?535次閱讀

    ros的基本概念是什么

    基本概念: ROS是一個(gè)用于在不同進(jìn)程間匿名的發(fā)布、訂閱、傳遞信息的中間件。 ROS2系統(tǒng)的核心部分是ROS網(wǎng)絡(luò)(ROS Graph)。 ROS網(wǎng)絡(luò)是指在ROS系統(tǒng)中不同的節(jié)點(diǎn)間相互通信的連接
    的頭像 發(fā)表于 11-27 11:21 ?1722次閱讀