Kafka消息隊列學習(一)

文章目錄

  • 概述
  • 核心概念
    • 生產者
      • 示例
      • 同步 / 異步發送消息
      • 生產者參數配置
        • ack-確認機制
        • retries - 重試次數
        • compression_type - 消息壓縮類型
    • 分區機制
      • 分區策略
    • 消費者
      • 消息有序性
      • 提交和偏移量
        • 偏移量提交方式
        • 手動提交
    • 高可用設計
  • SpringBoot集成Kafka
    • 基本使用
    • 傳遞對象消息

概述

在這里插入圖片描述
在這里插入圖片描述

核心概念

Kafka將生產者發布的消息發布到topic中,需要這些消息的消費者可以訂閱這些主題。
下面這張圖也為我們引出了,Kafka 比較重要的幾個概念:

  • Producer(生產者) : 產生消息的一方。

  • Consumer(消費者) : 消費消息的一方。

  • Broker(代理 / 單個kafka實例):可以看作是一個獨立的Kafka實例。

    • 多個Kafka Broker組成一個Kafka Cluster。
    • 每個 Broker 中又包含了 Topic 以及 Partition這兩個重要的概念
  • Topic(主題) : Producer將消息發送到特定的主題,Consumer通過訂閱特定的 Topic(主題) 來消費消息。

  • Partition(分區 / 隊列) : Partition 屬于 Topic 的一部分。一個 Topic 可以有多個 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,這也就表明一個 Topic 可以橫跨多個 Broker
    劃重點:Kafka 中的 Partition(分區) 實際上可以對應成為消息隊列中的隊列。

  • 消費者組:同一個消費者組中,多個消費者訂閱同一個topic,只有一個消費者可以接收到消息。

在這里插入圖片描述

生產者

示例

在這里插入圖片描述
在這里插入圖片描述

同步 / 異步發送消息

在這里插入圖片描述
在這里插入圖片描述

生產者參數配置

ack-確認機制

在這里插入圖片描述

retries - 重試次數

在這里插入圖片描述

compression_type - 消息壓縮類型

在這里插入圖片描述

分區機制

在這里插入圖片描述
kafka分區機制,允許消息存放在不同broke的不同分區上。
在這里插入圖片描述

分區策略

默認是輪詢。在這里插入圖片描述

消費者

在這里插入圖片描述
在這里插入圖片描述

消息有序性

在這里插入圖片描述
在這里插入圖片描述
消息都發給同一個分區,就可以保證消息有序性。

提交和偏移量

消費者在消費消息時,可以追蹤消息再分區的位置(偏移量),并自動向一個叫做_consumer_offset的特殊topic發送消息,包含了分區的偏移量。

在這里插入圖片描述

如果消費者發送崩潰或者有新的消費者加入群組,會觸發再平衡。例如消費者2掛掉了,那么分區3和分區4將被再平衡機制,指向到其他消費者。
在這里插入圖片描述
在自動提交偏移量模式下,再平衡機制可能會引發問題,因為掛掉的消費者提交的消息偏移量與新指定的消費者正在處理的消息偏移量是不一致的。
提交偏移量小于正在處理的偏移量:
在這里插入圖片描述
如果提交的偏移量小于正在處理的最后一個消息的偏移量,那么處于兩個偏移量之間的消息就會被重復處理。

提交偏移量大于正在處理的偏移量:
在這里插入圖片描述
如果提交的偏移量大于正在處理的最后一個消息的偏移量,那么處于兩個偏移量之間的消息將會丟失。

偏移量提交方式

在這里插入圖片描述

手動提交

首先將自動提交設置為false:
在這里插入圖片描述

同步提交
使用 commitSync() 提交偏移量最簡單也最可靠。這個 API 會提交由 poll() 方法返回的最新偏移量,提交成功后馬上返回,如果提交失敗就拋出異常。
在這里插入圖片描述
commitSync() 將會提交由 poll() 返回的最新偏移量,所以在處理完所有記錄后要確保調用了 commitSync(),否則還是會有丟失消息的風險。

如果發生了再均衡,從最近一批消息到發生再均衡之間的所有消息都將被重復處理。

同時在這個程序中,只要沒有發生不可恢復的錯誤,commitSync() 方法會一直嘗試直至提交成功。如果提交失敗,我們也只能把異常記錄到錯誤日志里。

異步提交
同步提交有一個不足之處,在 broker 對提交請求作出回應之前,應用程序會一直阻塞,這樣會限制應用程序的吞吐量。我們可以通過降低提交頻率來提升吞吐量,但如果發生了再均衡,會增加重復消息的數量。 這個時候可以使用異步提交 API。我們只管發送提交請求,無需等待 broker 的響應。
在這里插入圖片描述
在成功提交或碰到無法恢復的錯誤之前,commitSync() 會一直重試,但是 commitAsync() 不會,這也是 commitAsync() 不好的一個地方。 它之所以不進行重試,是因為在它收到服務器響應的時候,可能有一個更大的偏移量已經提交成功。假設我們發出一個請求用于提交偏移量 2000,這個時候發生了短暫的通信問題,服務器收不到請求,自然也不會作出任何響應。與此同時,我們處理了另外一批消息,并成功提交了偏移量 3000。如果 commitAsync() 重新嘗試提交偏移量 2000,它有可能在偏移量 3000 之后提交成功。這個時候如果發生再均衡,就會出現重復消息。 commitAsync() 也支持回調,在 broker 作出響應時會執行回調。回調經常被用于記錄提交錯誤或生成度量指標。如果要用它來進行重試,則一定要注意提交的順序。

同步和異步混合提交
一般情況下,針對偶爾出現的提交失敗,不進行重試不會有太大問題,因為如果提交失敗是因為臨時問題導致的,那么后續的提交總會有成功的。 但如果這是發生在關閉消費者或再均衡前的最后一次提交,就要確保能夠提交成功。因此在這種情況下,我們應該考慮使用混合提交的方法:
在這里插入圖片描述

高可用設計

  1. 集群方式(cluster),一個kafka集群由多個broke組成,一個broke宕機,其他機器上的broke依然可以對外服務。

在這里插入圖片描述

  1. 備份機制(replication):kafka中為了保證消息的安全性,將信息進行了備份,并且定義了兩類副本:
    • 領導者副本:生產者首先將消息發送到領導者副本進行備份,領導者副本只有一個。
    • 追隨者副本 :領導者副本,將自己的消息與追隨者副本進行同步。追隨者副本可以有多個,且可以分為兩類:
      • ISR(in - sync replica):需要同步復制保存的follower。
      • 普通: 與領導者副本之間是異步保存。
    • 當leader失效后,需要選出新的leader,選舉原則如下:
      • 優先從ISR中選擇,因為ISR中的消息數據是與leader同步的
      • 如果ISR列表中的follower都不行了,就只能從其他follow中選取。
      • 極端情況:所有副本都失效了,這時有兩種方案:
        • 等待ISR中的一個活過來,選為leader,數據可靠,但是時間不確定。
        • 選擇第一個活過來的副本為leader,不一定位ISR中的, 以最快速度恢復可用性,但是數據不一定完整。

在這里插入圖片描述
在這里插入圖片描述

SpringBoot集成Kafka

基本使用

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

傳遞對象消息

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36509.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36509.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HTTP之cookie基礎學習

目錄 Cookie 什么是Cookie Cookie分類 Cookie版本 Cookie工作原理 Cookie詳解 創建cookie cookie編碼 cookie過期時間選項 Cookie流程 Cookie使用 會話管理 個性化信息 記錄用戶的行為 Cookie屬性 domain選項 path選項 secure選項 cookie…

帶著問題學習分布式系統

寫在前面 聽過很多道理,卻依然過不好這一生。 看過很多關于學習的技巧、方法,卻沒應用到自己的學習中。 隨著年紀變大,記憶力越來越差,整塊的時間也越來越少,于是,越來越希望能夠更高效的學習。學習是一種習…

香港大學余濤組推出開源XLANG Agent!支持三種Agent模式

作者 |小戲、ZenMoore 一個新的未來又逐漸開始從理論走向現實走到我們身邊了。 語言的意義在于使用,而從 ChatGPT 以來這些大規模語言模型的意義,也必然絕不止于 Chat,在四個月前,我們介紹了清華大學關于工具學習的綜述《清華發布…

Python-OpenCV中的圖像處理-圖像特征

Python-OpenCV中的圖像處理-圖像特征 圖像特征Harris角點檢測亞像素級精度的角點檢測Shi-Tomasi角點檢測SIFT(Scale-Invariant Feature Transfrom)SURF(Speeded-Up Robust Features) 圖像特征 特征理解特征檢測特征描述 Harris角點檢測 cv2.cornerHarris(img, blockSize, ks…

海格里斯HEGERLS四向穿梭車倉儲解決方案在電子商務行業中的應用

隨著現代物流,尤其是智能化物流的飛速發展,河北沃克金屬制品有限公司看到了智能物流領域背后的巨大價值和市場空間,深知物流與供應鏈對企業發展的重要性。于是,引進了先進的高科技智能技術—HEGERLS四向穿梭車技術,并迅…

【日常積累】Linux下文件亂碼解決

linux下刪除亂碼文件、目錄 由于編碼原因,在linux服務器上上傳、創建中文文件或目錄時,會產生亂碼,如果想刪除它,有時候發現用rm命令是刪除不了的 這種情況下,用find命令可以刪除亂碼的文件或目錄。 首先進入亂碼文件…

docker 網絡訪問診斷

本地docker開啟nginx服務等, 發現linux系統重啟之后,無法訪問, 進入容器內部,發現可以訪問 但是容器外部,映射端口無法訪問; 診斷之前,發現docker0沒有IP綁定 rootbook:/etc/docker# ip addr …

自制手寫機器人

寫字機器人模擬在畫圖板上寫字效果 寫了一套寫字機器人代碼,有多種字體可供選擇,需要的朋友私信獲取代碼和軟件

Spring5學習筆記— 工廠高級特性

?作者簡介:大家好,我是Leo,熱愛Java后端開發者,一個想要與大家共同進步的男人😉😉 🍎個人主頁:Leo的博客 💞當前專欄: Spring專欄 ?特色專欄: M…

創建型模式-原型模式

文章目錄 一、原型模式1. 概述2. 結構3. 實現4. 案例1.5 使用場景1.6 擴展(深克隆) 一、原型模式 1. 概述 用一個已經創建的實例作為原型,通過復制該原型對象來創建一個和原型對象相同的新對象。 2. 結構 原型模式包含如下角色: …

微服務架構和分布式架構的區別

微服務架構和分布式架構的區別 有:1、含義不同;2、概念層面不同;3、解決問題不同;4、部署方式不同;5、耦合度不同。其中,含義不同指微服務架構是一種將一個單一應用程序開發為一組小型服務的方法&#xff…

使用windows搭建WebDAV服務,并內網穿透公網訪問【無公網IP】

文章目錄 1. 安裝IIS必要WebDav組件2. 客戶端測試3. 使用cpolar內網穿透,將WebDav服務暴露在公網3.1 打開Web-UI管理界面3.2 創建隧道3.3 查看在線隧道列表3.4 瀏覽器訪問測試 4. 安裝Raidrive客戶端4.1 連接WebDav服務器4.2 連接成功4.2 連接成功 1. Linux(centos8…

【Vue-Router】路由入門

路由(Routing)是指確定網站或應用程序中特定頁面的方式。在Web開發中,路由用于根據URL的不同部分來確定應用程序中應該顯示哪個內容。 構建前端項目 npm init vuelatest //或者 npm init vitelatest安裝依賴和路由 npm install npm instal…

TCP重連 - 筆記

1 C++ TCP/IP 關于tcp斷線重連的問題 C++ TCP/IP 關于tcp斷線重連的問題_c++ 斷線重連_Bug&猿柒。的博客-CSDN博客 2 C++基礎--完善Socket C/S ,實現客戶端,服務器端斷開重連 https://www.cnblogs.com/kingdom_0/articles/2571727.html 3 C++實現Tcp通信(考慮客戶…

ATF BL1 UFS初始化簡單分析

ATF BL1 UFS初始化分析 1 ATF的下載鏈接2 ATF BL1 UFS 初始化簡易流程圖3 ATF BL1 ufs初始化簡單過程分析3.1 調用過程3.2 hikey960_ufs_init3.3 dw_ufs_init3.3 ufs_init 以海思hikey960為例來介紹,簡單介紹在ATF BL1階段的初始化處理。 1 ATF的下載鏈接 https:/…

藍帽杯 取證2022

網站取證 網站取證_1 下載附件 并解壓 得到了一個文件以及一個壓縮包 解壓壓縮包 用火絨查病毒 發現后門 打開文件路徑之后 發現了一句話木馬 解出flag 網站取證_2 讓找數據庫鏈接的明文密碼 打開www文件找找 查看數據庫配置文件/application/database.php(CodeI…

Vue3.2+TS的父傳子,子傳父

這是父組件 <template><div><!-- 這個fn是子組件emit觸發名&#xff0c;兩邊保持一致 --><Child :num"num" fn"numUp"></Child></div> </template><script setup lang"ts"> import { ref } fr…

截止到目前全量主體總數有多少?

企業主體類型 企業主體類型有很多種&#xff0c;一般我們會分為公司&#xff08;有限責任&#xff09;、合伙企業、個人獨資企業、個體經營戶這些類別。 今天我們按照企業&#xff0c;個體&#xff0c;組織的分類方式來看各個主體的總數。 企業&#xff1a;統一社會信用代碼…

基于IP網絡的存儲協議——iSCSI

文章首發地址 iSCSI&#xff08;Internet Small Computer System Interface&#xff09;是一種基于IP網絡的存儲協議&#xff0c;它能夠在TCP/IP網絡上實現SCSI協議&#xff0c;使得不同的主機可以通過網絡共享存儲設備。iSCSI可以將存儲設備映射到本地主機上&#xff0c;使得主…

ARTS 挑戰打卡的第7天 --- Ubuntu中的WindTerm如何設置成中文,并且關閉shell中Tab鍵聲音(Tips)

前言 &#xff08;1&#xff09;Windterm是一個非常優秀的終端神器。關于他的下載我就不多說了&#xff0c;網上很多。今天我就分享一個國內目前沒有找到的這方面的資料——Ubuntu中的WindTerm如何設置成中文&#xff0c;并且關閉shell中Tab鍵聲音。 將WindTerm設置成中文 &…