一次違反常規的Java大廠面試經歷,重難點整理

目錄

  • Kafka的基本介紹
  • Kafka的設計原理分析
  • Kafka數據傳輸的事務特點
  • Kafka消息存儲格式
  • 副本(replication)策略
  • Kafka消息分組,消息消費原理
  • Kafak順序寫入與數據讀取
  • 消費者(讀取數據)

Kafka的基本介紹

Kafka是最初由Linkedin公司開發,是一個分布式、分區的、多副本的、多訂閱者,基于zookeeper協調的分布式日志系統(也可以當做MQ系統),常見可以用于web/nginx日志、訪問日志,消息服務等等,Linkedin于2010年貢獻給了Apache基金會并成為頂級開源項目。

主要應用場景是:日志收集系統和消息系統。

Kafka主要設計目標如下:

  • 以時間復雜度為O(1)的方式提供消息持久化能力,即使對TB級以上數據也能保證常數時間的訪問性能。
  • 高吞吐率。即使在非常廉價的商用機器上也能做到單機支持每秒100K條消息的傳輸。
  • 支持Kafka Server間的消息分區,及分布式消費,同時保證每個partition內的消息順序傳輸。
  • 同時支持離線數據處理和實時數據處理。

Kafka的設計原理分析

一個典型的kafka集群中包含若干producer,若干broker,若干consumer,以及一個Zookeeper集群。Kafka通過Zookeeper管理集群配置,選舉leader,以及在consumer group發生變化時進行rebalance。producer使用push模式將消息發布到broker,consumer使用pull模式從broker訂閱并消費消息。

Kafka專用術語:

  • Broker:消息中間件處理結點,一個Kafka節點就是一個broker,多個broker可以組成一個Kafka集群。
  • Topic:一類消息,Kafka集群能夠同時負責多個topic的分發。
  • Partition:topic物理上的分組,一個topic可以分為多個partition,每個partition是一個有序的隊列。
  • Segment:partition物理上由多個segment組成。
  • offset:每個partition都由一系列有序的、不可變的消息組成,這些消息被連續的追加到partition中。partition中的每個消息都有一個連續的序列號叫做offset,用于partition唯一標識一條消息。
  • Producer:負責發布消息到Kafka broker。
  • Consumer:消息消費者,向Kafka broker讀取消息的客戶端。
  • Consumer Group:每個Consumer屬于一個特定的Consumer Group。

Kafka數據傳輸的事務特點

  • at most once:最多一次,這個和JMS中"非持久化"消息類似,發送一次,無論成敗,將不會重發。消費者fetch消息,然后保存offset,然后處理消息;當client保存offset之后,但是在消息處理過程中出現了異常,導致部分消息未能繼續處理。那么此后"未處理"的消息將不能被fetch到,這就是"at most once"。
  • at least once:消息至少發送一次,如果消息未能接受成功,可能會重發,直到接收成功。消費者fetch消息,然后處理消息,然后保存offset。如果消息處理成功之后,但是在保存offset階段zookeeper異常導致保存操作未能執行成功,這就導致接下來再次fetch時可能獲得上次已經處理過的消息,這就是"at least once",原因offset沒有及時的提交給zookeeper,zookeeper恢復正常還是之前offset狀態。
  • exactly once:消息只會發送一次。kafka中并沒有嚴格的去實現(基于2階段提交),我們認為這種策略在kafka中是沒有必要的。

通常情況下"at-least-once"是我們首選。

Kafka消息存儲格式

Topic & Partition

一個topic可以認為一個一類消息,每個topic將被分成多個partition,每個partition在存儲層面是append log文件。

在Kafka文件存儲中,同一個topic下有多個不同partition,每個partition為一個目錄,partiton命名規則為topic名稱+有序序號,第一個partiton序號從0開始,序號最大值為partitions數量減1。

  • 每個partion(目錄)相當于一個巨型文件被平均分配到多個大小相等segment(段)數據文件中。但每個段segment file消息數量不一定相等,這種特性方便old segment file快速被刪除。
  • 每個partiton只需要支持順序讀寫就行了,segment文件生命周期由服務端配置參數決定。

這樣做的好處就是能快速刪除無用文件,有效提高磁盤利用率。

  • segment file組成:由2大部分組成,分別為index file和data file,此2個文件一一對應,成對出現,后綴".index"和“.log”分別表示為segment索引文件、數據文件.
  • segment文件命名規則:partion全局的第一個segment從0開始,后續每個segment文件名為上一個segment文件最后一條消息的offset值。數值最大為64位long大小,19位數字字符長度,沒有數字用0填充。

最后分享一波我的面試寶典——一線互聯網大廠Java核心面試題庫

以下是我個人的一些做法,希望可以給各位提供一些幫助:

點擊《一線互聯網大廠Java核心面試題庫》即可免費領取,整理了很長一段時間,拿來復習面試刷題非常合適,其中包括了Java基礎、異常、集合、并發編程、JVM、Spring全家桶、MyBatis、Redis、數據庫、中間件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且還會持續的更新…可star一下!

image

283頁的Java進階核心pdf文檔

Java部分:Java基礎,集合,并發,多線程,JVM,設計模式

數據結構算法:Java算法,數據結構

開源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架構設計,Redis緩存,Zookeeper,kafka,RabbitMQ,負載均衡等

微服務部分:SpringBoot,SpringCloud,Dubbo,Docker

image

還有源碼相關的閱讀學習

image

…(img-PWPB8R6G-1626257210895)]

還有源碼相關的閱讀學習

[外鏈圖片轉存中…(img-OvpzyqGf-1626257210896)]

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

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

相關文章

一步搞定你疑惑的數據結構與算法系列,原理+實戰講解

螞蟻金服一面: 下午杭州的電話,問有沒有空,果斷有空,雖然感覺略顯緊張,有點懵逼。 面試的題目: HashMap和Hashtable的區別實現一個保證迭代順序的HashMap說一說排序算法,穩定性,復…

互斥量(互斥鎖)

一、互斥量mutex Linux提供一把互斥鎖mutex(也稱之為互斥量)每個線程在對資源操作前都嘗試先加鎖,成功加鎖才能操作,操作結束后解鎖。資源還是共享的,線程間也還是競爭的,但通過鎖將資源的訪問變為互斥操作,而后與時間…

一眼就能看懂的Java自學手冊,終局之戰

珍藏版(1)——Mybatis入門 1.什么是MyBatis 2.為什么我們要用Mybatis? 3.Mybatis快速入門 3.1 導入開發包 3.2準備測試工作 3.3 創建mybatis配置文件 3.4 編寫工具類測試是否獲取到連接 3.5 創建實體與映射關系文件 3.6 編寫DAO 4.Mybatis工作…

Centos 6.x

1. centos升級gcc教程:鏈接 2. 虛擬機中的Centos聯通網絡:鏈接 3. 虛擬機安裝Centos7系統教程:鏈接

Java虛擬機學習集錦是我攢來的,帶你碾壓面試官!

1. 一致性(Consistency) 一致性(Consistency)是指多副本(Replications)問題中的數據一致性。可以分為強一致性、順序一致性與弱一致性。 1.1 強一致性(Strict Consistency) 也稱為…

Java虛擬機學習集錦是我攢來的,看這篇文章準沒錯!

一面 介紹一下自己 問項目經歷, 聊"數據同步" 接著聊上了 K8S 的項目 有沒有什么鉆研得比較深得技術?(大佬:kubernetes, golang, prometheus, java) kubernetes 的架構是怎么樣的? 這個問題很大,拆成 …

文件描述符、函數open和openat

文件描述符 pcb&#xff1a;結構體一個進程有一個文件描述符&#xff1a;1024文件描述符&#xff1a;尋找磁盤文件函數open和openat 函數原型&#xff1a; include<sys/stst.h> #include<fcntl.h>int open(const char *pathname, int flags); int open(const ch…

Java這些高端技術只有你還不知道,移動架構師成長路線

并發編程共享模型篇 并發編程概覽進程與線程Java線程共享模型之管程共享模型之內存共享模型之無鎖共享模型之不可變共享模型之工具 共享模型之管程 原理之 Monitor(鎖) 原理之偽共享 模式篇—正確姿勢 同步模式之保護性智停同步模式之Blking同步模式之順序控制異步模式之生產…

函數read、write、lseek

函數原型&#xff1a; #include<unistd.h> ssize_t read(int fd, void *buf, size_t count);返回值&#xff1a;讀到的字節數&#xff0c;若已到文件尾&#xff0c;返回0&#xff1b;若出錯&#xff0c;返回-1 參數&#xff1a; fd&#xff1a;函數open的返回值buf&a…

Java這些高端技術只有你還不知道,薪資翻倍

正文 我的第一份工作是在一家外企&#xff0c;當時抱著“逃離”上海的想法去了二線城市的分公司&#xff0c;但是管理文化氛圍跟總部幾乎都是一樣的&#xff0c;這份工作經歷對我后面的工作不論是做事風格、習慣上還是思考問題的方式方法上都有很大的影響。后面陸續進入國企&a…

函數dup和dup2

函數原型&#xff1a; #include<unistd.h> int dup(int oldfd);返回值&#xff1a;若成功&#xff0c;返回新的文件描述符&#xff1b;若出錯&#xff0c;返回-1 參數&#xff1a; oldfd&#xff1a;要復制的文件描述符dup調用成功&#xff1a;有兩個文件描述符指向同…

Java進階面試資料無償分享!真香系列

8-22 投遞簡歷 8-24 一面&#xff08;大概1h50min&#xff09; 0、currenthashmap怎么擴容的&#xff1f;fwn為什么固定hash -1&#xff0c;這樣設計有什么好處&#xff1f;幫助擴容是發生在什么階段?讀線程和寫線程都會幫助擴容嗎&#xff1f;擴容的時候任務具體怎么協調的&…

Java通用流行框架大全,絕對干貨

Java如何入門&#xff1f; 1、建立好開發環境 首先建立好開發環境非常重要&#xff0c;工欲善其事&#xff0c;必先利其器。做任何開發&#xff0c;首先就是要把這個環境準備好&#xff0c;之后就可以去做各種嘗試&#xff0c;嘗試過程中就能逐漸建立信心。初學者往往在環境配…

Java集合類中絕對占有一席之地的List,漲薪7K!

一、先來解讀&#xff1a;23種設計模式要點 1.單例模式&#xff08;Singleton Pattern&#xff09; 2.工廠模式 3.抽象工廠模式&#xff08;Abstract Factory Pattern&#xff09; 4.模板方法模式&#xff08;Template Method Pattern&#xff09; 5.建造者模式&#xff08;Bu…

Java面試10大知識點總結寶典助你通關!已拿意向書!

Java基礎 1.Java語言的三大特性 2.Java語言主要特性 3. JDK和JRE有什么區別 4.Java基本數據類型及其封裝類 5.如果main方法被聲明為private會怎樣? 6.說明- -下public static void main(String argsQ])這段聲明里每個關鍵字的作用 7.與equals的區別 8.Object有哪些公用方法 9.…

互斥鎖、條件變量

一、互斥鎖 1. 函數原型&#xff1a; pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); pthread_mutex_destroy(pthread_mutex_t *mutex); 分析&#xff1a; pthread_mutex_t 類型&#xff0c;其本質是一個結構體&#xf…

Java面試你必須要知道的那些知識,深夜思考

如何提升自己的實力&#xff1f; Step 1&#xff1a;梳理自己的知識 對照下面這份學習大綱&#xff0c;梳理出自己的知識盲區&#xff0c;這份大綱里面的技術點完全對標P7崗的主流技術&#xff0c;因此這是一份很好的知識大綱筆記。 Step 2&#xff1a;查漏補缺&#xff0c;夯…

Java面試你必須要知道的那些知識,面試建議

二、面試題 面&#xff1a;考你幾個紅黑樹的知識點&#x1f980; 紅黑樹的數據結構都用在哪些場景&#xff0c;有什么好處&#xff1f;紅黑樹的時間復雜度是多少&#xff1f;紅黑樹中插入新的節點時怎么保持平衡&#xff1f; 面&#xff1a;2-3樹都是不沒看&#xff0c;回去…

存儲映射I/O(一)

一、存儲映射I/O 存儲映射I/O使一個磁盤文件與存儲空間中的一個緩沖區映射&#xff0c;于是當從緩沖區中取數據&#xff0c;就相當于讀文件中的相應字節。于此類似&#xff0c;將數據存入緩沖區&#xff0c;則相應的字節就自動寫入文件&#xff0c;這樣&#xff0c;就可在不不…

【絕對干貨】kafkastream廣告

Java如何入門&#xff1f; 1、建立好開發環境 首先建立好開發環境非常重要&#xff0c;工欲善其事&#xff0c;必先利其器。做任何開發&#xff0c;首先就是要把這個環境準備好&#xff0c;之后就可以去做各種嘗試&#xff0c;嘗試過程中就能逐漸建立信心。初學者往往在環境配…