主頁 > 資料庫 > Kafka面試題

Kafka面試題

2023-06-11 08:03:23 資料庫

kafka 都有哪些特點?

高吞吐量,低延遲
可以熱擴展
并發度高
具有容錯性(掛的只剩1臺也能正常跑)
可靠性高

在哪些場景下會選擇 kafka? kafka的一些應用

  • 日志收集:一個公司可以用kafka可以收集各種服務的log,通過kafka以統一介面服務的方式開放給各種consumer,例如hadoop、HBase、Solr等,
  • 訊息系統:解耦和生產者和消費者、快取訊息等,
  • 用戶行為跟蹤:kafka經常被用來記錄web用戶或者app用戶的各種活動,如瀏覽網頁、搜索、點擊等活動,這些活動資訊被各個服務器發布到kafka的topic中,然后訂閱者通過訂閱這些topic來做實時的監控分析,或者裝載到hadoop、資料倉庫中做離線分析和挖掘,
  • 運營指標:kafka也經常用來記錄運營監控資料,包括收集各種分布式應用的資料,生產各種操作的集中反饋,比如報警和報告,
  • 作為流式處理的資料源:比如spark streaming和 Flink

kafka 磁區的目的?

磁區對于kafka集群的好處是:實作負載均衡,

磁區對于消費者和生產者來說,可以提高并行度,提高效率,--------提高消費者的并行度---》消費者組

kafka 是如何做到訊息的有序性?

kafka中的每個 partition 中的訊息在寫入時都是有序的(不斷追加),而且單獨一個 partition只能由一個消費者去消費,可以在里面保證訊息的順序性,但是磁區之間的訊息是不保證有序的,

kafka 的高可靠性是怎么實作的?

多副本存盤
Producer發送資料時可配置ack=all, 并且里面有hw 還有leader-epoch

kafka資料一致性原理

一致性指的是不論在什么情況下,Consumer都能讀到一致的資料,

HW 高水位線 在0.11版本之前,只用了高水位線來保證,但是這個里面其實是會出現一些問題的,比如資料丟失,即使是ack等于-1的情況下,也可能會丟資料
LEO等

在0.11版本之后,新加了一個角色叫leader的紀元號,根據高水位線和紀元號來處理,再配上ack=-1的時候,基本上就不會丟資料了,,,,

kafka 在什么情況下會出現訊息丟失?

  • topic的副本如果只有1個,那么一旦這個副本所在broker服務器宕機,則有可能丟失;
  • producer往kafka寫入資料時,如果確認機制引數acks !=all,也可能會造成資料丟失;
  • 不清潔選舉機制如果開啟,也可能造成資料丟失(不清潔選舉就是說在所有ISR副本全部宕機的情況下,可以讓OSR副本成為Leader,而OSR中的資料顯然不全;那么,就算之前的Leader重新上線了,也會被進行日志截斷)

怎么盡可能保證 kafka 的可靠性

副本數>1
ack=all
min.insync.replicas >= 2

資料傳輸的語意有幾種?

資料傳輸的語意通常有以下三種級別:
設定消費者里面有enable.auto.commit = true/false

  • 最多一次: 訊息不會被重復發送,最多被傳輸一次,但也有可能一次不傳輸
  • 最少一次: 訊息不會被漏發送,最少被傳輸一次,但也有可能被重復傳輸
  • 精確一次(Exactly once): 不會漏傳輸也不會重復傳輸

kafka 消費者是否可以消費指定磁區的訊息?

可以,通過assign的方式指定要消費的topic及磁區
如果我是subscribe 可以在在均衡監聽器的第二個重寫方法中使用

kafka 消費者是否從指定偏移量開始消費?

可以,通過seek指定偏移量后再開始消費

客戶端操作kafka訊息是采用poll模式,還是push模式?

kafka最初考慮的問題是,customer應該從brokes拉取訊息還是brokers將訊息推送到consumer,也就是pull還是push,在這方面,Kafka遵循了一種大部分訊息系統共同的傳統的設計:producer將訊息推送到broker,consumer從broker拉取訊息,

一些訊息系統比如Scribe和Apache Flume采用了push模式,將訊息推送到下游的consumer,這樣做有好處也有壞處:由broker決定訊息推送的速率,對于不同消費速率的consumer就不太好處理了,訊息系統都致力于讓consumer以最大的速率最快速的消費訊息,但不幸的是,push模式下,當broker推送的速率遠大于consumer消費的速率時,consumer恐怕就要崩潰了,最終Kafka還是選取了傳統的pull模式,

pull模式的另外一個好處是consumer可以自主決定是否批量的從broker拉取資料,push模式必須在不知道下游consumer消費能力和消費策略的情況下決定是立即推送每條訊息還是快取之后批量推送,如果為了避免consumer崩潰而采用較低的推送速率,將可能導致一次只推送較少的訊息而造成浪費,Pull模式下,consumer就可以根據自己的消費能力去決定這些策略,

pull有個缺點是,如果broker沒有可供消費的訊息,將導致consumer不斷在回圈中輪詢,直到新訊息到達,為了避免這點,Kafka有個引數可以讓consumer阻塞直到新訊息到達(當然也可以阻塞直到訊息的數量達到某個特定的量這樣就可以批量拉取)

kafka 高效檔案存盤設計特點

Kafka把topic中一個parition大檔案分成多個小檔案段,通過多個小檔案段,就容易定期清除或洗掉已經消費完檔案,減少磁盤占用, 默認存盤時間7天
通過索引資訊可以快速定位message和確定response的最大大小,
通過index元資料全部映射到memory,可以避免segment file的IO磁盤操作,
通過索引檔案稀疏存盤,可以大幅降低index檔案元資料占用空間大小

kafka創建Topic時如何將磁區分配給各Broker

  • 副本因子不能大于 Broker 的個數;
  • 第1個磁區(partition_0)的第1個副本放置位置是隨機從brokerList選擇的;
  • 其他磁區的第一個副本放置位置相對于partition_0依次往后移,

如果我們有5個 Broker,5個磁區,假設第1個磁區放在第四個 Broker 上,那么第2個磁區將會放在第五個 Broker 上;第3個磁區將會放在第一個 Broker 上;第4個磁區將會放在第二個 Broker 上,依次類推;

  • 各磁區剩余的副本相對于第一個副本放置位置由一個亂數nextReplicaShift決定;

kafka的磁區分布策略是怎樣的?

磁區分布的計算策略如下

  • 副本因子不能大于 Broker 的個數;
  • 第一個磁區(編號為0)的第一個副本放置位置是隨機從 brokerList 選擇的;
  • 其他磁區的第一個副本放置位置相對于第0個磁區依次往后移,也就是如果我們有5個 Broker,5個磁區,假設第1個磁區放在第四個 Broker 上,那么第2個磁區將會放在第五個 Broker 上;第3個磁區將會放在第一個 Broker 上;第4個磁區將會放在第二個 Broker 上,依次類推;
  • 剩余副本相對于第1個副本放置位置是由一個亂數nextReplicaShift 決定

kafka磁區數可以增加或減少嗎?為什么?

kafka允許對topic動態增加磁區,但不支持減少磁區

Kafka 磁區資料不支持減少是由很多原因的,比如減少的磁區其資料放到哪里去?是洗掉,還是保留?洗掉的話,那么這些沒消費的訊息不就丟了,如果保留這些訊息如何放到其他磁區里面?追加到其他磁區后面的話那么就破壞了 Kafka 單個磁區的有序性,如果要保證洗掉磁區資料插入到其他磁區保證有序性,那么實作起來邏輯就會非常復雜,

kafka監控插件都有哪些?

kafka manager
kafka-offset-monitor :主要做消費者偏移量的監控
kafka-eagle:功能很強大!(現已改名為:EFAK —— eagle for apache kafka)

kafka 的消費者組磁區分配再均衡

在Kafka中,當有新消費者加入或者訂閱的topic數發生變化時,會觸發rebalance(再均衡:在同一個消費者組當中,磁區的所有權從一個消費者轉移到另外一個消費者)機制,Rebalance顧名思義就是重新均衡消費者消費,
Rebalance的程序如下:

  • 第一步:所有成員都向coordinator發送請求,請求入組,一旦所有成員都發送了請求,coordinator會從中選擇一個consumer擔任leader的角色,并把組成員資訊以及訂閱資訊發給leader,
  • 第二步:leader開始分配消費方案,指明具體哪個consumer負責消費哪些topic的哪些partition,一旦完成分配,leader會將這個方案發給coordinator,coordinator接收到分配方案之后會把方案發給各個consumer,這樣組內的所有成員就都知道自己應該消費哪些磁區了,

對于rebalance來說,group coordinator起著至關重要的作用

消費者和消費者組有什么關系?

每個消費者從屬于消費組,消費者通過一個引數:group.id 來指定所屬的組;
可以把多個消費者的group.id設定成同一個值,那么這幾個消費者就屬于同一個組;
比如,讓c-1,c-2,c-3的group.id=“g1",那么c-1,c-2,c-3這3個消費者都屬于g1消費組;
一個消費者,在本質上究竟如何定義:一個消費者可以是一個執行緒,也可以是一個行程,本質上就是一個consumer物件實體!
消費者組的意義:(可以讓多個消費者組成一個組,并共同協作來消費資料,提高消費并行度)一個消費組中的各消費者,在消費一個topic的資料時,互相不重復!如果topic的某磁區被組中的一個消費消費,那么,其他消費者就不會再消費這個磁區了;

kafka新建的磁區會在哪創建存盤目錄

log.dirs引數,其值是 kafka 資料的存放目錄;
這個引數可以配置多個目錄,目錄之間使用逗號分隔,通常這些目錄是分布在不同的磁盤上用于提高讀寫性能,
如果log.dirs引數只配置了一個目錄,那么分配到各個 broker 上的磁區肯定只能在這個目錄下創建檔案夾用于存放資料,
但是如果log.dirs引數配置了多個目錄,那么 kafka 會在哪個檔案夾中創建磁區目錄呢?答案是:Kafka 會在含有磁區目錄最少的檔案夾中創建新的磁區目錄,磁區目錄名為 Topic名+磁區ID,
注意,是磁區檔案夾總數最少的目錄,而不是磁盤使用量最少的目錄!也就是說,如果你給 log.dirs 引數新增了一個新的磁盤,新的磁區目錄肯定是先在這個新的磁盤上創建直到這個新的磁盤目錄擁有的磁區目錄不是最少為止,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/554879.html

標籤:大數據

上一篇:MySQL安裝

下一篇:返回列表

標籤雲
其他(160772) Python(38219) JavaScript(25492) Java(18216) C(15237) 區塊鏈(8270) C#(7972) AI(7469) 爪哇(7425) MySQL(7245) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4589) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2435) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) 功能(1967) HtmlCss(1961) Web開發(1951) C++(1933) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1880) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • Kafka面試題

    # kafka 都有哪些特點? 高吞吐量,低延遲 可以熱擴展 并發度高 具有容錯性(掛的只剩1臺也能正常跑) 可靠性高 # 在哪些場景下會選擇 kafka? kafka的一些應用 - 日志收集:一個公司可以用kafka可以收集各種服務的log,通過kafka以統一介面服務的方式開放給各種consum ......

    uj5u.com 2023-06-11 08:03:23 more
  • MySQL安裝

    ## 一、MySQL在線方式安裝 1. 檢查自己的電腦是否已經安裝MySQL ```sh yum list installed | grep mysql ``` > (如果已經安裝,存在安裝記錄,通過下面命令洗掉 yum -y remove 版本名稱) 2. mysql官網下載mysql-commu ......

    uj5u.com 2023-06-11 08:03:15 more
  • 【后端面經-資料庫】MySQL的存盤引擎簡介

    [TOC](【后端面經-資料庫】MySQL的存盤引擎簡介) # MySQL的存盤引擎 mysql主要有四類存盤引擎,目前主要使用InnoDB作為存盤引擎。 ## 0. 存盤引擎的查看和修改 - 查看當前資料庫的默認存盤引擎 ```sql show variables like 'default_st ......

    uj5u.com 2023-06-10 08:45:09 more
  • 資料庫事務隔離級別

    標準隔離級別 讀未提交、讀已提交、可重復讀、串行化 串行化 對事務中所有讀寫的資料加上讀鎖、寫鎖、范圍鎖。所以沖突的事務必須同步執行。 //console1 start transaction ; select * from transaction_test where `key`=1; updat ......

    uj5u.com 2023-06-10 08:45:06 more
  • Hive執行計劃之什么是hiveSQL向量化模式及優化詳解

    Hive開啟向量化模式也是hiveSQL優化方法中的一種,可以提升hive查詢速率,也叫hive矢量化。 問題1:那么什么是hive向量化模式呢? 問題2:hive向量化什么情況下可以被使用,或者說它有哪些使用場景呢? 問題3:如何查看hive向量化使用的相關資訊? ## 1.什么是hive向量化模 ......

    uj5u.com 2023-06-10 08:45:01 more
  • Kafka關鍵原理

    # 日志分段切分條件 日志分段檔案切分包含以下4個條件,滿足其一即可: 1. 當前日志分段檔案的大小超過了broker端引數 `log.segment.bytes` 配置的值。`log.segment.bytes`引數的默認值為 `1073741824`,即1GB 2. 當前日志分段中訊息的最小時間 ......

    uj5u.com 2023-06-10 08:44:52 more
  • 華為云新一代分布式資料庫GaussDB,給世界一個更優選擇

    摘要:與伙伴一起,共建繁榮開放的GaussDB資料庫新生態。 本文分享自華為云社區《華為云新一代分布式資料庫GaussDB,給世界一個更優選擇》,作者:華為云頭條。 6月7日,在華為全球智慧金融峰會2023上,華為常務董事、華為云CEO張平安以“一切皆服務,做好金融數字化云底座和使能器”為主題發表演 ......

    uj5u.com 2023-06-10 08:44:29 more
  • oracle 之存盤程序 begin ...... ; ...... end

    點擊查看代碼 ``` begin merge into ly_yjs_hxsj.T_XSGL_XSXX_CZRZ rz using ( select a.XS_ID xsid, xh, xm, '02' as bglx,'修改學生:'||xm||':學位操作撤銷學位證書號,原學位證書號:'|| BJ ......

    uj5u.com 2023-06-10 08:44:22 more
  • 分布式資料庫 Join 查詢設計與實作淺析

    本文記錄 Mysql 分庫分表 和 Elasticsearch Join 查詢的實作思路,了解分布式場景資料處理的設計方案。文章從常用的關系型資料庫 MySQL 的分庫分表Join 分析,再到非關系型 ElasticSearch 來分析 Join 實作策略。逐步深入Join 的實作機制。 ......

    uj5u.com 2023-06-10 08:44:17 more
  • openEuler22+GreatSQL+dbops玩轉MGR

    > 芬達,《芬達的資料庫學習筆記》公眾號作者,開源愛好者,擅長 MySQL、ansible。 ## 背景 ### openEuler 是什么 openEuler22.03 LTS 是 openEuler 社區于 2022 年 3 月發布的開源作業系統(從系統版本的命名不難發現吧)。openEuler ......

    uj5u.com 2023-06-10 08:44:10 more