1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        《面試八股文》之 Kafka 21卷

        共 12306字,需瀏覽 25分鐘

         ·

        2021-07-16 16:18

        微信公眾號(hào):Java學(xué)習(xí)之道
        關(guān)注選擇“ 星標(biāo) ”, 重磅干貨,第一 時(shí)間送達(dá)!
        [如果你覺(jué)得文章對(duì)你有幫助,歡迎關(guān)注,在看,點(diǎn)贊]


        大家好,我是 moon,作為在消息中間件中擁有神一樣地位的 kafka,你真的了解它嗎?

        其他技術(shù)干貨系列文章請(qǐng)關(guān)注公號(hào)[Java學(xué)習(xí)之道]獲取~



        • 1.什么是消息中間件?

        • 2.kafka 是什么?有什么作用?

        • 3.kafka 的架構(gòu)是怎么樣的?

        • 4.Kafka Replicas是怎么管理的?

        • 5.如何確定當(dāng)前能讀到哪一條消息?

        • 6.生產(chǎn)者發(fā)送消息有哪些模式?

        • 7.發(fā)送消息的分區(qū)策略有哪些?

        • 8.Kafka 支持讀寫(xiě)分離嗎?為什么?

        • 9.那 Kafka 是怎么去實(shí)現(xiàn)負(fù)載均衡的?

        • 10.Kafka 的負(fù)責(zé)均衡會(huì)有什么問(wèn)題呢?

        • 11.Kafka 的可靠性是怎么保證的?

        • 12.Kafka 的消息消費(fèi)方式有哪些?

        • 13.分區(qū)再分配是做什么的?解決了什么問(wèn)題?

        • 14.副本 leader 是怎么選舉的?

        • 15.分區(qū)數(shù)越多越好嗎?吞吐量就會(huì)越高嗎?

        • 16.如何增強(qiáng)消費(fèi)者的消費(fèi)能力?

        • 17.消費(fèi)者與 topic 的分區(qū)分配策略有哪些?

        • 18.kafka 控制器是什么?有什么作用

        • 19.kafka 控制器是怎么進(jìn)行選舉的?

        • 20.kafka 為什么這么快?

        • 21.什么情況下 kafka 會(huì)丟失消息?

        1.什么是消息中間件?

        消息中間件是基于隊(duì)列與消息傳遞技術(shù),在網(wǎng)絡(luò)環(huán)境中為應(yīng)用系統(tǒng)提供同步或異步、可靠的消息傳輸?shù)闹涡攒浖到y(tǒng)。

        消息中間件利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成。通過(guò)提供消息傳遞和消息排隊(duì)模型,它可以在分布式環(huán)境下擴(kuò)展進(jìn)程間的通信。

        2.kafka 是什么?有什么作用?

        Kafka 是一個(gè)分布式的流式處理平臺(tái),它以高吞吐、可持久化、可水平擴(kuò)展、支持流數(shù)據(jù)處理等多種特性而被廣泛使用

        主要功能體現(xiàn)于三點(diǎn):

        • 消息系統(tǒng):kafka與傳統(tǒng)的消息中間件都具備系統(tǒng)解耦、冗余存儲(chǔ)、流量削峰、緩沖、異步通信、擴(kuò)展性、可恢復(fù)性等功能。與此同時(shí),kafka還提供了大多數(shù)消息系統(tǒng)難以實(shí)現(xiàn)的消息順序性保障及回溯性消費(fèi)的功能。
        • 存儲(chǔ)系統(tǒng):kafka把消息持久化到磁盤,相比于其他基于內(nèi)存存儲(chǔ)的系統(tǒng)而言,有效的降低了消息丟失的風(fēng)險(xiǎn)。這得益于其消息持久化和多副本機(jī)制。也可以將kafka作為長(zhǎng)期的存儲(chǔ)系統(tǒng)來(lái)使用,只需要把對(duì)應(yīng)的數(shù)據(jù)保留策略設(shè)置為“永久”或啟用主題日志壓縮功能。
        • 流式處理平臺(tái):kafka為流行的流式處理框架提供了可靠的數(shù)據(jù)來(lái)源,還提供了一個(gè)完整的流式處理框架,比如窗口、連接、變換和聚合等各類操作。

        3.kafka 的架構(gòu)是怎么樣的?

        一個(gè)典型的 kafka 體系架構(gòu)包括若干 Producer、若干 Consumer、以及一個(gè) Zookeeper 集群(在2.8.0版本中移,除了 Zookeeper,通過(guò) KRaft 進(jìn)行自己的集群管理)

        Producer 將消息發(fā)送到 Broker,Broker 負(fù)責(zé)將受到的消息存儲(chǔ)到磁盤中,而 Consumer 負(fù)責(zé)從 Broker 訂閱并消費(fèi)消息。

        Kafka 基本概念:

        • Producer :生產(chǎn)者,負(fù)責(zé)將消息發(fā)送到 Broker
        • Consumer :消費(fèi)者,從 Broker 接收消息
        • Consumer Group :消費(fèi)者組,由多個(gè) Consumer 組成。消費(fèi)者組內(nèi)每個(gè)消費(fèi)者負(fù)責(zé)消費(fèi)不同分區(qū)的數(shù)據(jù),一個(gè)分區(qū)只能由一個(gè)組內(nèi)消費(fèi)者消費(fèi);消費(fèi)者組之間互不影響。所有的消費(fèi)者都屬于某個(gè)消費(fèi)者組,即消費(fèi)者組是邏輯上的一個(gè)訂閱者。
        • Broker :可以看做一個(gè)獨(dú)立的 Kafka 服務(wù)節(jié)點(diǎn)或 Kafka 服務(wù)實(shí)例。如果一臺(tái)服務(wù)器上只部署了一個(gè) Kafka 實(shí)例,那么我們也可以將 Broker 看做一臺(tái) Kafka 服務(wù)器。
        • Topic :一個(gè)邏輯上的概念,包含很多 Partition,同一個(gè) Topic 下的 Partiton 的消息內(nèi)容是不相同的
        • Partition :為了實(shí)現(xiàn)擴(kuò)展性,一個(gè)非常大的 topic 可以分布到多個(gè) broker 上,一個(gè) topic 可以分為多個(gè) partition,每個(gè) partition 是一個(gè)有序的隊(duì)列。
        • Replica :副本,同一分區(qū)的不同副本保存的是相同的消息,為保證集群中的某個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),該節(jié)點(diǎn)上的 partition 數(shù)據(jù)不丟失,且 kafka 仍然能夠繼續(xù)工作,kafka 提供了副本機(jī)制,一個(gè) topic 的每個(gè)分區(qū)都有若干個(gè)副本,一個(gè) leader 和若干個(gè) follower。
        • Leader :每個(gè)分區(qū)的多個(gè)副本中的"主副本",生產(chǎn)者以及消費(fèi)者只與 Leader 交互
        • Follower :每個(gè)分區(qū)的多個(gè)副本中的"從副本",負(fù)責(zé)實(shí)時(shí)從 Leader 中同步數(shù)據(jù),保持和 Leader 數(shù)據(jù)的同步。Leader 發(fā)生故障時(shí),從 Follower 副本中重新選舉新的 Leader 副本對(duì)外提供服務(wù)。

        4.Kafka Replicas是怎么管理的?

        • AR:分區(qū)中的所有 Replica 統(tǒng)稱為 AR
        • ISR:所有與 Leader 副本保持一定程度同步的Replica(包括 Leader 副本在內(nèi))組成 ISR
        • OSR:與 Leader 副本同步滯后過(guò)多的 Replica 組成了 OSR

        Leader 負(fù)責(zé)維護(hù)和跟蹤 ISR 集合中所有 Follower 副本的滯后狀態(tài),當(dāng) Follower 副本落后過(guò)多時(shí),就會(huì)將其放入 OSR 集合,當(dāng) Follower 副本追上了 Leader 的進(jìn)度時(shí),就會(huì)將其放入 ISR 集合。

        默認(rèn)情況下,只有 ISR 中的副本才有資格晉升為 Leader。

        5.如何確定當(dāng)前能讀到哪一條消息?

        分區(qū)相當(dāng)于一個(gè)日志文件,我們先簡(jiǎn)單介紹幾個(gè)概念

        如上圖是一個(gè)分區(qū)日志文件

        • 標(biāo)識(shí)共有7條消息,offset (消息偏移量)分別是0~6
        • 0 代表這個(gè)日志文件的開(kāi)始
        • HW(High Watermark) 為4,0~3 代表這個(gè)日志文件可以消費(fèi)的區(qū)間,消費(fèi)者只能消費(fèi)到這四條消息
        • LEO 代表即將要寫(xiě)入消息的偏移量 offset

        分區(qū) ISR 集合中的每個(gè)副本都會(huì)維護(hù)自己的 LEO,而 ISR 集合中最小的LEO 即為分區(qū)的 HW

        如上圖: 三個(gè)分區(qū)副本都是 ISR集合當(dāng)中的,最小的 LEO 為 3,就代表分區(qū)的 HW 為3,所以當(dāng)前分區(qū)只能消費(fèi)到 0~2 之間的三條數(shù)據(jù),如下圖

        6.生產(chǎn)者發(fā)送消息有哪些模式?

        總共有三種模式

        • 1.發(fā)后即忘(fire-and-forget)
          • 它只管往 Kafka 里面發(fā)送消息,但是不關(guān)心消息是否正確到達(dá),這種方式的效率最高,但是可靠性也最差,比如當(dāng)發(fā)生某些不可充實(shí)異常的時(shí)候會(huì)造成消息的丟失
        • 2.同步(sync)
          • producer.send()返回一個(gè)Future對(duì)象,調(diào)用get()方法變回進(jìn)行同步等待,就知道消息是否發(fā)送成功,發(fā)送一條消息需要等上個(gè)消息發(fā)送成功后才可以繼續(xù)發(fā)送
        • 3.異步(async)
          • Kafka支持 producer.send() 傳入一個(gè)回調(diào)函數(shù),消息不管成功或者失敗都會(huì)調(diào)用這個(gè)回調(diào)函數(shù),這樣就算是異步發(fā)送,我們也知道消息的發(fā)送情況,然后再回調(diào)函數(shù)中選擇記錄日志還是重試都取決于調(diào)用方

        7.發(fā)送消息的分區(qū)策略有哪些?

        • 1.輪詢:依次將消息發(fā)送該topic下的所有分區(qū),如果在創(chuàng)建消息的時(shí)候 key 為 null,Kafka 默認(rèn)采用這種策略。
        • 2.key 指定分區(qū):在創(chuàng)建消息是 key 不為空,并且使用默認(rèn)分區(qū)器,Kafka 會(huì)將 key 進(jìn)行 hash,然后根據(jù)hash值映射到指定的分區(qū)上。這樣的好處是 key 相同的消息會(huì)在一個(gè)分區(qū)下,Kafka 并不能保證全局有序,但是在每個(gè)分區(qū)下的消息是有序的,按照順序存儲(chǔ),按照順序消費(fèi)。在保證同一個(gè) key 的消息是有序的,這樣基本能滿足消息的順序性的需求。但是如果 partation 數(shù)量發(fā)生變化,那就很難保證 key 與分區(qū)之間的映射關(guān)系了。
        • 3.自定義策略:實(shí)現(xiàn) Partitioner 接口就能自定義分區(qū)策略。
        • 4.指定 Partiton 發(fā)送

        8.Kafka 支持讀寫(xiě)分離嗎?為什么?

        Kafka 是不支持讀寫(xiě)分離的,那么讀寫(xiě)分離的好處是什么?主要就是讓一個(gè)節(jié)點(diǎn)去承擔(dān)另一個(gè)節(jié)點(diǎn)的負(fù)載壓力,也就是能做到一定程度的負(fù)載均衡,而且 Kafka 不通過(guò)讀寫(xiě)分離也可以一定程度上去實(shí)現(xiàn)負(fù)載均衡。

        但是對(duì)于 Kafka 的架構(gòu)來(lái)說(shuō),讀寫(xiě)分離有兩個(gè)很大的缺點(diǎn)

        • 1.數(shù)據(jù)不一致的問(wèn)題:讀寫(xiě)分離必然涉及到數(shù)據(jù)的同步,只要是不同節(jié)點(diǎn)之間的數(shù)據(jù)同步,必然會(huì)有數(shù)據(jù)不一致的問(wèn)題存在。
        • 2.延時(shí)問(wèn)題:由于 Kafka 獨(dú)特的數(shù)據(jù)處理方式,導(dǎo)致如果將數(shù)據(jù)從一個(gè)節(jié)點(diǎn)同步到另一個(gè)節(jié)點(diǎn)必然會(huì)經(jīng)過(guò)主節(jié)點(diǎn)磁盤和從節(jié)點(diǎn)磁盤,對(duì)一些延時(shí)性要求較高的應(yīng)用來(lái)說(shuō),并不太適用

        9.那 Kafka 是怎么去實(shí)現(xiàn)負(fù)載均衡的?

        Kafka 的負(fù)責(zé)均衡主要是通過(guò)分區(qū)來(lái)實(shí)現(xiàn)的,我們知道 Kafka 是主寫(xiě)主讀的架構(gòu),如下圖:

        共三個(gè) broker ,里面各有三個(gè)副本,總共有三個(gè) partation, 深色的是 leader,淺色的是 follower,上下灰色分別代表生產(chǎn)者和消費(fèi)者,虛線代表 follower 從 leader 拉取消息。

        我們從這張圖就可以很明顯的看出來(lái),每個(gè) broker 都有消費(fèi)者拉取消息,每個(gè) broker 也都有生產(chǎn)者發(fā)送消息,每個(gè) broker 上的讀寫(xiě)負(fù)載都是一樣的,這也說(shuō)明了 kafka 獨(dú)特的架構(gòu)方式可以通過(guò)主寫(xiě)主讀來(lái)實(shí)現(xiàn)負(fù)載均衡。

        10.Kafka 的負(fù)責(zé)均衡會(huì)有什么問(wèn)題呢?

        kafka的負(fù)載均衡在絕對(duì)理想的狀況下可以實(shí)現(xiàn),但是會(huì)有某些情況出現(xiàn)一定程度上的負(fù)載不均衡

        • 1.broker 端分配不均:當(dāng)創(chuàng)建 topic 的時(shí)候可能會(huì)出現(xiàn)某些 broker 分配到的分區(qū)數(shù)多,而有些 broker 分配的分區(qū)少,這就導(dǎo)致了 leader 多副本不均。
        • 2.生產(chǎn)者寫(xiě)入消息不均:生產(chǎn)者可能只對(duì)某些 broker 中的 leader 副本進(jìn)行大量的寫(xiě)入操作,而對(duì)其他的 leader 副本不聞不問(wèn)。
        • 3.消費(fèi)者消費(fèi)不均:消費(fèi)者可能只對(duì)某些 broker 中的 leader 副本進(jìn)行大量的拉取操作,而對(duì)其他的 leader 副本不聞不問(wèn)。
        • 4.leader 副本切換不均:當(dāng)主從副本切換或者分區(qū)副本進(jìn)行了重分配后,可能會(huì)導(dǎo)致各個(gè) broker 中的 leader 副本分配不均勻。

        11.Kafka 的可靠性是怎么保證的?

        1.acks

        這個(gè)參數(shù)用來(lái)指定分區(qū)中有多少個(gè)副本收到這條消息,生產(chǎn)者才認(rèn)為這條消息是寫(xiě)入成功的,這個(gè)參數(shù)有三個(gè)值:

        • 1.acks = 1,默認(rèn)為1。生產(chǎn)者發(fā)送消息,只要 leader 副本成功寫(xiě)入消息,就代表成功。這種方案的問(wèn)題在于,當(dāng)返回成功后,如果 leader 副本和 follower 副本還沒(méi)有來(lái)得及同步,leader 就崩潰了,那么在選舉后新的 leader 就沒(méi)有這條消息,也就丟失了。
        • 2.acks = 0。生產(chǎn)者發(fā)送消息后直接算寫(xiě)入成功,不需要等待響應(yīng)。這個(gè)方案的問(wèn)題很明顯,只要服務(wù)端寫(xiě)消息時(shí)出現(xiàn)任何問(wèn)題,都會(huì)導(dǎo)致消息丟失。
        • 3.acks = -1 或 acks = all。生產(chǎn)者發(fā)送消息后,需要等待 ISR 中的所有副本都成功寫(xiě)入消息后才能收到服務(wù)端的響應(yīng)。毫無(wú)疑問(wèn)這種方案的可靠性是最高的,但是如果 ISR 中只有l(wèi)eader 副本,那么就和 acks = 1 毫無(wú)差別了。

        2.消息發(fā)送的方式

        第6問(wèn)中我們提到了生產(chǎn)者發(fā)送消息有三種方式,發(fā)完即忘,同步和異步。我們可以通過(guò)同步或者異步獲取響應(yīng)結(jié)果,失敗做重試來(lái)保證消息的可靠性。

        3.手動(dòng)提交位移

        默認(rèn)情況下,當(dāng)消費(fèi)者消費(fèi)到消息后,就會(huì)自動(dòng)提交位移。但是如果消費(fèi)者消費(fèi)出錯(cuò),沒(méi)有進(jìn)入真正的業(yè)務(wù)處理,那么就可能會(huì)導(dǎo)致這條消息消費(fèi)失敗,從而丟失。我們可以開(kāi)啟手動(dòng)提交位移,等待業(yè)務(wù)正常處理完成后,再提交offset。

        4.通過(guò)副本 LEO 來(lái)確定分區(qū) HW

        可參考第五問(wèn)

        12.Kafka 的消息消費(fèi)方式有哪些?

        一般消息消費(fèi)有兩種模式,推和拉。Kafka的消費(fèi)是屬于拉模式的,而此模式的消息消費(fèi)方式有兩種,點(diǎn)對(duì)點(diǎn)和發(fā)布訂閱。

        • 1.點(diǎn)對(duì)點(diǎn):如果所有消費(fèi)者屬于同一個(gè)消費(fèi)組,那么所有的消息都會(huì)被均勻的投遞給每一個(gè)消費(fèi)者,每條消息只會(huì)被其中一個(gè)消費(fèi)者消費(fèi)。
        • 2.發(fā)布訂閱:如果所有消費(fèi)者屬于不同的消費(fèi)組,那么所有的消息都會(huì)被投遞給每一個(gè)消費(fèi)者,每個(gè)消費(fèi)者都會(huì)收到該消息。

        13.分區(qū)再分配是做什么的?解決了什么問(wèn)題?

        分區(qū)再分配主要是用來(lái)維護(hù) kafka 集群的負(fù)載均衡

        既然是分區(qū)再分配,那么 kafka 分區(qū)有什么問(wèn)題呢?

        • 問(wèn)題1:當(dāng)集群中的一個(gè)節(jié)點(diǎn)下線了
          • 如果該節(jié)點(diǎn)的分區(qū)是單副本的,那么分區(qū)將會(huì)變得不可用
          • 如果是多副本的,就會(huì)進(jìn)行 leader 選舉,在其他機(jī)器上選舉出新的 leader

        kafka 并不會(huì)將這些失效的分區(qū)遷移到其他可用的 broker 上,這樣就會(huì)影響集群的負(fù)載均衡,甚至也會(huì)影響服務(wù)的可靠性和可用性

        • 問(wèn)題2:當(dāng)集群新增 broker 時(shí),只有新的主題分區(qū)會(huì)分配在該 broker 上,而老的主題分區(qū)不會(huì)分配在該 broker 上,就造成了老節(jié)點(diǎn)和新節(jié)點(diǎn)之間的負(fù)載不均衡

        為了解決該問(wèn)題就出現(xiàn)了分區(qū)再分配,它可以在集群擴(kuò)容,broker 失效的場(chǎng)景下進(jìn)行分區(qū)遷移。

        分區(qū)再分配的原理就是通化控制器給分區(qū)新增新的副本,然后通過(guò)網(wǎng)絡(luò)把舊的副本數(shù)據(jù)復(fù)制到新的副本上,在復(fù)制完成后,將舊副本清除。 當(dāng)然,為了不影響集群正常的性能,在此復(fù)制期間還會(huì)有一些列保證性能的操作,比如復(fù)制限流

        14.副本 leader 是怎么選舉的?

        當(dāng)分區(qū) leader 節(jié)點(diǎn)崩潰時(shí),其中一個(gè) follower 節(jié)點(diǎn)會(huì)成為新的 leader 節(jié)點(diǎn),這樣會(huì)導(dǎo)致集群的負(fù)載不均衡,從而影響服務(wù)的健壯性和穩(wěn)定性。

        如下:

        Topic: test Partation:0 Leader:1 Replicas:1,2,0 Isr:1,2,0
        Topic: test Partation:1 Leader:2 Replicas:2,0,1 Isr:2,0,1
        Topic: test Partation:2 Leader:0 Replicas:0,1,2 Isr:0,1,2

        我們可以看到

        • 0 分區(qū)有 1 個(gè) leader
        • 1 分區(qū)有 2 個(gè) leader
        • 2 分區(qū)有 0 個(gè) leader

        如果此時(shí)中間的節(jié)點(diǎn)重啟

        Topic: test Partation:0 Leader:1 Replicas:1,2,0 Isr:1,0,2
        Topic: test Partation:1 Leader:0 Replicas:2,0,1 Isr:0,1,2
        Topic: test Partation:2 Leader:0 Replicas:0,1,2 Isr:0,1,2

        我們又可以看到:

        • 0 分區(qū)有 1 個(gè) leader
        • 1 分區(qū)有 0 個(gè) leader
        • 2 分區(qū)有 0 個(gè) leader

        我們會(huì)發(fā)現(xiàn),原本 1 分區(qū)有兩個(gè) ledaer,經(jīng)過(guò)重啟后 leader 都消失了,如此就負(fù)載不均衡了。

        為了解決這種問(wèn)題,就引入了優(yōu)先副本的概念

        優(yōu)先副本就是說(shuō)在 AR 集合中的第一個(gè)副本。比如分區(qū) 2 的 AR 為 0,1,2,那么分區(qū) 2 的優(yōu)先副本就為0。理想情況下優(yōu)先副本就是 leader 副本。優(yōu)先副本選舉就是促使優(yōu)先副本成為 leader 副本,從而維護(hù)集群的負(fù)載均衡。

        15.分區(qū)數(shù)越多越好嗎?吞吐量就會(huì)越高嗎?

        一般類似于這種問(wèn)題的答案,都是持否定態(tài)度的。

        但是可以說(shuō),在一定條件下,分區(qū)數(shù)的數(shù)量是和吞吐量成正比的,分區(qū)數(shù)和性能也是成正比的。

        那么為什么說(shuō)超過(guò)了一定限度,就會(huì)對(duì)性能造成影響呢?原因如下:

        1.客戶端/服務(wù)器端需要使用的內(nèi)存就越多

        • 服務(wù)端在很多組件中都維護(hù)了分區(qū)級(jí)別的緩存,分區(qū)數(shù)越大,緩存成本也就越大。
        • 消費(fèi)端的消費(fèi)線程數(shù)是和分區(qū)數(shù)掛鉤的,分區(qū)數(shù)越大消費(fèi)線程數(shù)也就越多,線程的開(kāi)銷成本也就越大
        • 生產(chǎn)者發(fā)送消息有緩存的概念,會(huì)為每個(gè)分區(qū)緩存消息,當(dāng)積累到一定程度或者時(shí)間時(shí)會(huì)將消息發(fā)送到分區(qū),分區(qū)越多,這部分的緩存也就越大

        2.文件句柄的開(kāi)銷

        每個(gè) partition 都會(huì)對(duì)應(yīng)磁盤文件系統(tǒng)的一個(gè)目錄。在 Kafka 的數(shù)據(jù)日志文件目錄中,每個(gè)日志數(shù)據(jù)段都會(huì)分配兩個(gè)文件,一個(gè)索引文件和一個(gè)數(shù)據(jù)文件。每個(gè) broker 會(huì)為每個(gè)日志段文件打開(kāi)一個(gè) index 文件句柄和一個(gè)數(shù)據(jù)文件句柄。因此,隨著 partition 的增多,所需要保持打開(kāi)狀態(tài)的文件句柄數(shù)也就越多,最終可能超過(guò)底層操作系統(tǒng)配置的文件句柄數(shù)量限制。

        3.越多的分區(qū)可能增加端對(duì)端的延遲

        Kafka 會(huì)將分區(qū) HW 之前的消息暴露給消費(fèi)者。分區(qū)越多則副本之間的同步數(shù)量就越多,在默認(rèn)情況下,每個(gè) broker 從其他 broker 節(jié)點(diǎn)進(jìn)行數(shù)據(jù)副本復(fù)制時(shí),該 broker 節(jié)點(diǎn)只會(huì)為此工作分配一個(gè)線程,該線程需要完成該 broker 所有 partition 數(shù)據(jù)的復(fù)制。

        4.降低高可用性

        在第 13 問(wèn)我們提到了分區(qū)再分配,會(huì)將數(shù)據(jù)復(fù)制到另一份副本當(dāng)中,分區(qū)數(shù)量越多,那么恢復(fù)時(shí)間也就越長(zhǎng),而如果發(fā)生宕機(jī)的 broker 恰好是 controller 節(jié)點(diǎn)時(shí):在這種情況下,新 leader 節(jié)點(diǎn)的選舉過(guò)程在 controller 節(jié)點(diǎn)恢復(fù)到新的 broker 之前不會(huì)啟動(dòng)。controller 節(jié)點(diǎn)的錯(cuò)誤恢復(fù)將會(huì)自動(dòng)地進(jìn)行,但是新的 controller 節(jié)點(diǎn)需要從 zookeeper 中讀取每一個(gè) partition 的元數(shù)據(jù)信息用于初始化數(shù)據(jù)。例如,假設(shè)一個(gè)Kafka 集群存在 10000個(gè)partition,從 zookeeper 中恢復(fù)元數(shù)據(jù)時(shí)每個(gè) partition 大約花費(fèi) 2 ms,則 controller 的恢復(fù)將會(huì)增加約 20 秒的不可用時(shí)間窗口。

        16.如何增強(qiáng)消費(fèi)者的消費(fèi)能力?

        • 1.可以考慮增加 topic 的分區(qū)數(shù),并且同時(shí)提升消費(fèi)組的消費(fèi)者數(shù)量,消費(fèi)者數(shù)=分區(qū)數(shù)。
        • 2.如果是消費(fèi)者消費(fèi)不及時(shí),可以采用多線程的方式進(jìn)行消費(fèi),并且優(yōu)化業(yè)務(wù)方法流程,同樣的分區(qū)數(shù),為什么人家并發(fā)那么高,你的就不行??


        17.消費(fèi)者與 topic 的分區(qū)分配策略有哪些?

        1.RangeAssignor 分配策略

        該分配策略是按照消費(fèi)者總數(shù)和分區(qū)總數(shù)進(jìn)行整除運(yùn)算來(lái)獲得一個(gè)跨度,然后分區(qū)按照跨度來(lái)進(jìn)行平均分配,盡可能保證分區(qū)均勻的分配給所有的消費(fèi)者。

        對(duì)于每個(gè) topic,該策略會(huì)講消費(fèi)者組內(nèi)所有訂閱這個(gè)主題的消費(fèi)者按照名稱的字典順序排序,然后為每個(gè)消費(fèi)者劃分固定過(guò)的區(qū)域,如果不夠平均分配,那么字典排序考前的就會(huì)多分配一個(gè)分區(qū)。

        比如 2 個(gè)消費(fèi)者屬于一個(gè)消費(fèi)者組,有 2 個(gè) topic t1,t2,每個(gè) topic 都有 3 個(gè)分區(qū),p1,p2,p3,那么分配的情況如下:

          消費(fèi)者A:t0-p0,t0-p1,t1-p0,t1-p1,
          消費(fèi)者B:t0-p2,t1-p2

        這樣就會(huì)出現(xiàn)非配不均勻的情況

        2.RoundRobinAssignor 分配策略

        該分配策略是按將消費(fèi)者組內(nèi)所有消費(fèi)者及消費(fèi)者訂閱的所有主題的分區(qū)按照字典排序,然后通過(guò)輪詢的方式分配給每個(gè)消費(fèi)者。

        比如有 3 個(gè)消費(fèi)者 A,B,C,訂閱了 3 個(gè) topic ,t0,t1,t2,每個(gè) topic 各有 3 個(gè)分區(qū) p0,p1,p2。如果 A 訂閱了 t0,B 訂閱了 t0 和 t1,C 訂閱了 t0,t1,t2,那么分配的情況如下:

          消費(fèi)者A:t0-p0
          消費(fèi)者B:t1-p0
          消費(fèi)者C:t1-p1,t2-p0,t2-p1,t2-p2

        這樣也會(huì)出現(xiàn)分配不均勻的情況,按照訂閱情況來(lái)講完全可以吧 t1p1 分配給消費(fèi)者B

        3.StickyAssignor分配策略

        這種分配策略有兩個(gè)目的

        • 1.分區(qū)的分配要盡可能的均勻
        • 2.分區(qū)的分配盡可能的與上次分配的保持相同。

        當(dāng)兩者發(fā)生沖突時(shí),第一個(gè)目標(biāo)優(yōu)先于第二個(gè)目標(biāo)。

        假設(shè)消費(fèi)組內(nèi)有3個(gè)消費(fèi)者:C0、C1、C2
        它們都訂閱了4個(gè)主題:t0、t1、t2、t3
        并且每個(gè)主題有2個(gè)分區(qū),也就是說(shuō)整個(gè)消費(fèi)組訂閱了,t0p0、t0p1、t1p0、t1p1、t2p0、t2p1、t3p0、t3p1 這8個(gè)分區(qū)
        最終的分配結(jié)果如下:

        消費(fèi)者C0:t0p0、t1p1、t3p0

        消費(fèi)者C1:t0p1、t2p0、t3p1

        消費(fèi)者C2:t1p0、t2p1

        這樣初看上去似乎與采用RoundRobinAssignor策略所分配的結(jié)果相同

        此時(shí)假設(shè)消費(fèi)者C1脫離了消費(fèi)組,那么消費(fèi)組就會(huì)執(zhí)行再平衡操作,進(jìn)而消費(fèi)分區(qū)會(huì)重新分配。如果采用RoundRobinAssignor策略,那么此時(shí)的分配結(jié)果如下:

        消費(fèi)者C0:t0p0、t1p0、t2p0、t3p0

        消費(fèi)者C2:t0p1、t1p1、t2p1、t3p1

        如分配結(jié)果所示,RoundRobinAssignor策略會(huì)按照消費(fèi)者C0和C2進(jìn)行重新輪詢分配。而如果此時(shí)使用的是StickyAssignor策略,那么分配結(jié)果為:

        消費(fèi)者C0:t0p0、t1p1、t3p0、t2p0

        消費(fèi)者C2:t1p0、t2p1、t0p1、t3p1

        可以看到分配結(jié)果中保留了上一次分配中對(duì)于消費(fèi)者C0和C2的所有分配結(jié)果,并將原來(lái)消費(fèi)者C1的“負(fù)擔(dān)”分配給了剩余的兩個(gè)消費(fèi)者C0和C2,最終C0和C2的分配還保持了均衡。

        如果發(fā)生分區(qū)重分配,那么對(duì)于同一個(gè)分區(qū)而言有可能之前的消費(fèi)者和新指派的消費(fèi)者不是同一個(gè),對(duì)于之前消費(fèi)者進(jìn)行到一半的處理還要在新指派的消費(fèi)者中再次復(fù)現(xiàn)一遍,這顯然很浪費(fèi)系統(tǒng)資源。StickyAssignor策略如同其名稱中的“sticky”一樣,讓分配策略具備一定的“粘性”,盡可能地讓前后兩次分配相同,進(jìn)而減少系統(tǒng)資源的損耗以及其它異常情況的發(fā)生

        到目前為止所分析的都是消費(fèi)者的訂閱信息都是相同的情況,我們來(lái)看一下訂閱信息不同的情況下的處理。

        舉例:同樣消費(fèi)組內(nèi)有3個(gè)消費(fèi)者:C0、C1、C2
        集群中有3個(gè)主題 t0、t1、t2
        這3個(gè)主題分別有 1、2、3個(gè)分區(qū)
        也就是說(shuō)集群中有 t0p0、t1p0、t1p1、t2p0、t2p1、t2p2 這6個(gè)分區(qū)
        消費(fèi)者C0訂閱了主題t0,消費(fèi)者C1訂閱了主題t0和t1,消費(fèi)者C2訂閱了主題t0、t1和t2
        如果此時(shí)采用RoundRobinAssignor策略:

        消費(fèi)者C0:t0p0

        消費(fèi)者C1:t1p0

        消費(fèi)者C2:t1p1、t2p0、t2p1、t2p2

        如果此時(shí)采用的是StickyAssignor策略:

        消費(fèi)者C0:t0p0

        消費(fèi)者C1:t1p0、t1p1

        消費(fèi)者C2:t2p0、t2p1、t2p2

        此時(shí)消費(fèi)者C0脫離了消費(fèi)組,那么RoundRobinAssignor策略的分配結(jié)果為:

        消費(fèi)者C1:t0p0、t1p1

        消費(fèi)者C2:t1p0、t2p0、t2p1、t2p2

        StickyAssignor策略,那么分配結(jié)果為:

        消費(fèi)者C1:t1p0、t1p1、t0p0

        消費(fèi)者C2:t2p0、t2p1、t2p2

        可以看到StickyAssignor策略保留了消費(fèi)者C1和C2中原有的5個(gè)分區(qū)的分配:

        t1p0、t1p1、t2p0、t2p1、t2p2。

        從結(jié)果上看StickyAssignor策略比另外兩者分配策略而言顯得更加的優(yōu)異,這個(gè)策略的代碼實(shí)現(xiàn)也是異常復(fù)雜。

        4.自定義分區(qū)分配策略

        可以通過(guò)實(shí)現(xiàn) org.apache.kafka.clients.consumer.internals.PartitionAssignor 接口來(lái)實(shí)現(xiàn)

        18.kafka 控制器是什么?有什么作用

        在 Kafka 集群中會(huì)有一個(gè)或多個(gè) broker,其中有一個(gè) broker 會(huì)被選舉為控制器,它負(fù)責(zé)管理整個(gè)集群中所有分區(qū)和副本的狀態(tài),kafka 集群中只能有一個(gè)控制器

        • 當(dāng)某個(gè)分區(qū)的 leader 副本出現(xiàn)故障時(shí),由控制器負(fù)責(zé)為該分區(qū)選舉新的 leader 副本。
        • 當(dāng)檢測(cè)到某個(gè)分區(qū)的ISR集合發(fā)生變化時(shí),由控制器負(fù)責(zé)通知所有 broker 更新其元數(shù)據(jù)信息。
        • 當(dāng)為某個(gè) topic 增加分區(qū)數(shù)量時(shí),由控制器負(fù)責(zé)分區(qū)的重新分配。

        19.kafka 控制器是怎么進(jìn)行選舉的?

        kafka 中的控制器選舉工作依賴于 Zookeeper,成功競(jìng)選成為控制器的 broker 會(huì)在Zookeeper中創(chuàng)建/controller臨時(shí)節(jié)點(diǎn)。

        每個(gè) broker 啟動(dòng)的時(shí)候會(huì)去嘗試讀取/controller 節(jié)點(diǎn)的 brokerid的值

        • 如果讀取到的 brokerid 的值不為-1,表示已經(jīng)有其他broker 節(jié)點(diǎn)成功競(jìng)選為控制器,所以當(dāng)前 broker 就會(huì)放棄競(jìng)選;

        如果Zookeeper中不存在/controller 節(jié)點(diǎn),或者這個(gè)節(jié)點(diǎn)的數(shù)據(jù)異常,那么就會(huì)嘗試去創(chuàng)建/controller 節(jié)點(diǎn),創(chuàng)建成功的那個(gè) broker 就會(huì)成為控制器。

        每個(gè) broker 都會(huì)在內(nèi)存中保存當(dāng)前控制器的 brokerid 值,這個(gè)值可以標(biāo)識(shí)為 activeControllerId。

        Zookeeper 中還有一個(gè)與控制器有關(guān)的/controller_epoch 節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)是持久節(jié)點(diǎn),節(jié)點(diǎn)中存放的是一個(gè)整型的 controller_epoch 值。controller_epoch 值用于記錄控制器發(fā)生變更的次數(shù)。

        controller_epoch 的初始值為1,即集群中的第一個(gè)控制器的紀(jì)元為1,當(dāng)控制器發(fā)生變更時(shí),每選出一個(gè)新的控制器就將該字段值加1。

        每個(gè)和控制器交互的請(qǐng)求都會(huì)攜帶 controller_epoch 這個(gè)字段,

        • 如果請(qǐng)求的 controller_epoch 值小于內(nèi)存中的 controller_epoch值,認(rèn)為這個(gè)請(qǐng)求是向已經(jīng)過(guò)期的控制器發(fā)送的請(qǐng)求,那么這個(gè)請(qǐng)求會(huì)被認(rèn)定為無(wú)效的請(qǐng)求
        • 如果請(qǐng)求的 controller_epoch 值大于內(nèi)存中的 controller_epoch值,那么說(shuō)明已經(jīng)有新的控制器當(dāng)選

        20.kafka 為什么這么快?

        • 1.順序讀寫(xiě)

          磁盤分為順序讀寫(xiě)與隨機(jī)讀寫(xiě),基于磁盤的隨機(jī)讀寫(xiě)確實(shí)很慢,但磁盤的順序讀寫(xiě)性能卻很高,kafka 這里采用的就是順序讀寫(xiě)。

        • 2.Page Cache

          為了優(yōu)化讀寫(xiě)性能,Kafka 利用了操作系統(tǒng)本身的 Page Cache,就是利用操作系統(tǒng)自身的內(nèi)存而不是JVM空間內(nèi)存。

        • 3.零拷貝

          Kafka使用了零拷貝技術(shù),也就是直接將數(shù)據(jù)從內(nèi)核空間的讀緩沖區(qū)直接拷貝到內(nèi)核空間的 socket 緩沖區(qū),然后再寫(xiě)入到 NIC 緩沖區(qū),避免了在內(nèi)核空間和用戶空間之間穿梭。

        • 4.分區(qū)分段+索引

          Kafka 的 message 是按 topic分 類存儲(chǔ)的,topic 中的數(shù)據(jù)又是按照一個(gè)一個(gè)的 partition 即分區(qū)存儲(chǔ)到不同 broker 節(jié)點(diǎn)。每個(gè) partition 對(duì)應(yīng)了操作系統(tǒng)上的一個(gè)文件夾,partition 實(shí)際上又是按照segment分段存儲(chǔ)的。

          通過(guò)這種分區(qū)分段的設(shè)計(jì),Kafka 的 message 消息實(shí)際上是分布式存儲(chǔ)在一個(gè)一個(gè)小的 segment 中的,每次文件操作也是直接操作的 segment。為了進(jìn)一步的查詢優(yōu)化,Kafka 又默認(rèn)為分段后的數(shù)據(jù)文件建立了索引文件,就是文件系統(tǒng)上的.index文件。這種分區(qū)分段+索引的設(shè)計(jì),不僅提升了數(shù)據(jù)讀取的效率,同時(shí)也提高了數(shù)據(jù)操作的并行度。

        • 5.批量讀寫(xiě)

          Kafka 數(shù)據(jù)讀寫(xiě)也是批量的而不是單條的,這樣可以避免在網(wǎng)絡(luò)上頻繁傳輸單個(gè)消息帶來(lái)的延遲和帶寬開(kāi)銷。假設(shè)網(wǎng)絡(luò)帶寬為10MB/S,一次性傳輸10MB的消息比傳輸1KB的消息10000萬(wàn)次顯然要快得多。

        • 6.批量壓縮

          Kafka 把所有的消息都變成一個(gè)批量的文件,并且進(jìn)行合理的批量壓縮,減少網(wǎng)絡(luò) IO 損耗,通過(guò) mmap 提高 I/O 速度,寫(xiě)入數(shù)據(jù)的時(shí)候由于單個(gè)Partion是末尾添加所以速度最優(yōu);讀取數(shù)據(jù)的時(shí)候配合 sendfile 進(jìn)行直接讀取。

        21.什么情況下 kafka 會(huì)丟失消息?

        Kafka 有三次消息傳遞的過(guò)程:生產(chǎn)者發(fā)消息給 Broker,Broker 同步消息和持久化消息,Broker 將消息傳遞給消費(fèi)者。

        這其中每一步都有可能丟失消息.

        • 1.生產(chǎn)者發(fā)送數(shù)據(jù): 在第 11 問(wèn)中的 acks中有說(shuō)到

          • 當(dāng) acks 為 0,只要服務(wù)端寫(xiě)消息時(shí)出現(xiàn)任何問(wèn)題,都會(huì)導(dǎo)致消息丟失。
          • 當(dāng) acks 配置為 1 時(shí),生產(chǎn)者發(fā)送消息,只要 leader 副本成功寫(xiě)入消息,就代表成功。這種方案的問(wèn)題在于,當(dāng)返回成功后,如果 leader 副本和 follower 副本還沒(méi)有來(lái)得及同步,leader 就崩潰了,那么在選舉后新的 leader 就沒(méi)有這條消息,也就丟失了。
        • 2.Broker 存儲(chǔ)數(shù)據(jù):kafka 通過(guò) Page Cache 將數(shù)據(jù)寫(xiě)入磁盤。

          • Page Cache 就是當(dāng)往磁盤文件寫(xiě)入的時(shí)候,系統(tǒng)會(huì)先將數(shù)據(jù)流寫(xiě)入緩存中,但是什么時(shí)候?qū)⒕彺娴臄?shù)據(jù)寫(xiě)入文件中是由操作系統(tǒng)自行決定。所以如果此時(shí)機(jī)器突然掛了,也是會(huì)丟失消息的。
        • 3.消費(fèi)者消費(fèi)數(shù)據(jù):在開(kāi)啟自動(dòng)提交 offset 時(shí),只要消費(fèi)者消費(fèi)到消息,那么就會(huì)自動(dòng)提交偏移量,如果業(yè)務(wù)還沒(méi)有來(lái)得及處理,那么消息就會(huì)丟失。

        -- END --

         | 更多精彩文章 -



        加我微信,交個(gè)朋友
        長(zhǎng)按/掃碼添加↑↑↑

        瀏覽 145
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            外国一级片| 精品国产精品国产精品国产网站 | 亚洲AV无码乱码AV| 国产黄色免费看| 少妇嫩搡BBBB搡BBBB| 久久久久久久大香蕉| 少妇精品久久久久久久久久| 国精品无码一区二区三区在线秋菊 | 日韩无码国产精品| 国产主播福利| 日韩欧美视频在线| 狼人综合在线| 久久aaaa| 天天爽夜夜爽夜夜爽| 欧美在线观看一区二区| 中文字幕中文字幕一区| 人妻第一页| 日韩在线电影| 免费一级无码成人片| 日本高清无码在线| 亚洲丁香网| 国产精品毛片视频| 天天干欧美| 家庭乱伦影视| 一级黄色影院| 国产成人精品视频免费看| 在线观看免费黄片| 日韩高清无码一区| 午夜福利大片| 翔田千里av| 人人搞人人摸| 五月婷婷无码| 亚洲性爱小说| 亚洲天堂av网| 91亚洲精品国偷拍自产在线观看| 人妻夜夜爽天天爽| 99热99re6国产线播放| 精品国产123| 一级a片在线免费观看| 99久久免费网| 日本处女性高潮喷水视频| 国产精品一二| 国产成人精品一区二区| 图片区视频区小说区| 欧美色就是色| 色婷婷激情| 色婷婷在线观看视频| www.99国产| 亚洲操色| 午夜福利视频网站| 色情网站在线| 精品无码一区二区三区蜜桃李宗瑞| 亚洲香蕉影院| 一本一道波多野结衣潮喷视频 | 亚洲系列中文字幕| 欧美亚洲图区| 日本aa视频| 综合网插菊花| а中文在线天堂精品| 九一成人电影| 国产丰满乱子伦无码| 国产成人TV| 水蜜桃成人网| 欧美成人三级片| 免费在线观看AV片| 精品国精品自拍自在线| 国产精品囯产三级囯产AV野外| 一级片免费观看视频| A视频免费| 99久久久久久久久久| 亚洲天堂在线观看视频网站 | 国产免费麻豆| 最好看的MV中文字幕国语| 蜜臀久久久久久999| 日韩熟妇无码中文字幕| 麻豆成人无码精品视频| 国产福利电影在线观看| 台湾无码在线| 人妻字幕| 中文无码人妻| 久久xxx| 免费黄色av| 男女操逼网站| 蜜桃91精品秘入口| 韩国精品久久久| 国产在线观看免费成人视频| 女人卖婬视频播放| 亚洲成人福利在线| 密臀福利导航| 欧美黄片在线免费看| 欧美日韩国产三级| 91在线电影| 午夜久久福利| 大香蕉草久| 亚州v| 香蕉操逼| 我和岳m愉情XXXⅩ视频| 天堂AV在线免费观看| 9797色色| 国产三级午夜理伦三级| 久久亚洲av| 欧美毛片A| 成人自拍视频在线观看| 欧美9999| 久久久久久亚洲| 中文字幕视频在线观看| 欧美九九| 成人免费毛片片v| 欧美肏逼网| 国产激情精品视频| 人人色人人黄| 丰满熟妇人妻无码视频| 国产一级a一片成人AV| 日韩高清无码片| 操一区| 日本国产精品| 欧美综合在线观看| 91精品人妻一区二区三区| 婷婷五月亚洲| 国产三级在线| 免费无码A片在线观看全| 欧美一级片免费看| 性猛交AAAA片免费观看直播| 大香蕉色视频| 麻豆自拍偷拍视频| 99九九精品| 豆花视频logo| 亚洲第一页在线| 中文字幕第六页| 欧美激情视频一区二区三区不卡| 97男人的天堂| 青青草原视频在线免费观看| 超碰在线图片| 97视频国产| 亚洲精品久久久蜜桃| 蜜桃av在线| 国产精品操逼视频| 欧美mv日韩mv国产网站| 亚洲A网站| 久久久久久亚洲AV黄床| 色视频免费在线观看| 色色五月丁香婷婷| 日本爱爱免费| 日本黄色小视频| 操操操操操| 激情片AAA| 国产理论视频在线观看| 伊人色综合网| 悠悠久久久| 欧一美一色一伦一A片| 婷婷伊人大香蕉| 日韩AV在线电影| 青青操逼| 在线91视频| 无码人妻一区二区三一区免费n狂飙 | 欧一美一婬一伦一区二区三区| 人妻无码人妻| 熟女人妻视频| 免费视频一二三区| 中文字字幕在线中文乱码电影| 人妻无码视频| 69AV视频网站| 狠狠色五月| 亚洲黄在线观看| 亚洲欧美日韩一区| 欧美不卡在线| 91蝌蚪久久| 亚洲第一a| 精品丰满人妻一区二区三区免费观| 欧美一级欧美三级在线观看| 看毛片网址| 91精品国产综合久久久蜜臀酒店 | 97无码免费| 亚洲中文字幕第一| 免费伊人大香蕉| 五月丁香六月婷婷综合| 亚洲一级在线观看| 99成人| 日韩AV免费网站| 欧美日韩第一区| 综合色网站| 精品人妻一区二区免费蜜桃视频 | 免费视频一二区| 国产字幕| 午夜久久久久久久久久久久91| 日韩五码| 字幕一区二区久久人妻网站| 无码中文综合成熟精品AV电影| www.日韩av| 边吃边摸| 内射少妇18| 精品福利一区二区三区| 欧美AAAAAAAAAA特级| 亚洲激情在线观看| 99免费精品视频| 天天干天天摸| 影音先锋91视频| 日本爱爱网址| 西西人体大胆ww4444多少集| 亚洲日韩在线视频| 蝌蚪窝免费在线视频| 可以免费观看的毛片| 97人人射| 大香蕉一区二区三区| 无码乱伦AV| 欧美成人免费在线| 成人啪啪网站| 怡红院成人网| 波多野结衣Av在线| 好男人av| 人人摸人人射| 人人操AV在线| 丁香AV| JlZZJLZZ亚洲美女18 | 色五婷婷| 国产美女裸体网站| 91精品91久久久中77777| 三级网站视频| 特级西西WWW444人体聚色| 亚洲AV官方网站| 波多野结衣av一区| 亚洲AV中文无码| 精品欧美| 大香蕉伊人丁香五月| 北条麻妃99精品青青久久| 成人毛片100免费观看| 欧美一级性爱| 日夜夜操| 夜夜夜叫天天天做| 日韩在线视频网站| 中文字幕乱码亚洲无线码按摩| 国精产品一二三区| 国产女人18毛片水18精| 精品视频一区二区| 一本大道久久久久| 国产欧美在线视频| 日韩人妻无码视频| 亚洲日韩毛片| 国产主播中文字幕| 婷婷网址| 国产精品一级二级三级| 免费内射网站| 久久精品视频免费观看| 欧美在线国产| 羽月希奶水饱胀在线播放| 专业操老外| 亚洲性爱网站| 成人精品一区二区三区电影| 亚洲成人精品视频| 青草中文娱乐网在线| 国产一区久久| 成人性爱av| 国产探花视频在线免费观看| 成人午夜婬片A片| 逼特逼视频在线观看| 香蕉日逼| 久久精品视频国产| 五月丁香婷婷色| 成人视频123| 岛国电影av| 中文字幕人妻一区| 日韩人妻午夜| 神马午夜精品91| 影音先锋亚洲资源| 国产亚洲综合无码| 先锋影音一区二区| 亚洲天堂自拍| 奇米av在线| 婷婷五月AV| 脓肿是什么原因引起的,该怎么治疗 | 中文字幕日韩电影| 亚洲中文字幕久久日| 伊人久久精品| 国产一级片免费观看| 美女做爱在线观看| 99reav| 精品中文字幕在线观看| 青草视频在线观看免费| 黄色无码电影| 欧美色色色| 青青草娱乐视频| 国产一二三四区| 亚洲国产视频在线观看| 无码日韩人妻精品久久蜜桃 | 亚洲中文字幕日韩在线| 亚洲视频在线视频| 伊人在线| 久久综合无码内射国产| 91狠狠色丁香婷婷综合久久| 日韩高清久久| 中国免费XXXX18| 狠狠躁日日躁夜夜躁A片无码视频| 亚洲免费观看在线观看| 俺也去啦WWW色官网| 成人av网站在线播放| 撸一撸在线观看| 日韩福利片| 欧美日韩中文视频| 91人人妻人人澡人人爽人人| 做爱的网站| 久久精品黄色| 日韩A| 亚洲日韩欧美色图| 香蕉久久a毛片| 免费高清无码在线| 真实野外打野视频| 狠狠干五月| 爆乳一区二区三区| 亚洲色婷婷| 加勒比无码视频| 天天av天天av天天爽| 友田真希一级婬片A片| 婷婷五月天网址| 国产无遮挡又黄又爽在线观看| 99久久99久久精品免费看小说。 | 国外成人视频| 12——13女人毛片毛片| 69精品视频| 一区二区三区无码专区| 人人射人人| 亚洲av大片| 亚洲天堂综合网| 色狠狠AV| 豆花视频logo| 黄色爱爱| 中文字幕日韩电影| 人人操夜夜| 亚洲精品久久久蜜桃| 青娱乐黄片| 一本色道无码道| 色婷婷五月天| 69亚洲精品| 99精品在线观看| 三级片男人的天堂| 久久久国产视频| 国产愉拍91九色国产愉拍| av毛片| 久久成人在线| 精品无码一区二区三| 亚洲AV无码乱码国产| 久久精品小视频| 毛片大香蕉| 波多野成人无码精品69| 91亚洲一区| 超碰在线人人操| 一区无码精品| 欧美综合激情| 亚洲精品高清视频| 婷婷日韩一区二区三区| 久久久久久大香蕉| 欧美成人精品AAA| 国产热| 超碰乱伦| 国产69久久精品成人看| 日韩毛片在线| 久久播视频| 国产又粗又长又硬黄色一级片| 免费黄色一级电影| 欧美视频免费操逼图。| 三级无码电影| 拍拍AV| 久久韩国| 五月天四房播播| 无码操| 中文字幕精品三区无码| 男人的天堂2019| 国产在线观看你懂的| 69av在线播放| 一区二区三区无码区| 久久国产乱子伦精品免费女,网站 一区二区三区免费观看 | 成人性爱视频在线| 国产中文字幕在线播放| 水蜜桃成人网| 欧美视频在线观看| 成人做爰黄A片免费视频网站野外 国产成人午夜精品无码区久久麻豆 | AA级黄色视频| 1插菊花综合| 夜色精品视频| 精品91海角乱| 丁香婷婷综合网| 91在线看| 91人妻人人澡人人爽人妻| footjobvk| av在线观看中文字幕| 思思操在线视频| 日韩在线高清| 黄色生活片| 怡红院成人网| 日韩av中文| 91成人毛片| 欧美日韩免费一区二区三区| 亚洲AV无码黑人专区| 狠狠操在线视频| 欧美精产国品一二三产品价格| 黄色一区在线| 国产麻豆精品成人毛片| 日韩AV免费网站| 色哟哟一区二区三区| 成av人片一区二区三区久久| 亚洲网站在线观看| 日韩精品在线观看免费| 裸体黄色一极大片| xxxx国产| 久草欧美| 麻豆传媒嫂子| 免费在线观看a片| 色五月亚洲| 韩国无码人妻| 自拍视频一区| 免费AV网站观看| 口爆吞精在线观看| 国精产品一二三区| 牛牛AV| 久久精品国产精品| 伊人网导航| av在线无码| 日韩人妻丝袜中文字幕| 国产激情123区| 日韩精品网| 另类视频在线| 手机看片福利一区二区| 免费的毛片| 嫩BBB搡BBBB搡BBBB-百度| 日韩在线一区二区| 色情片在线观看| 91香蕉网站| jizzjizz国产| 91毛片在线观看| 东京热网站在线观看| 精品香蕉视频| 东方av在| 青草成人在线| 国产中文字幕在线播放| 亚洲成人AV电影| 亚洲一区免费| 亚洲一级内射| 一级无码在线观看| 亚洲中文视频在线| 国产高清精品软件丝瓜软件| 成人黄色小电影| 青草成人在线| 操逼视频国产| 亚洲三级在线视频| 天天草夜夜操| 狠狠肏| 黄色电影网站在线观看| 91人妻人澡| 免费v片| 久热福利| 91成人区| 中文字幕国产| 中文字幕99| 四虎影成人精品A片| 天堂成人在线视频| 国产精品91视频| 久久午夜无码鲁丝片主演是谁| 国产美女操逼网站| 91免费视频在线| 免费一级大片| 超碰2021| 亚洲天堂视频在线观看| 强伦轩一区二区三区四区| 超碰九一| 黃色A片一級二級三級免費久久久| 人人干人人干人人| 青青草原成人在线视频| 亚洲精品天堂无码| 国产青青草| 国产精品无码ThePorn| 欧美日韩人妻高清中文| 成人视频18| a片在线视频| 日韩在线一区二区三区四区| 久久av一区| 日韩人妻精品无码久久| 99久久婷婷国产综合精品漫 | 久久精品在线视频| 91成人国产| 秋霞丝鲁片一区二区三区手机在绒免 | 国产免费高清视频| 欧美成人精品激情在线观看| 中文免费高清在线观看视频| 久久悠悠| 国产理论片在线观看| 三级影片在线观看性| 蜜挑视频一区二区三区| 成人在线小视频| 91在线一区二区三区| 国产精品免费一区二区三区四区视频 | 黑人粗大无码| 人人射| 天堂在线中文字幕| 精产国品一区二区三区| 西西444WWW无码大胆在线观看 | 国产AV无码区亚洲| 成人免费观看视频| 亚洲欧美网站| aav在线| 日本国产高清| 91在线精品无码秘入口苹果 | 二级黄色视频| 爆乳一区二区三区AV| 在线视频一区二区三区| 日韩免费中文字幕| 91吴梦梦无码一区二区| 夫妻无码| 91无码人妻| 婷婷色亚洲| 天天摸天天干| 91高潮久久久久久久| 国产欧美日韩成人| 18禁在线| 久久精品一区二区三区蜜芽的特点| 看免费黄色视频| 国产精品一区二区AV日韩在线| 色婷婷网| 亚洲精品国产精品国自产在线| 韩国无码一区| 麻豆传媒在线| 91麻豆一区二区| 天天干天天日天天操| 五月天久久久| 婷婷色AV| 悠悠久久久| 蜜臀网在线观看| 永久免费看A人片无码精| 国产精品久久久久野外| 欧美亚洲日韩中文字幕| 男女操逼视频网站| 成人免费AV| 成人黄网在线观看| 国产一级a| 第一福利视频导航| 熟睡侵犯の奶水授乳在线| 黄色在线播放| 粉嫩AV在线| 黄色av影院| 91热视频| 护士小雪的yin荡高日记H视频 | 伊人大香蕉婷婷| 色av影音先锋无吗一区| 超碰9| 日本A在线| 亚洲天堂AV网| 国产青草视频| 亚洲欧美在线成人| 精品一区二区三区av| 四川妇BBB桑BBB桑BBB| 欧美一级婬片免费视频黄| 久久久穴| 日本成人毛片| www.五月天.con| 好逼天天操| 玖玖爱av| 99热这里有精品| 欧美综合色| 日韩午夜AV| 翔田千里50岁无码| 粉嫩av一区二区白浆| 青青日逼| 黄色成人毛片| 丹麦电影《下午》| 麻豆操逼| 91国产爽黄在线| 国产精品1区2区| 亚洲系列中文字幕| 亚洲在线成人| AⅤ天堂| 五月丁香婷婷久久| 国产精品18进进出出17c| www.狠狠操| 欧美综合激情| 91狠狠色丁香婷婷综合久久| 91麻豆香蕉| 91AV电影网| 成人在线第一页| 久久久久亚洲AV无码成人片| 亚洲小电影在线观看| 中文字幕在线观看福利视频| 色婷婷亚洲精品天天综合| 欧美视频精品| 一本大道DVD中文字幕| 国产2页| 波多野结衣高清视频| 亚洲AV无码成人精品区久| 欧美日韩色视频| 亚洲人一级电影| 国产色秘乱码一区二区三区| 超碰在线免费| 中文字幕日韩人妻| 精品香蕉视频| 色婷婷AV国产精品| 噜噜噜av| 日韩中文一区| 国产夫妻自拍AV| 免费成人三级片| 九色麻豆| 天天干免费视频| 九九射| 18禁成人A∨片| 国产乱国产乱老熟300视频 | 91久久香蕉囯产熟女线看蜜桃| 国产精品免费人成人网站酒店| 不卡视频一区二区三区| 亚洲激情自拍| 青青综合网| 在线观看中文字幕网站| 粉嫩99精品99久久久久久特污兔 | 成人亚洲A片V一区二区三区蜜月| 久久黄色小视频| 福利视频一区二区三区| 亚洲视频大全| 一本色道久久无码人妻精品69| 噜噜色小说| 精品国产AV无码一区二区三区| 亚洲人成77777| 人妻无码精品久久人妻成人| 久久无码影院| 香蕉成人视频| 骚妇p| 国精品无码人妻一区二区三区免费 | 乱伦麻豆| 国产午夜无码福利视频| 人人干人人干| 狠狠干2018| 亚洲免费在线视频观看| 国产porn| 午夜成人免费视频| 男人色天堂网| 国产精品成人无码a无码| 国产乱子伦视频国产印度| 国产一区二区三区在线视频| 日本免费不卡| 操一区| 男女啊啊啊| 亚洲秘一区二区三区-精品亚洲二区-| 一二三区免费视频| AV网站免费在线观看| 丰满人妻一区二区三区免费| 日韩无码高清一区| 国产操逼免费视频| 操逼操逼视频| 亚洲日韩精品在线观看| 狠狠干b| 亚洲v在线观看| 欧美性爱怡红院| 欧美精品系列| 成人精品一区二区三区中文字幕| 欧美在线大香蕉| 1024在线| 伊人影院在线观看| 久久污| 黄色av免费观看| 欧美性爱福利视频| 亚洲激情四射| 超碰九九| 国产福利电影在线观看| 香蕉久久网| 做爱网站免费| 天天草天天射| 日韩一区二区无码| 日韩乱伦小说| 日韩Av无码一区二区三区不卡| 婷婷五月综合久久中文字幕| 国产又爽又黄免费视频网站| 懂色午夜福利一区二区三区| 北条麻妃电影九九九| 蜜桃成人AV| 亚洲精品三级在线观看| 国产一二三区在线| jizz在线视频| 五月婷婷视频在线观看| 国产成人一区二区无码| 色老板网址| 欧美国产性爱| 人人澡超碰碰| 天天日天天搞| 亚洲中文字幕免费视频| 91欧美视频| 自拍偷拍无码| 欧美日韩精品一区二区三区钱| 无码免费看| 欧美一区二区三区婷婷五月| 91国黄色毛片在线观看| 九七色色电影| 亚洲AV无码成人精品区东京热| 99久久人妻精品免费二区| 亚洲无码一区二区三| 激情视频小说| 91ccc| 麻豆自拍偷拍视频| 天天cao| wwwAV| 欧美囗交荫蒂AAAA| 高清av在线| 四川少妇搡bbbbb搡多人| 亚洲麻豆| 北条麻妃在线观看香蕉| 自拍一区在线观看| 91三级片在线播放| 少妇做爱特级AAA| 久操视频免费看| 中文字幕在线电影| 成人伊人综合| 欧美日韩成人视频| 毛片久久| 国产三级黄色视频| 一级做a爰片毛片A片| 北条麻妃精品青青久久价格| 大香蕉99热| 北条麻妃青青久久| 成人性爱视频网站| 国产色网站| 18毛片| 日韩在线毛片| 国产一区二区不卡| 免费v片在线| 亚洲天堂视频网| 操逼激情视频| 中文字幕无码在线观看视频| 91色秘乱码一区二区| 春宵福利导航| 97人人插| 亚洲色婷婷| 欧美老妇日韩| 亚洲无码色婷婷| 国产一级a毛一级a毛观看视频网站www.jn | 黄色动漫在线免费观看| 亚洲日产专区| 日本a片在线观看| 日韩午夜成人| 黄片视频免费看| 美女视频黄a视频全免费不卡 | 人人干人| 亚洲AV一级| 色操网| AV日韩无码| 亚洲成人日韩| 日韩视频在线免费观看| 日本三级片免费观看| 欧美老妇XX| 免费黄色成人| 大香蕉在线伊人| 高潮无码视频| 亚洲精品黄色| 男女操逼免费观看| 91精品国产乱码久久久| 无码人妻一区二区三区蜜桃视频 | 操逼操逼操逼操逼| www.狠狠操| 影音先锋成人视频| 先锋资源日韩| 色噜噜一区二区三区| 手机看片1024旧版| 中文字幕第一区| 大香蕉伊人| 蜜乳AV一区二区三区| 黄色一级大片在线免费看产| 自拍视频网| 一本色道久久综合无码人妻| 特一级黄色片| 99视频色| 中国老女人日逼| 在线观看www视频| 色热热| 大香蕉伊在线观看| 中文字字幕中文字幕乱码| 热久久久久久| 秘亚洲国产精品成人网站| 午夜成人AV| 国产成人视频在线| 999成人电影| www.jiujiujiu| 亚洲第九页| 亚洲色婷婷综合| 精品福利在线观看| 国产精品特级毛片| 国产日韩欧美91| 思思在线视频| 午夜无码熟妇丰满人妻| 人人色人人操| 亚洲中文字幕免费观看视频| 狠狠操2019| 69成人无码| 免费无码在线观看| 久久精品视频久久| 亲孑伦XXXⅹ熟女| 人人草在线观看| 国产一二三四区| 最新午夜综合福利视频| 91视频网站入口| 久久人人超碰| 国产熟妇婬乱A片免费看牛牛| 日逼黄片| 先锋影音亚洲无码av| 99久久99久久兔费精桃| 欧美丰满人妻| 国产强伦轩免费视频在线| 亚洲免费在线看| 99精品自拍| 国产视频一区二区三区四区五区 | 日韩国产高清无码| 一级调教看片| 中文字幕一二三四| 伊人大香蕉综合在线| 人人干人人艹| 精品无码一区二区三区四区久久久软件 | 日本一级黄色| 久久精品亚洲无码| 久久女人| 色五月视频在线| 欧美日韩在线视频免费观看| 日韩人妻精品无码| 18禁黄网站| 日韩中文字幕一区二区| 无码人妻丰满熟妇精品| 欧美中文字幕在线视频| 国产清纯可爱美女自卫裸贷偷情| 免费高清无码视频在线观看| 91毛片在线观看| 強姧伦一区二区三区在线播放| 日韩操逼一区| 亚洲热视频在线观看| 精品人妻午夜一区二区三区四区| 免费国产视频| www.黄色大片| 国产在线A片| 中文字幕性爱| 黄色亚洲无码| 色逼逼网| 东方AV在线播放| 九九免费视频| 亚洲AV电影天堂| 蜜桃久久久亚洲精品| 亚洲AV无码成人精品| 亚洲三级片免费观看| 久久大奶| 日韩精品123| 91吊逼| 爱爱午夜福利| 欧美中文字幕在线视频| 日本黄色影视| 国产小精品| 中文字幕第12页| 国产激情都市一区二区三区欧美 | 五月天一区二区三区| 小黄片免费| 国产吃奶| 夜色88V精品国产亚洲| 一级日逼| 2025中文在线观看最好看的电影 | 人妻无码人妻| 91人人妻人人澡| AV天堂影视在线观看| 免费视频亚洲| 97人妻在线视频| 日本处女性高潮喷水视频| AV无码网| 99精品无码| 91爱爱com| 久草视频这里只有精品| 亚洲欧美日韩一区二区| 韩日黄色| 99精品视频国产| 人妻体内射精一区二区| 黄色A网站| 天天草天天撸| 日韩人妻无码一区二区三区99| 婷婷玖玖| 国产精品第二页| 免费看一区二区三区A片| 亚洲欧美成人片| 精品欧美视频| 99热这里有精品| 美女91小视频| 色天天综合网| 操逼AV无码| 激情五月激情综合网| 国产又爽又黄免费网站在线观看 | 人人草人人搞| 丰满人妻一区二区三区四区54| 91亚洲精品视频| 最新毛片网站〖网:.〗| 亚洲成色A片77777在线小说| 日本人妻视频| 成人免费av| 中国操逼| 91无码成人视频| 91黑人丨人妻丨国产丨| 毛片网站在线| 午夜精品18视频国产| 天堂网中文| 国产成人片| 超碰九色| 老司机免费福利视频| 内射黄片| 日韩视频――中文字幕| 波多野结衣黄色| 狠狠色五月| 色九九综合|