大數據開發面試題【Kafka篇】

83、介紹下Kafka,Kafka的作用?Kafka的組件?適用場景?

kafka是一個高吞吐量、可擴展的分布式消息傳遞系統,在處理實時流式數據,并能夠保證持久性和容錯性
可用于數據管道、流分析和數據繼承和關鍵任務應用(發布/訂閱模式)
發布/訂閱模式:
可以有多個topic主題、消費者消費數據之后,不刪除數據、每個消費者相互獨立,都可以消費數據

84、Kafka作為消息隊列,它可解決什么樣的問題?

異步:允許用戶把一個消息放入隊列,但并不立即處理他們,需要的時候再去處理
消峰:有助于控制和優化數據流經過系統的速度,解決生產消息和消費消息的處理速度不一致的情況
解耦:允許獨立擴展或者修改兩邊的處理過程,只要確保他們遵守同樣的接口約束

85、說下Kafka架構

生產者:消息的生產者,就是向kafka broker發消息的客戶端
消費者:獲取消息的客戶端
消費組:有多個消費者組成,消費者組內每個消費者負責消費不同分區的數據,一個分區只能由一個組內的消費者消費;消費者組之間互補影響;所以消費者組邏輯上是一個訂閱者
broker:一臺kafka服務器就是一個broker,一個broker可以容納多個topic
topic:一個隊列,生產者和消費者面向的都是一個topic
partition:一個非常大的toipc可以分布到多個broker,一個topic可以分為多個partition
replica:
leader:
follower:

86、Kafka的工作原理和它與傳統消息隊列服務的不同之處?與RabbitMQ相比?

特點:
發布訂閱模型;分區和復制;高吞吐量;實時數據流支持:傳統消息隊列只支持鵆并按需查看歷史數據,而kafka還支持傳輸實時流數據
與傳統消息隊列相比:kafka優化了磁盤使用、利用操作系統緩存進行高速讀寫、并提高高效的分區和復制機制
RabbitMQ:在大規模實時性要求教導的場景下,使用kafka合適;在簡單的消息傳遞與排隊需求中,選擇常見的消息隊列較為合適、
補充:兩種消息隊列模式
點對點模式:點對點通常是基于拉取或者輪詢的消息傳送模型,發送到隊列的消息被一個且只有一個消費者進行消費,生產者把消息放入消息隊列后,由消費者主動拉取消息進行消費;優點是消費者拉取消息的頻率可以由自己控制
發布訂閱模式:生產者把消息放入消息隊列以后,隊列會把消息推送給該類的消費者

87、kafka的工作流程

創建一個kafka的生產者將源數據推送到kafka的topic中,然后使用消費者從topic訂閱消息,并傳遞給處理引擎或者存儲系統
在生產者流程中有兩個關鍵參數(batch.size和linger.ms):只有數據累計達到batch.size后,sender才會發送數據,默認為16k;如果數據遲遲未達到batch.size,sender設置的linger.ms設置的時間達到以后就會發送數據,默認為0ms,表示沒有延遲。
88、kakfa分區容錯性
副本機制:kafka允許一個topic創建多個副本,并將這些副本分布在不同的broker上
數據復制:kafka使用異步復制機制來保證數據的可靠性,當消息被寫入到leader副本時候,kafka會將其異步復制到follower副本中
ISR機制:用來保證副本之間的一致性,如果某個副本無法及時復制消息或者落后于其他副本太多,他將被從SIR集合中移除,直到追趕上其他副本的進度為止
故障轉移:當某個broker宕機或者分區的領導副本不可用時候,kafka會自動進行故障轉移,它會從ISR集合中選擇一個新副本作為領導副本

89、kafka的分區策略

在這里插入圖片描述

如上是kafka的構造方法:
1、如果指定了partition的情況下,直接將指明的值作為partition值
2、如果沒有指明partition值但有key的情況之下,將key的hash值與topic的partition數進行取余得到partition的值,并將對應的value寫入到對應的分區中
3、既沒有partition值又沒有key值的情況下,kafka采用粘性分區器(sticky partition),會隨機選擇一個分區,并盡可能一直使用或者分區,直到該分區的batch已滿或者已完成,kafka再隨機一個分區進行使用。

90、Kafka如何盡可能保證數據可靠性?

1、保證分區消息的順序———分區有序
2、只有當消息被寫入分區的所有同步副本時候,它才被認為是已經提交的(ACK應答)
ACK是指:ackowledgement,用于控制生產者發送消息時候的可靠性和性能,
ACK=0:生產者對象將數據通過網絡客戶端將數據發送到網絡數據流中的時候,kafka就對當前的數據請求進行了響應,確認應答,只是能保證數據已經通過網絡發送給kafka,并不能保證kafka一定能接收到,無法保證數據的可靠性,但通信效率高
ACK=1:生產者等待leader副本成功寫入消息到日志文件后就認為發送成功,適用于對可靠性較高的場景,這種應答方式,數據已經存儲到分區的leader副本中,數據相對安全,但數據并沒有及時備份到follower副本,一旦broker崩潰,數據也會丟失
ACK=all或者-1(默認):生產者等待ISR中所有副本成功寫入消息后,就認為發送成功,適用于對數據不可丟失的高可靠性要求場景(一般是金融級別的才會使用這種配置)
3、只要還有一個副本是活躍的,那么已經提交的消息就不會丟失
4、消費者只能讀取已經提交的消息
5、kafka的復制機制和分區的多副本架構是kafka可靠性保證的核心(topic被分為多個分區,分區是基本的數據塊,分區存儲在單個磁盤上,kafka可以保證分區里的事件是有序的,分區可以有多個副本)

91、kafka的同步與異步發送

同步模式:逐條發送,用戶線程選擇同步,效果是逐條發送,因為請求隊列InFlightRequest中永遠最多有一條數據,第一條響應到達以后,才會請求第二條
異步模式:如果設置成異步模式。可以運行生產者以batch的形式push數據,這樣會極大的提高broker的性能,會增加丟失數據的風險
如果kafka通過主線程代碼將一條數據放入到緩沖區中后,無需等待數據的后續發送過程,就直接發送下一條數據的場合,就是異步發送
如果Kafka通過主線程代碼將一條數據放入到緩沖區后,需等待數據的后續發送操作的應答狀態,才能發送一下條數據的場合,我們就稱之為同步發送。所以這里的所謂同步,就是生產數據的線程需要等待發送線程的應答(響應)結果。

92、kafka數據丟失和數據重復原因和解決辦法

數據丟失原因:不等待broker的ack,broker接收到磁盤就已經返回了,當broker故障時候會丟失數據
數據重復原因:當ack設置為1的時候,假如因為網絡原因,kafka沒有將應答消息發送給生產者,一旦超時時間閾值,就認為kafka數據丟失,此時生產者會嘗試對超時的請求數據進行重試,此時kafka中存在的數據是重復的

補充:數據冪等性

生產者同樣的一條數據,無論向kafka發送多少次,kafka只會存儲一條數據,
冪等性只能保證單分區消息有序不重復,多分區不能保證冪等性
數據傳輸語義:
https://infinity-culture.feishu.cn/sync/OWY5dMNgjsOajnbyFSxcrIq7nBd

93、生產者消費者模式與發布訂閱模式有何異同?

生產者消費者模式,指的是由生產者將數據源源不斷推送到消息中心,有不同的消費者從消息中心取出數據做自己的處理,在同一類別下,所有消費者拿到的都是同樣的數據
發布訂閱模式:本質上也是一種消費者模式,由訂閱者首先向消息中心指定自己對哪些數據感興趣,發布者推送的數據經過消息中心后,每個訂閱者拿到的僅僅是自己感興趣的數據
生產者消費者是所有消費者搶占消息,訂閱發布是所有訂閱者共享信息;
主動權不同,生產消費者主動權在消費者,訂閱發布主動權在發布者,

94、kafka如何保證全局有序

kafka通過分區和分區內的順序保證全局有序,將數據分為多個topic,每個topic可以有多個分區,每個分區都有唯一的標識,并且在集群中的多個節點上進行復制以提高高可用性
每個分區內,kafka使用offset來標識消息的順序,生產者將消息切入待定的分區時,kafka會為每個消息分配一個遞增的偏移量,消費者通過指定分區和偏移量來讀取消息,保證消費者按照指定順序處理消息
如果某一個topic只有一個分區,那么該主題的消息順序是全局有序的
如果一個topic有多個分區,kafka可以根據消息的key來選擇將消息寫入哪個分區,具有相同鍵的消息將被寫入同一個分區,并且同一個分區內的消息順序是有序的

95、Kafka為什么同一個消費者組的消費者不能消費相同的分區?

kafka中同一個消費者組的消費者組不能消費相同的分區是因為kafka中采用分區分配策略,確保每個分區被消費者組的的一個消費者消費,主要是為了確保消息的順序性和負載均衡,使得每個消費者都能夠處理大致相同的數量的消息

96、Kafka讀取消息是推還是拉的模式?有什么好?

kafka的消息讀取模式是pull拉模式,消費者主動拉取kafka服務器的消息
好處:
1、消費者可以根據自身的處理能力和需求決定拉取消息的速率
2、節約資源:可以避免服務器主動推送大量消息給消費者,減少網絡帶寬的和服務資源的消耗
3、容錯性:在拉取過程中出現錯誤,可以重新拉取相同的消息進行重試
4、消息積壓控制:消費者可以根據自身的處理能力調整拉取消息的速率
如果是push模式,多個分區的數據同時推送給消費者進行處理,明顯一個消費者的消費能力是有限的,消費者無法快速處理數據,就會導致數據的積壓,導致網絡、存儲的壓力,影響效率

補充:消費者組模式

如果topic的分區的數據過多,消費時間很長,至此對kafka1的壓力就很大;
在kafka中,每個消費者都對應一個消費者組,如果kafka想要消費消息,那么需要指定消費那個topic的消息以及自己的消費組id(groupId)

在消費者組中,多個實例共同訂閱若干個topic,實現共同消費,同一個組下的每個實例都配置有相同的ID,被分配不同的訂閱分區,當某個實例掛掉的時候,其他實例會自動地承擔起它負責消費的分區

97、kafka高吞吐的原理

1、順序讀寫磁盤,kafka消息是不斷追加到文件中的,使得kafka可以充分利用磁盤的互相內需讀寫性能,不需要次哦按磁頭的尋道時間,快速讀寫
2、kafka中的topic被分為了多個partition,每個partition又分為多個segment,一個隊列的消息實際上是保存在多個片段文件中通過分段的反射光hi,每次文件操作都是對一個小文件進行操作,增加了并行處理的能力
3、kafka的瓶頸不是cpu或者磁盤,而是網絡帶寬

98、說下Kafka中的Partition?

kafka的partirion過程是將topic劃分為多個獨立的數據片段的過程,每個parririon是一個有序的不可變的消息隊列,消息按照生產者的發送順序一次追加到partition中,每個partition在物理上對應一個獨立的日志文件,被分成多個segment
Partition的作用在于:
實現消息的水平擴展:Kafka可以在多個Broker上并行處理不同Partition的消息,提高了整個系統的吞吐量。
實現數據的持久化:每個Partition都會被復制到多個Broker上,確保數據的可靠性和冗余。
實現消息的順序性:在同一個Partition中,消息的順序是有序的,保證了消息的有序性處理。
每個Partition都有一個唯一的標識符(Partition ID),并且可以配置多個副本(Replica),其中一個為Leader副本,其它副本為Follower副本。Leader副本負責處理來自Producer和Consumer的請求,Follower副本用于備份和故障轉移。
在生產者發送消息時,可以選擇指定消息要發送到的Partition,如果沒有指定,Kafka會根據某種策略(如Hash值)將消息平均分配到各個Partition中。而在消費者消費消息時,可以訂閱一個或多個Partition,每個消費者只會消費其中一個Partition上的消息。

99、如何使用kafka實現實時數據流處理?

需要創建一個kafka的producer將元數據推送到kafka potic中,再使用kafka的consumer從topic中訂閱消息,并將其傳遞給流處理引擎spark或者flink,對接受到的消息進行實時計算和轉換,將結果寫回固定的外部存儲

100、flink的checkpoint和kafka的offset關聯是什么

flink的checkpoint用于記錄flink的應用程序的狀態,而kafka offset用于記錄消費者的topic的位置,兩者相互結合,以確保在故障恢復后不會重復處理kafka中的消息
補充:kafka中的數據模型
顧名思義就是kafka的架構;

補充:kafka為什么可以實現高效傳輸數據

1、利用Partition實現并行處理
一個topic包好多個partition,不同的partition位于不同的節點上,從而可以實現磁盤間的并行處理,充分發揮多磁盤的優勢。
2、順序寫磁盤(提供預讀和寫技術,磁盤的順序寫大多數情況下比隨機寫內存還要快)
影響磁盤的關鍵因素是磁盤的完成一個IO請求所花費的時間,它由尋道時間、旋轉時間和數據傳輸時間三部分構成。kafka中都通過追加的方式盡可能的將隨機IO轉換為順序IO,以此來降低尋址和旋轉延時
3、充分利用頁緩存Page Cache
引入cache層是為了提高linux操作系統對磁盤訪問的性能,cache層在內存中緩存了磁盤上的部分數據,免除了對底層磁盤的操作,提高了性能(liunx的實現中,文件cache層分為兩個層面,一個page cache,另一個是buffer cache,每個page chche有多個buffer chche,Page Cache 主要用來作為文件系統上的文件數據的緩存來用,尤其是針對當進程對文件有 read/write 操作的時候。Buffer Cache 則主要是設計用來在系統對塊設備進行讀寫的時候,對塊進行數據緩存的系統來使用。)
broker收到數據后,寫磁盤時只是將數據寫入page chche中,并不能保證數據一定會完全寫入磁盤,可能會造成頁緩存中的數據為寫入磁盤從而造成數據丟失
4、零拷貝(減少拷貝次數)
零拷貝是一種為了解決數據從內核緩存到用戶緩存的CPU拷貝產生的性能消耗的技術。
kafka中存在大量的網絡數據持久化到磁盤和磁盤文件需要通過網絡發送的過程,影響kafka的整體吞吐量
DMA:直接存儲器,是一個無需CPU參與,讓外設和系統內存之間進行雙向數據傳輸的硬件機制,可以使系統CPU從實際的IO數據傳輸過程中脫離出來,提高系統的吞吐率
當數據從磁盤經過DMA到內核緩存后,為了減少CPU的拷貝性能損耗,操作系統會將該內核緩存與用戶層,減少以此CPU拷貝的過程,
網絡數據持久化到磁盤中:
在這里插入圖片描述

補充:kafka中的offset

在kafka中,每個topic分區下的每一條消息都被賦予了一個唯一的ID數值,用于標識它在分區中的位置,這個ID數值,就被稱為唯一,也叫做偏移量,一旦消費被寫入分區日志中,它的位移將不能被修改

補充:削峰、異步、解耦

削峰:就是緩沖瞬時的突發流量,使其平滑,對于上游發送能力很強的系統,若沒有消息中間件的保護,脆弱的下游系統可能會被直接壓垮導致雪崩
異步:不用同步等待下游將數據處理完,將喜喜發送到消息隊列中即可返回,不阻礙主流程
解耦:

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

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

相關文章

Kafka 集群部署(CentOS 單機模擬版)

0.前置說明 由于我們手里只有一臺Linux機器,所以我們實現的是簡單的單機模擬的集群部署,通過修改配置文件,啟動 3 個 kafka 時用到 3 個不同的端口(9091,9092,9093)。 1.安裝Java11 切換到你…

鏈接庫文件體積優化工具篇:bloaty

筆者之前參與過一個嵌入式智能手表項目,曾經碰到過這樣一個問題:手表的flash大小只有2M,這意味著只能在上面燒錄2M大小的代碼。隨著開發不斷進行,代碼越寫越多,編譯出來的bin也越來越大。最后bin大小超過了2M, 就沒法燒…

Vue3+Ant design 實現Select下拉框一鍵全選/清空

最近在做后臺管理系統項目的時候,產品增加了一個讓人非常苦惱的需求,讓在Select選擇器中添加一鍵全選和清空的功能,剛開始聽到的時候真是很懵,他又不讓在外部增加按鈕,其實如果說在外部增加按鈕實現全選或者清空的話&a…

3、python安裝-linux系統下

安裝前置依賴軟件,安裝完成后,打開官網,下載linux系統下的python安裝包: 選擇最新的版本 點擊最新版本,進入版本對應的界面, 選擇第一個進行源碼的編譯,右鍵選擇復制連接地址, 回到終…

HTML+CSS+JS(web前端大作業)~致敬鳥山明簡略版

HTMLCSSJS【動漫網站】網頁設計期末課程大作業 web前端開發技術 web課程設計 文章目錄 一、網站題目 二、網站描述 三、網站介紹 四、網站效果 五、 網站代碼 文章目錄 一、 網站題目 動漫網站-鳥山明-龍珠超 二、 網站描述 頁面分為頁頭、菜單導航欄(最好可下拉&…

CDC 數據實時同步入湖的技術、架構和方案(截至2024年5月的現狀調研)

近期,對 “實時攝取 CDC 數據同步到數據湖” 這一技術主題作了一系列深入的研究和驗證,目前這部分工作已經告一段落,本文把截止目前(2024年5月)的研究結果和重要結論做一下梳理和匯總。為了能給出針對性的技術方案&…

Redis和MySQL的結合方式

Redis和MySQL的結合方式可以多樣化,以滿足不同的應用需求。以下是幾種常見的結合方式,以及它們的特點和適用場景: 緩存數據庫查詢結果: 應用程序首先嘗試從Redis中查詢數據。如果Redis中沒有所需數據,則從MySQL數據庫中…

ESP32-C6接入巴法云,Arduino方式

ESP32-C6接入巴法云,Arduino方式 第一、ESP32-C6開發環境搭建第一步:安裝arduino IDE 軟件第二步:安裝esp32庫第三:arduino 軟件設置 第二:簡單AP配網程序第一步:程序下載第二步:程序使用第三步…

電腦微信群發 500 1000人以上怎么群發,微信營銷群發助手軟件,本人親測,增加十倍業績!!!

今天給大家推薦一款我們目前在使用的電腦群發工具掘金小蜜,不僅可以無限多開,方便你同時管理多個賬號,群發功能更是十分強大,輕松釋放你的雙手。 掘金小蜜(只支持Win7及以上操作系統,沒有推Mac版和手機客戶…

[碼蹄集新手訓練營]MT1016-MT1020

目錄 題號MT1016 寬度與對齊MT1017 左右對齊MT1018 輸入寬度MT1020 %s格式符 題號 MT1016 寬度與對齊 #include<stdio.h> int main() { printf("%-5d %5d\n%-5d %5d\n%-5d %5d",455,455,-123,-123,987654,987654);return 0; }MT1017 左右對齊 #include<s…

Mac | macOs系統安裝Monuty解決外接u盤ntfs讀寫問題

問題 mac電腦的macOs系統無法將文件讀寫入外接u盤或硬盤中&#xff1b; 解決方案 安裝Monuty 官網&#xff1a;mounty官網 下載軟件 安裝其他配置 macbook:~ uwe$ brew install --cask macfuse macbook:~ uwe$ brew install gromgit/fuse/ntfs-3g-mac macbook:~ uwe$ brew…

【Vue】組件用法

【前言】 … 【目標】 1 了解組件間傳參 2 組件間自定義事件綁定與解綁 3 組件的事件總線,消息訂閱與發布的用法 4 組件插槽 一 組件間傳參 #mermaid-svg-CAQFgxRrMK5KRFOr {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merma…

機頂盒也可以跑量--上機指南

一、背景介紹 隨著科技的進步和智能設備的普及&#xff0c;機頂盒已不再是單純的電視接收器&#xff0c;而是逐漸演變成為家庭娛樂中心。越來越多的機頂盒支持各種應用、游戲和功能&#xff0c;使得用戶可以在大屏幕上享受更多樣化的內容。本指南將帶你深入了解如何讓你的機頂…

Spring中如何配置和使用Properties文件?

在Spring框架中&#xff0c;.properties 文件通常用于存儲配置信息&#xff0c;如數據庫連接、服務地址、應用參數等。以下是配置和使用 Properties 文件的詳細步驟&#xff1a; 1. 創建 Properties 文件 在項目的 src/main/resources 目錄下創建一個 .properties 文件&#…

價格預言機領導者 Pyth 與 Eclipse 平臺集成,為高頻 DeFi 應用提供支持

本篇文章將對這一戰略合作伙伴關系&#xff0c;以及 Pyth 網絡在 Eclipse 生態系統中扮演的關鍵角色進行深入探討。 目前&#xff0c;Pyth 價格數據已正式上線于 Eclipse 測試網。Eclipse 是首個結合了以太坊安全性、Solana 性能和 Celestia DA 的 Solana虛擬機(SVM) Layer2 方…

Key Chain has stopped 是什么

Key Chain has stopped 是一個特定的錯誤消息&#xff0c;通常出現在Android設備上。這個錯誤提示意味著設備上的“Key Chain”服務出現了問題&#xff0c;Key Chain服務在Android中負責管理設備的安全密鑰和證書&#xff0c;包括用戶的隱私密鑰、應用簽名密鑰等。當這個服務意…

無線麥克風哪個牌子性價比高?揭秘領夾麥克風性價比最高品牌

隨著自媒體行業的興起&#xff0c;現在視頻直播或者是個人Vlog都越來越受歡迎了&#xff0c;要想做好內容&#xff0c;除了畫面之外&#xff0c;聲音效果同樣重要。而我們手機上自帶的麥克風&#xff0c;容易受環境影響&#xff0c;特別是在戶外或者拍攝距離較遠時&#xff0c;…

微軟改進WSL子系統 新版將支持鏡像宿主機網絡接口及使用外部DNS

Windows SubSystem for Linux (即 WSL) 是微軟在 Windows 10/11 中開發的子系統功能&#xff0c;該功能允許用戶在 Windows 上安裝 Linux 系統和相關環境&#xff0c;對開發者來說可以構建 Linux 開發環境進行工作。不過 WSL 系統在功能上也有不少缺點&#xff0c;典型的就是默…

【Docker實戰】進入四大數據庫的命令行模式

上一篇我們講了docker exec命令&#xff0c;這一次我們使用docker exec命令來進入四大數據庫的命令行模式。 我們進行游戲開發或軟件開發是離不開四大數據庫的&#xff0c;這四大數據庫分別是關系型數據庫mysql、postgres&#xff0c;nosql數據庫redis、mongodb。將它們容器化…

TopK問題

前言&#xff1a;本篇對TopK問題的解答是介于堆的基礎上講的 TopK問題&#xff1a; 就是在許多數據中找到前K個最大的數據或者最小的數據 比如&#xff1a;專業前10、世界五百強、富豪榜、以及游戲排行榜等等 對于TopK問題&#xff1a;能想到的最簡單直接的方式就是排序解決,…