Kafka生產者相關原理

前言

前面已經介紹了Kafka的架構知識并引出了Kafka的相關專業名稱進行解釋

這次分享一下Kafka對生產者發送消息進行處理的運行機制和原理

生產者發送消息兩種方式

同步發送消息

程序中線程執行完消息發送操作之后會等待Kafka的消息回應ack

默認等待30秒沒有回應就會拋出異常

等待時間和重試次數都可以在設置參數中調整

同步發送消息,消息丟失一般就是長時間沒有響應,對這個消息進行消息發送補償或者持久化丟失消息的記錄,處理比較簡單

異步發送消息

?產者發送完消息后就可以執?之后的業務,Kafka代理節點在收到消息后執行完成之后異步調用生產者提供的callback回調方法,這個方法可以讓我們對成功或者失敗做一些后續處理

異步發送消息,會有發生消息丟失的風險,此時需要使用Kafka的持久化機制防止消息丟失

Kafka是先持久化磁盤后對消息進行讀取的轉發給消費者的

持久化優化參數ack

ack = 0? ? ? ?不需要Kafka代理節點持久化消息,直接返回ack? 消息丟失最高

ack=1(默認): 主代理節點持久化到主題分區,才返回ack給?產者,性能和安全性是最均衡的

ack=-1/all。 所有代理節點都把消息持久化到主題分區,才返回ack給?產者,這種是最安全的,但是性能是最差的

消息發送緩沖區

kafka默認會創建?個消息緩沖區,?來存放要發送的消息,緩沖區是32MB

當消息緩沖區中累積的消息總大小達到或超過 16KB 時,線程會將這些消息打包起來發送代理節點

如果不夠16kb也會 等待一段時間 (默認 0ms,即立即發送,有參數可以自己設置) 后將這些消息打包起來發送到Kafka的代理節點

消息發送緩沖區是可以增加吞吐量但是也增大了延遲,設置等待時間也是對業務中延遲和吞吐量的一種衡量

綜上所述,Kafka應對異步發送消息,防止消息丟失的方法有: 1、Kafka自身的消息持久化機制2、callbak回調監控可以做到對丟失消息進行監控

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

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

相關文章

Python 獲取對象信息的所有方法

在 Python 里,我們經常需要檢查一個對象的類型、屬性、方法,甚至它的源碼。這對調試、學習和動態編程特別有用。今天我們就來聊聊獲取對象信息的常見方法,按由淺入深的順序來學習。 參考文章:Python 獲取對象信息 | 簡單一點學習…

vuhub Beelzebub靶場攻略

靶場下載: 下載地址:https://download.vulnhub.com/beelzebub/Beelzebub.zip 靶場攻略: 主機發現: nmap 192.168.163.1/24 端口掃描: nmap -p-65535 -A 192.168.163.152 發現沒有額外端口。 頁面掃描&#xff1…

開啟單片機

前言:為未來拼搏的第n天,從單片機開始。為什么要學習單片機呢,單片機的工作涉及范圍及其廣如:消費電子,游戲機音響;工業控制:機器人控制;醫療設備,通信設備,物…

人工智能系列(8)如何實現無監督學習聚類(使用競爭學習)?

案例:鳶尾花數據集的聚類一.聚類簡介神經網絡能夠從輸入數據中自動提取有意義的特征,而競爭學習規則使得單層神經網絡能夠根據相似度將輸入樣本進行聚類,每個聚類由一個輸出神經元代表并作為該類別的“原型”,從而實現對輸入模式的…

Windows安裝mamba全流程(全網最穩定最成功)

windows系統下安裝mamba會遇到各種各樣的問題。博主試了好幾天,把能踩的坑都踩了,總結出了在windows下安裝mamba的一套方法,已經給實驗室的windows服務器都裝上了。只要跟著我的流程走下來,大概率不會出問題,如果遇到其…

Autosar Dem配置-最大存儲的DTC信息個數配置-基于ETAS軟件

文章目錄 前言 Autosar Dem相關配置 ETAS工具中的配置 生成文件分析 測試驗證 總結 前言 診斷DTC開發中,會有故障快照和擴展數據的存儲需求,但由于控制器的可用存儲空間有限,所以無法存儲所有DTC的信息,這時就需要限制存儲的數量,本文介紹該參數在ETAS軟件中的配置。 Au…

【MySQL】EXISTS 與 NOT EXISTS 深度解析:從原理到實戰的完整指南

在復雜的業務查詢中,我們常常需要判斷“是否存在滿足某條件的記錄”或“找出不滿足某些條件的記錄”。這時,EXISTS 和 NOT EXISTS 子查詢便成為強大的工具。它們不僅邏輯清晰、語義明確,而且在某些場景下性能遠超 IN 或 JOIN。然而&#xff0…

面對信號在時頻平面打結,VNCMD分割算法深度解密

“ 信號迷宮中的破壁者:VNCMD如何分解糾纏的時空密碼?——從鯨歌到機械故障,寬帶信號分解新紀元。”01—痛點直擊:為什么傳統方法集體失效?2017年,上海交大團隊提出了一項突破性研究:變分非線性…

CSS優先級、HTTP響應狀態碼

CSS優先級 優先級:看CSS的來源、樣式引入方式、選擇器、源碼順序。 行內樣式/內聯樣式:直接在HTML元素的style屬性中編寫CSS樣式。這種方式適用于少量樣式的情況,但不推薦在大規模開發中使用,因為它會使HTML文件變得冗長和難以維…

項目一系列-第2章 Git版本控制

第2章 Git版本控制 2.1 Git概述 Git是什么?Git是一個分布式版本控制工具,于管理開發過程中的文件。 Git有哪些作用? 遠程備份:Git可以將本地代碼備份到遠程服務器,防止數據丟失。多人協作:Git運行多個開發者…

Java異常:認識異常、異常的作用、自定義異常

目錄1.什么是異常?1)運行時異常2)編譯時異常2.異常的作用1)Java 異常在定位 BUG 中的核心作用2)Java 異常作為方法內部特殊返回值的作用3)自定義異常1.什么是異常? Error:代表的系統級別錯誤(屬…

第十九天-輸入捕獲實驗

一、輸入捕獲概述1、輸入捕獲框圖2、輸入捕獲工作詳解①設置輸入捕獲濾波器可以設置濾波,濾除一些高電平脈寬不足的脈沖信號。②設置捕獲極性③輸入捕獲映射④輸入捕獲分頻器這里的捕獲是將計數器的值存入比較寄存器中,分頻次的作用是設置幾個上升沿/下降…

多線程問題,子線程同時操作全局變量,使用后需要清空嗎 ?

背景:目前有一個全局變量 ,某個方法中通過多線程,都操作這個變量,向這個全局變量中去添加元素,然后等所有子線程執行完了之后,對這個全局變量進行批量保存,然后這個全局變量還需要手動去清空嗎&…

Netty知識儲備:BIO、NIO、Reactor模型

學習Netty之前,首先先掌握這些基礎知識:阻塞(Block)與非阻塞(Non-Block),同步(Synchronous)與異步(Asynchronous),Java BIO與NIO對比。…

用生成器守住架構,用 AI 放大效率:一套可落地的 AI 編程方法論

背景與問題 現實困境: 直接讓 AI 產出整塊業務代碼,常常與現有架構風格、分層邊界、依賴策略不一致,后續改造成本高;AI 對現實業務語境、領域規則難以精準把握;在既定模板成熟的場景下,代碼生成器往往更快、更整齊。目…

碼頭岸電系統如何保障供電安全?安科瑞絕緣監測及故障定位方案解析

當岸電電網是TN-S系統時,船體未接專用接地線且船舶電網未與岸電零線接通,船舶電網發生單相接地故障時,人站在岸上觸及船體會有觸電危險,零線上可能出現高電壓,單相接地電流大。當船體接專用接地線且船舶電網接入岸電零…

ESP32_u8g2移植

前言 U8g2 是一個用于嵌入式設備的單色圖形庫。U8g2支持單色OLED和LCD,并支持如SSD1306 SSD1315等多種類型的OLED驅動,幾乎市面上常見都支持。 U8g2源碼 download:https://github.com/olikraus/u8g21:環境 ESP32 S3(ESP32-S3-Dev…

MCP實現:.Net實現MCP服務端 + Ollama ,MCP服務端工具調用

本文使用.Net編寫MCP服務端 Ollama ,實現簡單MCP調用,代碼僅實現基本演示功能。 文章目錄一、Ollama如何安裝使用二、創建.Net8項目,開發MCP服務端三、開發MCP客戶端,并對接Ollama一、Ollama如何安裝使用 請移步:htt…

Docker的安裝使用以及常見的網絡問題

一、什么是DockerDocker是一種容器化技術,用于快速打包、分發和運行程序。他的核心思想是"一次構建,到處運行",通過將應用及其依賴的環境打包到一個輕量級、可移植的容器中,實現跨平臺一致運行。二、Docker的安裝1.Cent…

C++入門學習

1.命名空間的介紹首先我們看到如下的代碼&#xff0c;在C語言中&#xff1a;#include <stdio.h> #include <stdlib.h> int rand 10; // C語言沒辦法解決類似這樣的命名沖突問題&#xff0c;所以C提出了namespace來解決 int main() {printf("%d\n", rand…