<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Kafka常見面試題解答

          共 3088字,需瀏覽 7分鐘

           ·

          2022-07-12 06:32

          1.Kafka中的ISR(InSyncRepli)、OSR(OutSyncRepli)、AR(AllRepli)代表什么?
          • ISR : 速率和leader相差低于10秒的follower的集合
          • OSR : 速率和leader相差大于10秒的follower
          • AR : 所有分區(qū)的follower
          2.Kafka中的HW、LEO等分別代表什么?
          • HW : 又名高水位,根據(jù)同一分區(qū)中,最低的LEO所決定
          • LEO : 每個分區(qū)的最高offset
          3.Kafka的用途有哪些?使用場景如何?
          1. 用戶追蹤:根據(jù)用戶在web或者app上的操作,將這些操作消息記錄到各個topic中,然后消費(fèi)者通過訂閱這些消息做實時的分析,或者記錄到HDFS,用于離線分析或數(shù)據(jù)挖掘
          2. 日志收集:通過kafka對各個服務(wù)的日志進(jìn)行收集,再開放給各個consumer
          3. 消息系統(tǒng):緩存消息
          4. 運(yùn)營指標(biāo):記錄運(yùn)營監(jiān)控數(shù)據(jù),收集操作應(yīng)用數(shù)據(jù)的集中反饋,如報錯和報告
          4.Kafka中是怎么體現(xiàn)消息順序性的?

          每個分區(qū)內(nèi),每條消息都有offset,所以只能在同一分區(qū)內(nèi)有序,但不同的分區(qū)無法做到消息順序性

          5.“消費(fèi)組中的消費(fèi)者個數(shù)如果超過topic的分區(qū),那么就會有消費(fèi)者消費(fèi)不到數(shù)據(jù)”這句話是否正確?

          對的,超過分區(qū)數(shù)的消費(fèi)者就不會再接收數(shù)據(jù)

          6.有哪些情形會造成重復(fù)消費(fèi)?或丟失信息?
          • 先處理后提交offset,會造成重讀消費(fèi)
          • 先提交offset后處理,會造成數(shù)據(jù)丟失
          7.Kafka 分區(qū)的目的?

          對于kafka集群來說,分區(qū)可以做到負(fù)載均衡,對于消費(fèi)者來說,可以提高并發(fā)度,提高讀取效率。

          8.Kafka 的高可靠性是怎么實現(xiàn)的?

          為了實現(xiàn)高可靠性,kafka使用了訂閱的模式,并使用isr和ack應(yīng)答機(jī)制,能進(jìn)入isr中的follower和leader之間的速率不會相差10秒

          • 當(dāng)ack=0時,producer不等待broker的ack,不管數(shù)據(jù)有沒有寫入成功,都不再重復(fù)發(fā)該數(shù)據(jù)
          • 當(dāng)ack=1時,broker會等到leader寫完數(shù)據(jù)后,就會向producer發(fā)送ack,但不會等follower同步數(shù)據(jù),如果這時leader掛掉,producer會對新的leader發(fā)送新的數(shù)據(jù),在old的leader中不同步的數(shù)據(jù)就會丟失
          • 當(dāng)ack=-1或者all時,broker會等到leader和isr中的所有follower都同步完數(shù)據(jù),再向producer發(fā)送ack,有可能造成數(shù)據(jù)重復(fù)
          9.topic的分區(qū)數(shù)可不可以增加?如果可以怎么增加?如果不可以,那又是為什么?

          可以增加

          bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-config --partitions 3
          10.topic的分區(qū)數(shù)可不可以減少?如果可以怎么減少?如果不可以,那又是為什么?

          不可以,先有的分區(qū)數(shù)據(jù)難以處理

          11.簡述Kafka的日志目錄結(jié)構(gòu)?

          每一個分區(qū)對應(yīng)一個文件夾,命名為topic-0,topic-1,每個文件夾內(nèi)有.index和.log文件

          12.如何解決消費(fèi)者速率低的問題?

          增加分區(qū)數(shù)和消費(fèi)者數(shù)

          13.Kafka的那些設(shè)計讓它有如此高的性能??
          1. kafka是分布式的消息隊列
          2. 對log文件進(jìn)行了segment,并對segment建立了索引
          3. (對于單節(jié)點(diǎn))使用了順序讀寫,速度可以達(dá)到600M/s
          4. 引用了zero拷貝,在os系統(tǒng)就完成了讀寫操作
          14.kafka啟動不起來的原因?

          在關(guān)閉kafka時,先關(guān)了zookeeper,就會導(dǎo)致kafka下一次啟動時,會報節(jié)點(diǎn)已存在的錯誤

          只要把zookeeper中的zkdata/version-2的文件夾刪除即可

          15.聊一聊Kafka Controller的作用?

          負(fù)責(zé)kafka集群的上下線工作,所有topic的副本分區(qū)分配和選舉leader工作

          16.Kafka中有那些地方需要選舉?這些地方的選舉策略又有哪些?

          在ISR中需要選擇,選擇策略為先到先得

          17.失效副本是指什么?有那些應(yīng)對措施?
          • 失效副本為速率比leader相差大于10秒的follower
          • 將失效的follower先提出ISR
          • 等速率接近leader10秒內(nèi),再加進(jìn)ISR
          18.Kafka消息是采用Pull模式,還是Push模式?
          • 在producer階段,是向broker用Push模式
          • 在consumer階段,是向broker用Pull模式

          在Pull模式下,consumer可以根據(jù)自身速率選擇如何拉取數(shù)據(jù),避免了低速率的consumer發(fā)生崩潰的問題

          但缺點(diǎn)是,consumer要時不時的去詢問broker是否有新數(shù)據(jù),容易發(fā)生死循環(huán),內(nèi)存溢出。

          學(xué)習(xí)資料:Java進(jìn)階視頻資源

          19.Kafka創(chuàng)建Topic時如何將分區(qū)放置到不同的Broker中?

          首先副本數(shù)不能超過broker數(shù)

          • 第一分區(qū)是隨機(jī)從Broker中選擇一個,然后其他分區(qū)相對于0號分區(qū)依次向后移
          • 第一個分區(qū)是從nextReplicaShift決定的,而這個數(shù)也是隨機(jī)產(chǎn)生的
          20.Kafka中的事務(wù)是怎么實現(xiàn)的?☆☆☆☆☆

          kafka事務(wù)有兩種:

          producer事務(wù)和consumer事務(wù)

          producer事務(wù)是為了解決kafka跨分區(qū)跨會話問題,kafka不能跨分區(qū)跨會話的主要問題是每次啟動的producer的PID都是系統(tǒng)隨機(jī)給的

          所以為了解決這個問題,我們就要手動給producer一個全局唯一的id,也就是transaction id 簡稱TID

          我們將TID和PID進(jìn)行綁定,在producer帶著TID和PID第一次向broker注冊時,broker就會記錄TID,并生成一個新的組件transaction_state用來保存TID的事務(wù)狀態(tài)信息。當(dāng)producer重啟后,就會帶著TID和新的PID向broker發(fā)起請求,當(dāng)發(fā)現(xiàn)TID一致時,producer就會獲取之前的PID,將覆蓋掉新的PID,并獲取上一次的事務(wù)狀態(tài)信息,從而繼續(xù)上次工作

          consumer事務(wù)相對于producer事務(wù)就弱一點(diǎn),需要先確保consumer的消費(fèi)和提交位置為一致且具有事務(wù)功能,才能保證數(shù)據(jù)的完整,不然會造成數(shù)據(jù)的丟失或重復(fù)

          21.Kafka中的分區(qū)器、序列化器、攔截器是否了解?它們之間的處理順序是什么?

          攔截器>序列化器>分區(qū)器

          22.Kafka生產(chǎn)者客戶端的整體結(jié)構(gòu)是什么樣子的?使用了幾個線程來處理?分別是什么?

          使用兩個線程:

          main線程和sender線程

          main線程會依次經(jīng)過攔截器,序列化器,分區(qū)器將數(shù)據(jù)發(fā)送到RecourdAccumlator(線程共享變量)。再由sender線程從RecourdAccumlator中拉取數(shù)據(jù)發(fā)送到kafka broker

          相關(guān)參數(shù):

          • batch.size:只有數(shù)據(jù)積累到batch.size之后,sender才會發(fā)送數(shù)據(jù)。
          • linger.ms:如果數(shù)據(jù)遲遲未達(dá)到batch.size,sender等待linger.time之后就會發(fā)送數(shù)據(jù)。
          23.消費(fèi)者提交消費(fèi)位移時提交的是當(dāng)前消費(fèi)到的最新消息的offset還是offset+1?

          offset + 1

          圖示:

          生產(chǎn)者發(fā)送數(shù)據(jù)offset是從0開始的

          消費(fèi)者消費(fèi)的數(shù)據(jù)offset是從offset+1開始的

          來源:blog.csdn.net/C_Xiang_Falcon/

          article/details/100917145

          轉(zhuǎn)自:Java知音


          瀏覽 41
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  特级成人毛片 | 久久久久国际精品视频 | 国产有码视频 | 亚洲国产精品毛片一区二区三区 | 国产激情视频手机在线 |