<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 的簡介

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-07-03 11:10 ? 次閱讀

1 kafka簡介

2 為什么要用消息系統

3 kafka基礎知識

4 kafka集群架構

5 總結

5080c866-1942-11ee-962d-dac502259ad0.png

1 kafka簡介

其主要設計目標如下:

以時間復雜度為O(1)的方式提供消息持久化能力,即使對TB級以上數據也能保證常數時間的訪問性能

高吞吐率。即使在非常廉價的機器上也能做到單機支持每秒100K條消息的傳輸

支持Kafka Server間的消息分區,及分布式消費,同時保證每個partition內的消息順序傳輸,同時支持離線數據處理和實時數據處理

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

2 為什么要用消息系統

Kafka 本質上是一個 MQ(Message Queue),使用消息隊列的好處?

解耦:允許我們獨立修改隊列兩邊的處理過程而互不影響。

冗余:有些情況下,我們在處理數據的過程會失敗造成數據丟失。消息隊列把數據進行持久化直到它們已經被完全處理,通過這一方式規避了數據丟失風險, 確保你的數據被安全的保存直到你使用完畢

峰值處理能力:不會因為突發的流量請求導致系統崩潰,消息隊列能夠使服務頂住突發的訪問壓力, 有助于解決生產消息和消費消息的處理速度不一致的情況

異步通信:消息隊列允許用戶把消息放入隊列但不立即處理它, 等待后續進行消費處理。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/


3 kafka基礎知識

下面給出 Kafka 一些重要概念,讓大家對 Kafka 有個整體的認識和感知

Producer:即消息生產者,向 Kafka Broker 發消息的客戶端。

Consumer:即消息消費者,從 Kafka Broker 讀消息的客戶端。

Consumer Group:即消費者組,消費者組內每個消費者負責消費不同分區的數據,以提高消費能力。一個分區只能由組內一個消費者消費,不同消費者組之間互不影響。

Broker:一臺 Kafka 機器就是一個 Broker。一個集群是由多個 Broker 組成的且一個 Broker 可以容納多個 Topic。

Topic:可以簡單理解為隊列,Topic 將消息分類,生產者和消費者面向的都是同一個 Topic。

Partition:為了實現Topic擴展性,提高并發能力,一個非常大的 Topic 可以分布到多個 Broker 上,一個 Topic 可以分為多個 Partition 進行存儲,每個 Partition 是一個有序的隊列。

Replica:即副本,為實現數據備份的功能,保證集群中的某個節點發生故障時,該節點上的 Partition 數據不丟失,且 Kafka 仍然能夠繼續工作,為此Kafka提供了副本機制,一個 Topic 的每個 Partition 都有若干個副本,一個 Leader 副本和若干個 Follower 副本。

Leader:即每個分區多個副本的主副本,生產者發送數據的對象,以及消費者消費數據的對象,都是 Leader。

Follower:即每個分區多個副本的從副本,會實時從 Leader 副本中同步數據,并保持和 Leader 數據的同步。Leader 發生故障時,某個 Follower 還會被選舉并成為新的 Leader , 且不能跟 Leader 在同一個broker上, 防止崩潰數據可恢復。

Offset:消費者消費的位置信息,監控數據消費到什么位置,當消費者掛掉再重新恢復的時候,可以從消費位置繼續消費。

ZooKeeper服務:Kafka 集群能夠正常工作,需要依賴于 ZooKeeper,ZooKeeper 幫助 Kafka 存儲和管理集群元數據信息。在最新版本中, 已經慢慢要脫離 ZooKeeper。

509bbd38-1942-11ee-962d-dac502259ad0.png50b66336-1942-11ee-962d-dac502259ad0.png

4 kafka集群架構

工作流程

在了解kafka集群之前, 我們先來了解下kafka的工作流程, Kafka集群會將消息流存儲在 Topic 的中,每條記錄會由一個Key、一個Value和一個時間戳組成。

50db8486-1942-11ee-962d-dac502259ad0.png

Kafka 中消息是以 Topic 進行分類的,生產者生產消息,消費者消費消息,讀取和消費的都是同一個 Topic。但是Topic 是邏輯上的概念, Partition 是物理上的概念,每個 Partition 對應一個 log 文件,該 log 文件中存儲的就是 Producer 生產的數據。Producer 端生產的數據會不斷順序追加到該 log 文件末尾,并且每條數據都會記錄有自己的 Offset 。而消費者組中的每個消費者,也都會實時記錄當前自己消費到了哪個 Offset,方便在崩潰恢復時,可以繼續從上次的 Offset 位置消費。

存儲機制

5148309a-1942-11ee-962d-dac502259ad0.png

此時 Producer 端生產的消息會不斷追加到 log 文件末尾,這樣文件就會越來越大, 為了防止 log 文件過大導致數據定位效率低下,那么Kafka 采取了分片和索引機制。它將每個 Partition 分為多個 Segment,每個 Segment 對應4個文件:“.index” 索引文件, “.log” 數據文件, “.snapshot” 快照文件, “.timeindex” 時間索引文件。這些文件都位于同一文件夾下面,該文件夾的命名規則為:topic 名稱-分區號。例如, heartbeat心跳上報服務 這個 topic 有三個分區,則其對應的文件夾為 heartbeat-0,heartbeat-1,heartbeat-2這樣。

518c1652-1942-11ee-962d-dac502259ad0.png

index, log, snapshot, timeindex 文件以當前 Segment 的第一條消息的 Offset 命名。其中 “.index” 文件存儲大量的索引信息,“.log” 文件存儲大量的數據,索引文件中的元數據指向對應數據文件中 Message 的物理偏移量。

下圖為index 文件和 log 文件的結構示意圖:

51ae2bde-1942-11ee-962d-dac502259ad0.png

Replica - 副本

kafka中的 Partition 為了保證數據安全,每個 Partition 可以設置多個副本。此時我們對分區0,1,2分別設置3個副本(注:設置兩個副本是比較合適的)。而且每個副本都是有"角色"之分的,它們會選取一個副本作為 Leader 副本,而其他的作為 Follower 副本,我們的 Producer 端在發送數據的時候,只能發送到Leader Partition里面 ,然后Follower Partition會去Leader那自行同步數據, Consumer 消費數據的時候,也只能從 Leader 副本那去消費數據的。

51f258f4-1942-11ee-962d-dac502259ad0.png523ef07e-1942-11ee-962d-dac502259ad0.png

Controller

Kafka Controller,其實就是一個 Kafka 集群中一臺 Broker,它除了具有普通Broker 的消息發送、消費、同步功能之外,還需承擔一些額外的工作。Kafka 使用公平競選的方式來確定 Controller ,最先在 ZooKeeper 成功創建臨時節點 /controller 的Broker會成為 Controller ,一般而言,Kafka集群中第一臺啟動的 Broker 會成為Controller,并將自身 Broker 編號等信息寫入ZooKeeper臨時節點/controller。

Offset 的維護

Consumer 在消費過程中可能會出現斷電宕機等故障,在 Consumer 恢復后,需要從故障前的 Offset 位置繼續消費。所以 Consumer 需要實時記錄自己消費到了哪個 Offset,以便故障恢復后繼續消費。在 Kafka 0.9 版本之前,Consumer 默認將 Offset 保存在 ZooKeeper 中,但是從 0.9 版本開始,Consumer 默認將 Offset 保存在 Kafka 一個內置的 Topic 中,該 Topic 為 __consumer_offsets, 以支持高并發的讀寫。

5 總結

上面和大家一起深入探討了 Kafka 的簡介, 基礎知識和集群架構,后續會從Kafka 三高(高性能, 高可用, 高并發)方面來詳細闡述其巧妙的設計思想。

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

    關注

    8

    文章

    6522

    瀏覽量

    87733
  • 管理系統
    +關注

    關注

    1

    文章

    1998

    瀏覽量

    34696
  • kafka
    +關注

    關注

    0

    文章

    49

    瀏覽量

    5168

原文標題:Kafka基礎入門篇

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    kafka設計原理的深度探討

    Kafka簡介 Kafka是一種分布式的,基于發布/訂閱的消息系統。主要設計目標如下: 以時間復雜度為O(1)的方式提供消息持久化能力,即使對TB級以上數據也能保證常數時間的訪問性能 高吞吐率。即使
    的頭像 發表于 10-08 07:50 ?1855次閱讀
    <b class='flag-5'>kafka</b>設計原理的深度探討

    [6.3.1]--6.3數據分發中間件Kafka簡介-視頻

    大數據
    學習電子知識
    發布于 :2022年12月27日 02:52:18

    Apache Kafka簡介(1)#分布式數據

    分布式數據
    未來加油dz
    發布于 :2023年07月03日 22:45:31

    Apache Kafka簡介(2)#分布式數據

    分布式數據
    未來加油dz
    發布于 :2023年07月03日 22:45:56

    kafka架構與集群搭建

    kafka入門+集群搭建
    發表于 04-29 17:06

    Kafka配置文件

    Kafka基本配置
    發表于 06-14 13:02

    Kafka特性和應用場景

    Kafka簡介及部署
    發表于 06-17 09:31

    淺析kafka

    kafka常見問題
    發表于 09-29 10:09

    Kafka的全局有序

    Kafka如何做到全局有序
    發表于 10-24 13:51

    基于發布與訂閱的消息系統Kafka

    Kafka權威指南》——初識 Kafka
    發表于 03-05 13:46

    Kafka基礎入門文檔

    kafka系統入門教程(原理、配置、集群搭建、Java應用、Kafka-manager)
    發表于 03-12 07:22

    Kafka集群環境的搭建

    1、環境版本版本:kafka2.11,zookeeper3.4注意:這里zookeeper3.4也是基于集群模式部署。2、解壓重命名tar -zxvf
    發表于 01-05 17:55

    Kafka的概念及Kafka的宕機

    問題要從一次Kafka的宕機開始說起。 筆者所在的是一家金融科技公司,但公司內部并沒有采用在金融支付領域更為流行的 RabbitMQ ,而是采用了設計之初就為日志處理而生的 Kafka ,所以我一直
    的頭像 發表于 08-27 11:21 ?1668次閱讀
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕機

    物通博聯5G-kafka工業網關實現kafka協議對接到云平臺

    Kafka協議是一種基于TCP層的網絡協議,用于在分布式消息傳遞系統Apache Kafka中發送和接收消息。Kafka協議定義了客戶端和服務器之間的通信方式和數據格式,允許客戶端發送消息到K
    的頭像 發表于 07-11 10:44 ?327次閱讀

    kafka基本原理詳解

    今天浩道跟大家分享一篇關于kafka相關原理的硬核干貨,可以說即使你沒有接觸過kafka,也可以秒懂,一起看看!
    的頭像 發表于 01-03 09:57 ?559次閱讀
    <b class='flag-5'>kafka</b>基本原理詳解
    亚洲欧美日韩精品久久_久久精品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>