• <menu id="gyiem"><menu id="gyiem"></menu></menu>
  • <menu id="gyiem"><code id="gyiem"></code></menu>

    Kafka設計解析(六)- Kafka高性能架構之道

    原創文章,轉載請務必將下面這段話置于文章開頭處。
    本文轉發自技術世界原文鏈接 http://www.luozeyang.com/kafka/high_throughput/

    摘要

    上一篇文章《Kafka設計解析(五)- Kafka性能測試方法及Benchmark報告》從測試角度說明了Kafka的性能。本文從宏觀架構層面和具體實現層面分析了Kafka如何實現高性能。

    宏觀架構層面

    利用Partition實現并行處理

    Partition提供并行處理的能力

    Kafka是一個Pub-Sub的消息系統,無論是發布還是訂閱,都須指定Topic。如《Kafka設計解析(一)- Kafka背景及架構介紹》一文所述,Topic只是一個邏輯的概念。每個Topic都包含一個或多個Partition,不同Partition可位于不同節點。同時Partition在物理上對應一個本地文件夾,每個Partition包含一個或多個Segment,每個Segment包含一個數據文件和一個與之對應的索引文件。在邏輯上,可以把一個Partition當作一個非常長的數組,可通過這個“數組”的索引(offset)去訪問其數據。

    一方面,由于不同Partition可位于不同機器,因此可以充分利用集群優勢,實現機器間的并行處理。另一方面,由于Partition在物理上對應一個文件夾,即使多個Partition位于同一個節點,也可通過配置讓同一節點上的不同Partition置于不同的disk drive上,從而實現磁盤間的并行處理,充分發揮多磁盤的優勢。

    利用多磁盤的具體方法是,將不同磁盤mount到不同目錄,然后在server.properties中,將log.dirs設置為多目錄(用逗號分隔)。Kafka會自動將所有Partition盡可能均勻分配到不同目錄也即不同目錄(也即不同disk)上。

    注:雖然物理上最小單位是Segment,但Kafka并不提供同一Partition內不同Segment間的并行處理。因為對于寫而言,每次只會寫Partition內的一個Segment,而對于讀而言,也只會順序讀取同一Partition內的不同Segment。

    Partition是最小并發粒度

    如同《Kafka設計解析(四)- Kafka Consumer設計解析》一文所述,多Consumer消費同一個Topic時,同一條消息只會被同一Consumer Group內的一個Consumer所消費。而數據并非按消息為單位分配,而是以Partition為單位分配,也即同一個Partition的數據只會被一個Consumer所消費(在不考慮Rebalance的前提下)。

    如果Consumer的個數多于Partition的個數,那么會有部分Consumer無法消費該Topic的任何數據,也即當Consumer個數超過Partition后,增加Consumer并不能增加并行度。

    簡而言之,Partition個數決定了可能的最大并行度。如下圖所示,由于Topic 2只包含3個Partition,故group2中的Consumer 3、Consumer 4、Consumer 5 可分別消費1個Partition的數據,而Consumer 6消費不到Topic 2的任何數據。
    Kafka Consumer

    以Spark消費Kafka數據為例,如果所消費的Topic的Partition數為N,則有效的Spark最大并行度也為N。即使將Spark的Executor數設置為N+M,最多也只有N個Executor可同時處理該Topic的數據。

    ISR實現可用性與數據一致性的動態平衡

    CAP理論

    CAP理論是指,分布式系統中,一致性、可用性和分區容忍性最多只能同時滿足兩個。

    一致性

    • 通過某個節點的寫操作結果對后面通過其它節點的讀操作可見
    • 如果更新數據后,并發訪問情況下后續讀操作可立即感知該更新,稱為強一致性
    • 如果允許之后部分或者全部感知不到該更新,稱為弱一致性
    • 若在之后的一段時間(通常該時間不固定)后,一定可以感知到該更新,稱為最終一致性

    可用性

    • 任何一個沒有發生故障的節點必須在有限的時間內返回合理的結果

    分區容忍性

    • 部分節點宕機或者無法與其它節點通信時,各分區間還可保持分布式系統的功能

    一般而言,都要求保證分區容忍性。所以在CAP理論下,更多的是需要在可用性和一致性之間做權衡。

    常用數據復制及一致性方案

    Master-Slave

    • RDBMS的讀寫分離即為典型的Master-Slave方案
    • 同步復制可保證強一致性但會影響可用性
    • 異步復制可提供高可用性但會降低一致性

    WNR

    • 主要用于去中心化的分布式系統中。DynamoDB與Cassandra即采用此方案或其變種
    • N代表總副本數,W代表每次寫操作要保證的最少寫成功的副本數,R代表每次讀至少要讀取的副本數
    • 當W+R>N時,可保證每次讀取的數據至少有一個副本擁有最新的數據
    • 多個寫操作的順序難以保證,可能導致多副本間的寫操作順序不一致。Dynamo通過向量時鐘保證最終一致性

    Paxos及其變種

    • Google的Chubby,Zookeeper的原子廣播協議(Zab),RAFT等

    基于ISR的數據復制方案
    如《 Kafka High Availability(上)》一文所述,Kafka的數據復制是以Partition為單位的。而多個備份間的數據復制,通過Follower向Leader拉取數據完成。從一這點來講,Kafka的數據復制方案接近于上文所講的Master-Slave方案。不同的是,Kafka既不是完全的同步復制,也不是完全的異步復制,而是基于ISR的動態復制方案。

    ISR,也即In-sync Replica。每個Partition的Leader都會維護這樣一個列表,該列表中,包含了所有與之同步的Replica(包含Leader自己)。每次數據寫入時,只有ISR中的所有Replica都復制完,Leader才會將其置為Commit,它才能被Consumer所消費。

    這種方案,與同步復制非常接近。但不同的是,這個ISR是由Leader動態維護的。如果Follower不能緊“跟上”Leader,它將被Leader從ISR中移除,待它又重新“跟上”Leader后,會被Leader再次加加ISR中。每次改變ISR后,Leader都會將最新的ISR持久化到Zookeeper中。

    至于如何判斷某個Follower是否“跟上”Leader,不同版本的Kafka的策略稍微有些區別。

    • 對于0.8.*版本,如果Follower在replica.lag.time.max.ms時間內未向Leader發送Fetch請求(也即數據復制請求),則Leader會將其從ISR中移除。如果某Follower持續向Leader發送Fetch請求,但是它與Leader的數據差距在replica.lag.max.messages以上,也會被Leader從ISR中移除。
    • 從0.9.0.0版本開始,replica.lag.max.messages被移除,故Leader不再考慮Follower落后的消息條數。另外,Leader不僅會判斷Follower是否在replica.lag.time.max.ms時間內向其發送Fetch請求,同時還會考慮Follower是否在該時間內與之保持同步。
    • 0.10.* 版本的策略與0.9.*版一致

    對于0.8.*版本的replica.lag.max.messages參數,很多讀者曾留言提問,既然只有ISR中的所有Replica復制完后的消息才被認為Commit,那為何會出現Follower與Leader差距過大的情況。原因在于,Leader并不需要等到前一條消息被Commit才接收后一條消息。事實上,Leader可以按順序接收大量消息,最新的一條消息的Offset被記為LEO(Log end offset)。而只有被ISR中所有Follower都復制過去的消息才會被Commit,Consumer只能消費被Commit的消息,最新被Commit的Offset被記為High watermark。換句話說,LEO 標記的是Leader所保存的最新消息的offset,而High watermark標記的是最新的可被消費的(已同步到ISR中的Follower)消息。而Leader對數據的接收與Follower對數據的復制是異步進行的,因此會出現Hight watermark與LEO存在一定差距的情況。0.8.*版本中replica.lag.max.messages限定了Leader允許的該差距的最大值。

    Kafka基于ISR的數據復制方案原理如下圖所示。
    Kafka Replication

    如上圖所示,在第一步中,Leader A總共收到3條消息,故其high watermark為3,但由于ISR中的Follower只同步了第1條消息(m1),故只有m1被Commit,也即只有m1可被Consumer消費。此時Follower B與Leader A的差距是1,而Follower C與Leader A的差距是2,均未超過默認的replica.lag.max.messages,故得以保留在ISR中。在第二步中,由于舊的Leader A宕機,新的Leader B在replica.lag.time.max.ms時間內未收到來自A的Fetch請求,故將A從ISR中移除,此時ISR={B,C}。同時,由于此時新的Leader B中只有2條消息,并未包含m3(m3從未被任何Leader所Commit),所以m3無法被Consumer消費。第四步中,Follower A恢復正常,它先將宕機前未Commit的所有消息全部刪除,然后從最后Commit過的消息的下一條消息開始追趕新的Leader B,直到它“趕上”新的Leader,才被重新加入新的ISR中。

    使用ISR方案的原因

    • 由于Leader可移除不能及時與之同步的Follower,故與同步復制相比可避免最慢的Follower拖慢整體速度,也即ISR提高了系統可用性。
    • ISR中的所有Follower都包含了所有Commit過的消息,而只有Commit過的消息才會被Consumer消費,故從Consumer的角度而言,ISR中的所有Replica都始終處于同步狀態,從而與異步復制方案相比提高了數據一致性。
    • ISR可動態調整,極限情況下,可以只包含Leader,極大提高了可容忍的宕機的Follower的數量。與Majority Quorum方案相比,容忍相同個數的節點失敗,所要求的總節點數少了近一半。

    ISR相關配置說明

    • Broker的min.insync.replicas參數指定了Broker所要求的ISR最小長度,默認值為1。也即極限情況下ISR可以只包含Leader。但此時如果Leader宕機,則該Partition不可用,可用性得不到保證。
    • 只有被ISR中所有Replica同步的消息才被Commit,但Producer發布數據時,Leader并不需要ISR中的所有Replica同步該數據才確認收到數據。Producer可以通過acks參數指定最少需要多少個Replica確認收到該消息才視為該消息發送成功。acks的默認值是1,即Leader收到該消息后立即告訴Producer收到該消息,此時如果在ISR中的消息復制完該消息前Leader宕機,那該條消息會丟失。而如果將該值設置為0,則Producer發送完數據后,立即認為該數據發送成功,不作任何等待,而實際上該數據可能發送失敗,并且Producer的Retry機制將不生效。更推薦的做法是,將acks設置為all或者-1,此時只有ISR中的所有Replica都收到該數據(也即該消息被Commit),Leader才會告訴Producer該消息發送成功,從而保證不會有未知的數據丟失。

    具體實現層面

    高效使用磁盤

    順序寫磁盤

    根據《一些場景下順序寫磁盤快于隨機寫內存》所述,將寫磁盤的過程變為順序寫,可極大提高對磁盤的利用率。

    Kafka的整個設計中,Partition相當于一個非常長的數組,而Broker接收到的所有消息順序寫入這個大數組中。同時Consumer通過Offset順序消費這些數據,并且不刪除已經消費的數據,從而避免了隨機寫磁盤的過程。

    由于磁盤有限,不可能保存所有數據,實際上作為消息系統Kafka也沒必要保存所有數據,需要刪除舊的數據。而這個刪除過程,并非通過使用“讀-寫”模式去修改文件,而是將Partition分為多個Segment,每個Segment對應一個物理文件,通過刪除整個文件的方式去刪除Partition內的數據。這種方式清除舊數據的方式,也避免了對文件的隨機寫操作。

    通過如下代碼可知,Kafka刪除Segment的方式,是直接刪除Segment對應的整個log文件和整個index文件而非刪除文件中的部分內容。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /**
    * Delete this log segment from the filesystem.
    *
    * @throws KafkaStorageException if the delete fails.
    */
    def delete() {
    val deletedLog = log.delete()
    val deletedIndex = index.delete()
    val deletedTimeIndex = timeIndex.delete()
    if(!deletedLog && log.file.exists)
    throw new KafkaStorageException("Delete of log " + log.file.getName + " failed.")
    if(!deletedIndex && index.file.exists)
    throw new KafkaStorageException("Delete of index " + index.file.getName + " failed.")
    if(!deletedTimeIndex && timeIndex.file.exists)
    throw new KafkaStorageException("Delete of time index " + timeIndex.file.getName + " failed.")
    }

    充分利用Page Cache

    使用Page Cache的好處如下

    • I/O Scheduler會將連續的小塊寫組裝成大塊的物理寫從而提高性能
    • I/O Scheduler會嘗試將一些寫操作重新按順序排好,從而減少磁盤頭的移動時間
    • 充分利用所有空閑內存(非JVM內存)。如果使用應用層Cache(即JVM堆內存),會增加GC負擔
    • 讀操作可直接在Page Cache內進行。如果消費和生產速度相當,甚至不需要通過物理磁盤(直接通過Page Cache)交換數據
    • 如果進程重啟,JVM內的Cache會失效,但Page Cache仍然可用

    Broker收到數據后,寫磁盤時只是將數據寫入Page Cache,并不保證數據一定完全寫入磁盤。從這一點看,可能會造成機器宕機時,Page Cache內的數據未寫入磁盤從而造成數據丟失。但是這種丟失只發生在機器斷電等造成操作系統不工作的場景,而這種場景完全可以由Kafka層面的Replication機制去解決。如果為了保證這種情況下數據不丟失而強制將Page Cache中的數據Flush到磁盤,反而會降低性能。也正因如此,Kafka雖然提供了flush.messagesflush.ms兩個參數將Page Cache中的數據強制Flush到磁盤,但是Kafka并不建議使用。

    如果數據消費速度與生產速度相當,甚至不需要通過物理磁盤交換數據,而是直接通過Page Cache交換數據。同時,Follower從Leader Fetch數據時,也可通過Page Cache完成。下圖為某Partition的Leader節點的網絡/磁盤讀寫信息。

    Kafka I/O page cache

    從上圖可以看到,該Broker每秒通過網絡從Producer接收約35MB數據,雖然有Follower從該Broker Fetch數據,但是該Broker基本無讀磁盤。這是因為該Broker直接從Page Cache中將數據取出返回給了Follower。

    支持多Disk Drive

    Broker的log.dirs配置項,允許配置多個文件夾。如果機器上有多個Disk Drive,可將不同的Disk掛載到不同的目錄,然后將這些目錄都配置到log.dirs里。Kafka會盡可能將不同的Partition分配到不同的目錄,也即不同的Disk上,從而充分利用了多Disk的優勢。

    零拷貝

    Kafka中存在大量的網絡數據持久化到磁盤(Producer到Broker)和磁盤文件通過網絡發送(Broker到Consumer)的過程。這一過程的性能直接影響Kafka的整體吞吐量。

    傳統模式下的四次拷貝與四次上下文切換

    以將磁盤文件通過網絡發送為例。傳統模式下,一般使用如下偽代碼所示的方法先將文件數據讀入內存,然后通過Socket將內存中的數據發送出去。

    1
    2
    buffer = File.read
    Socket.send(buffer)

    這一過程實際上發生了四次數據拷貝。首先通過系統調用將文件數據讀入到內核態Buffer(DMA拷貝),然后應用程序將內存態Buffer數據讀入到用戶態Buffer(CPU拷貝),接著用戶程序通過Socket發送數據時將用戶態Buffer數據拷貝到內核態Buffer(CPU拷貝),最后通過DMA拷貝將數據拷貝到NIC Buffer。同時,還伴隨著四次上下文切換,如下圖所示。

    BIO 四次拷貝 四次上下文切換

    sendfile和transferTo實現零拷貝

    Linux 2.4+內核通過sendfile系統調用,提供了零拷貝。數據通過DMA拷貝到內核態Buffer后,直接通過DMA拷貝到NIC Buffer,無需CPU拷貝。這也是零拷貝這一說法的來源。除了減少數據拷貝外,因為整個讀文件-網絡發送由一個sendfile調用完成,整個過程只有兩次上下文切換,因此大大提高了性能。零拷貝過程如下圖所示。

    BIO 零拷貝 兩次上下文切換

    從具體實現來看,Kafka的數據傳輸通過TransportLayer來完成,其子類PlaintextTransportLayer通過Java NIO的FileChannel的transferTotransferFrom方法實現零拷貝,如下所示。

    1
    2
    3
    4
    @Override
    public long transferFrom(FileChannel fileChannel, long position, long count) throws IOException {
    return fileChannel.transferTo(position, count, socketChannel);
    }

    注: transferTotransferFrom并不保證一定能使用零拷貝。實際上是否能使用零拷貝與操作系統相關,如果操作系統提供sendfile這樣的零拷貝系統調用,則這兩個方法會通過這樣的系統調用充分利用零拷貝的優勢,否則并不能通過這兩個方法本身實現零拷貝。

    減少網絡開銷

    批處理

    批處理是一種常用的用于提高I/O性能的方式。對Kafka而言,批處理既減少了網絡傳輸的Overhead,又提高了寫磁盤的效率。

    Kafka 0.8.1及以前的Producer區分同步Producer和異步Producer。同步Producer的send方法主要分兩種形式。一種是接受一個KeyedMessage作為參數,一次發送一條消息。另一種是接受一批KeyedMessage作為參數,一次性發送多條消息。而對于異步發送而言,無論是使用哪個send方法,實現上都不會立即將消息發送給Broker,而是先存到內部的隊列中,直到消息條數達到閾值或者達到指定的Timeout才真正的將消息發送出去,從而實現了消息的批量發送。

    Kafka 0.8.2開始支持新的Producer API,將同步Producer和異步Producer結合。雖然從send接口來看,一次只能發送一個ProducerRecord,而不能像之前版本的send方法一樣接受消息列表,但是send方法并非立即將消息發送出去,而是通過batch.sizelinger.ms控制實際發送頻率,從而實現批量發送。

    由于每次網絡傳輸,除了傳輸消息本身以外,還要傳輸非常多的網絡協議本身的一些內容(稱為Overhead),所以將多條消息合并到一起傳輸,可有效減少網絡傳輸的Overhead,進而提高了傳輸效率。

    零拷貝章節的圖中可以看到,雖然Broker持續從網絡接收數據,但是寫磁盤并非每秒都在發生,而是間隔一段時間寫一次磁盤,并且每次寫磁盤的數據量都非常大(最高達到718MB/S)。

    數據壓縮降低網絡負載

    Kafka從0.7開始,即支持將數據壓縮后再傳輸給Broker。除了可以將每條消息單獨壓縮然后傳輸外,Kafka還支持在批量發送時,將整個Batch的消息一起壓縮后傳輸。數據壓縮的一個基本原理是,重復數據越多壓縮效果越好。因此將整個Batch的數據一起壓縮能更大幅度減小數據量,從而更大程度提高網絡傳輸效率。

    Broker接收消息后,并不直接解壓縮,而是直接將消息以壓縮后的形式持久化到磁盤。Consumer Fetch到數據后再解壓縮。因此Kafka的壓縮不僅減少了Producer到Broker的網絡傳輸負載,同時也降低了Broker磁盤操作的負載,也降低了Consumer與Broker間的網絡傳輸量,從而極大得提高了傳輸效率,提高了吞吐量。

    高效的序列化方式

    Kafka消息的Key和Payload(或者說Value)的類型可自定義,只需同時提供相應的序列化器和反序列化器即可。因此用戶可以通過使用快速且緊湊的序列化-反序列化方式(如Avro,Protocal Buffer)來減少實際網絡傳輸和磁盤存儲的數據規模,從而提高吞吐率。這里要注意,如果使用的序列化方法太慢,即使壓縮比非常高,最終的效率也不一定高。

    Kafka系列文章

    郭俊 Jason wechat
    歡迎關注作者微信公眾號【大數據架構】
    您的贊賞將支持作者繼續原創分享
    速赢彩app www.0223889.com | www.tbb003.com | aobo00000.com | www.06387755.com | 97297d.com | www.52303v.com | www.bwin980.co | 22ff8332.com | www.73166e.com | www.hg173e.com | 6766bb.com | www.638477.com | www.365279c.com | 3534z.com | www.fcsj.com | www.A11100.COM | js58333.com | www.632599.com | www.85857n.com | 55797h.com | www.551416.com | www.c46.bet | 9958911.com | www.557032.com | www.9c345.com | 44ss8332.com | 00nn8331.com | www.2418l.com | www.365815x.com | xpjok.com | www.35155j.com | www.25msc.com | 12274444.com | www.hcw266.com | www.7415aa.com | 2381.com | 37283.com | www.8582pp.com | www.hy229.com | 805216.com | www.919586.com | www.58665q.com | 111122xx.com | 6146k.com | www.91233b.com | www.v6558.com | 793929.com | www.807835.com | www.365055.bet | 500000514.com | xpjdc.tw | www.26199.com | www.js9741.com | douguo.com | www.183209.com | www.493337.com | www.360025.com | 871ww.com | www.hy6939.com | www.jz6988.com | 18438w.com | dd00558.com | www.33598r.com | www.7033588.com | 1hga.com | 2287c.com | www.12018.cc | www.53094444.com | www.hg968.com | www.hcw776.com | www.55676e.com | www.25288o.com | 333790a.com | www.300388.com | www.522665.com | www.40033.1540033.com | 3435h.com | www.193722.com | www.0343.com | www.qmc0088.com | 624221.com | 33382j.com | www.599749.com | www.0600x.cc | www.fbs333.com | 37570m.com | pj75.com | www.106573.com | www.sx1800.com | www.44466666.com | www.3615004.com | 71707o.com | 23800w.com | www.16878g.com | www.9737pp.com | www.alpkylc.com | 32424e.com | 99567.com | www.ybao9.com | www.245885.com | www.pj878.com | 86811h.com | 1005021.com | www.431016.com | www.1234168.com | www.hg1266.com | www.28758j.com | 23599j.com | q2894.com | www.810337.com | www.hg860022.com | www.dcw88.com | www.3459i.com | 85698x.com | 858489.com | www.186972.com | www.50052s.com | www.r80288.com | www.5303v.com | 2373y.com | 22995144.com | 333vn77.com | www.898341.com | www.4561.am | www.97cp345.com | www.5197365.com | 2096b.com | dz0777.com | 0109js.com | www.879869.com | www.yun873.com | www.00772i.com | www.7811b.com | www.kim111.com | z72227.com | 3178f.com | 339649.com | www.923887.com | www.3978q.com | www.79095p.com | www.ns1122.com | www.655666d.com | 883399e.com | 3846uu.com | 3304ff.com | 2595e.com | www.784782.com | www.66376w.com | www.2268js.com | www.i456x.com | www.606933.com | www.pjdc4488.com | bb888866.com | e2554.com | 53358q.com | 08778a.com | 52599h.com | www.321693.com | www.cp8004.cc | www.99677x.com | www.5446x.com | www.06617.com | www.9m148.com | www.0235tt.com | www.wnsr280.com | 3435w.com | 87965pp.com | 4995w.com | 88894m.com | f83377.com | 0208065.com | www.191065.com | www.770960.com | www.99jta.com | www.86267n.com | www.66074.com | www.xj7002.com | www.89599d.com | www.qmc0088.com | www.10852.com | www.58695.com | www.4261199.com | www.67797f.com | www.6491o.com | 2222k22.com | 2844x.com | vipvip7777.com | 91019j.com | w3405.com | 44264444.com | bg867.com | 8159mmm.cc | 53262.com | z15666.com | 7720r.com | 9007893.com | 56988m.vip | g85686.com | 3807bb.com | 82365k.com | 3778dd.com | lehu80.com | hgw168p.com | 6423x.com | 线路1005.com | 55811.com | 11113885.com | 99589ff.net | 4448449.com | 55331mm.com | 5hga.com | hd8332.com | 38345.com | 535.cc | www.0686555.com | www.645suncity.com | www.525xpj.com | www.xpjvip07.com | www.65175.com | www.110048.com | www.huidasj.com | www.5001600.com | www.55070y.com | www.2544g8.com | www.7920t.com | www.9646w.com | www.47370.cc | www.607212.com | www.207109.com | 8036bb.com | 52599g.com | 77229193.com | 67890mmm.com | 3078d.com | www.76060s.com | www.amxh33.com | www.hg7851.com | www.27363c.com | www.2021j.com | www.065835.com | www.51331b.com | www.960121.com | www.139620.com | youxi.com | 272c.net | b5957.com | 3178hh.com | www.s32126.cc | www.amdc55.com | www.k9478.com | www.64566f.com | www.6889792.com | www.8039j.com | www.599734.com | 69440011.com | 2595m.com | bet37544.com | www.rbet3365.com | www.883131.com | www.5099oo.com | www.b63568.com | www.3478w.cc | www.50054e.com | 44488p.com | s14666.com | 3009j.com | www.p31888.com | www.hg7664.com | www.47506v.com | www.0270l.com | www.656270.com | 6616xsj.com | 3522aa.com | 2820s.com | www.9679k.com | www.bscpjj.com | www.1764i.com | www.3668t.com | www.w3065.com | www.09848.com | www.5583066.com | www.66073.cc | 132ag88.com | 47749h.com | 80060303.com | www.27111x.com | www.3157l.com | www.ya2019s.com | www.689044.com | 15a43.net | 3846zzz.com | www.76060c.com | www.1389ff.com | www.6888773.com | www.702392.com | 5003t.com | 50099w.com | www.777444j.com | www.28000w.com | www.96386b.com | www.025727.com | 0135.com | www.vnsr00888.com | www.lfcp123.com | www.004829.com | www.599849.com | 7736z.com | 111122mm.com | www.597567a.com | www.997263.com | www.444087.com | yh888k.com | 91019l.net | www.mk939.com | www.aobo193.com | www.106395.com | 0485.com | www.s22365.com | www.917090.com | www.093wy.com | 1784.com | 3434a.com | www.16602g.com | www.yun879.com | sxlwl.net | 86811bb.com | www.y5777.com | www.490802.com | www.530995.com | 1813q.com | www.32126a.net | www.9170106.com | www.955334.com | 8381tt.com | www.7777wns.com | www.38138a.com | www.796678.com | 86688008.com | www.xpj1t1.com | www.5446h.com | www.178362.com | hjcp77.com | www.yh333.com | www.79707.com | 80368aa.com | r2146.com | www.06263.com | www.29496a.com | 6a6a.com | btt897.com | www.06617c.com | www.641577.com | 8344dd.com | www.xb0028.com | www.0194005.com | 00885004.com | 1592m.com | www.k69096.com | www.560706.com | eee1915.com | www.683210.com | www.34788j.com | 1592h.com | www.223456h.com | www.5441p.com | js89i.vip | 162788.com | www.v0040.com | www.yz7704.com | 701679.com | 预览2381.com | www.1429e1.com | www.178670.com | t555c.com | www.28000l.com | www.498166.com | 61324444.com | www.3396877.com | www.503990.com | bt1088.com | www.yf370.com | www.489770.com | s45638.com | www.71071o.com | www.307075.com | 131eee.net | www.917090.com | www.50080a.com | 3202x.com | www.460017.com | 336v.com | www.77yh765.com | www.606117.com | 51133ppp.com | www.99048.com | www.c5237.com | 3775p.com | www.515917.com | www.235035.com | 8827ccc.com | www.1764.com | b32365.com | www.kk2229.com | www.hx1184.com | 4445.com | qq3405.com | t21148.com | www.911137.com | www.293788.com | gc622.com | www.amjs3456.com | 2851v.com | www.h7733.com | www.912063.com | 496.net | www.1559508.com | 0931jiehun.com | www.009suncity.com | www.31744.com | 8159n.cc | www.308956.com | 77606u.com | www.440887.com | www.929709.com | 2864d.com | www.0612j.com | 1389ff.com | www.js403.com | www.303053.com | 78113366.com | www.50064d.com | 4025a.com | www.621301.com | 3416y.com | www.yao626.com | www.326477.com | www.pj0567.com | www.9155a.com | 3685q.com | www.23819.am | www.846239.com | www.1206.com | 6663805.com | www.x80288.com | www.89894u.com | www.i32126.cc | www.3933y.cc | 9149q.com | www.9989572.com | 33432i.com | www.sbd030.net | 6146k.com | www.hg8127.com | bet28n.com | www.v15528.com | www.605134.com | www.hg9070.com | www.ac3322.com | 55818o.com | www.80075b.com | 80850b.com | www.hg192.com | 2324hhh.com | www.8911333.com | www.845040.com | 1624hh.com | www.61233pp.com | 84496677.com | www.2091p.com | www.80075e.com | www.hg0532.com | www.055972.com | www.js7444.com | www.60108o.com | www.sjg700.com | 59964cc.com | www.bm9998.com | bcbm777.com | www.814c.com | 3379z.com | www.77731y.com | zz1916.com | www.tyc714.com | 222v22.com | www.530079.com | 08450.com | www.k94600.com | 716.com | www.304005.com | 7711209.com | www.9155c.com | 1624hh.com | www.775020.com | www.21365dd.com | www.66376v.com | www.xf01.com | aipin88.me | www.04567f.com | 61999yy.com | www.pj9030.com | 112z.net | www.2934u.com | www.hhhggg.com | www.326366.com | www.hg0658.com | 454691.com | www.06617.com | 3726n.com | www.ya2019l.com | 3169s.com | www.670665.com | www.p7890.com | 5651f.com | www.sbd025.net | 7003p.com | www.bet353653.com | 8290h.com | www.599380.com | www.7811b.com | 667766q.com | www.4196k.com | 2737vip.com | www.5091m.com | www.zzzz0263.com | 009900u.com | www.55060o.com | 167605.com | www.45258.cc | www.sb5202.com | bb888811.com | www.pjgw66.com | 25228.am | www.810625.com | www.093779.com | yl66yl11.com | www.2418q.com | www.kima88.com | www.049988.com | www.k70.com | 55967d.com | www.30xw.com | www.585kk.com | 15856d.com | www.yh70123.com | www.6446a.com | 2190n.com | www.659202.com | p7890.com | www.570981.com | www.4719aa.com | 32212t.com | www.w593.com | www.77099.com | 01234i.com | www.9818j.cc | www.3959h.com | 1188xpj.com | www.96386p.com | www.00829p.com | 89892tt.com | www.37377o.com | www.8494i.com | 6641aa.com | www.7920o.com | www.hg9951.com | 4638866.com | www.270sun.com | www.hg635.com | 50028866.com | www.997286.com | www.yinhe9507e.com | 77885002.com | www.12455v.com | www.330099q.com | bet99499.com | www.2350t.com | www.988300.com | v0142.com | www.811675.com | www.85857c.com | 11jj8331.com | www.29277o.com | www.340388.com | www.a3a000.cc | 1408q.com | www.6653.com | www.701439.com | 8037xx.com | www.665771.com | www.o3065.com | 3379ii.com | 39992266.com | www.hd8673.com | www.330099q.com | 78666r.com | www.874966.com | www.5596877.com | 55gg8331.com | 3807n.com | www.80075l.com | www.289333.com | ibllnql.cn | www.43131b.com | www.blr4444.com | www.383050.com | 0905.com | www.599190.com | www.9170107.com | www.xpj7777.cc | 38365t.com | www.982082.com | www.4446ddd.com | www.04222e.com | 93996c.com | www.ch8966.com | www.4136.com | www.38200x.com | z2649.com | www.630367.com | www.h1432.com | www.474.net | 12274466.com | www.306922.com | www.yjxxelxx.com | www.6605889.com | 55552007.com | 58222b.com | www.ttcp88.co | www.cs.bet | 97618h.com | 80892mm.com | www.867865.com | www.8080999f.com | www.995n.net | 5856q.com | 866666k.com | www.80075z.com | www.948.com | x2913.com | 1389jj.com | www.423552.com | www.7249z.com | www.6372008.com | 923810.com | 19927.com | www.810525.com | www.12136l.com | www.88993s.com | hcp5555.com | df8jj.com | www.599439.com | www.4565.am | www.t0524.com | 80579a.com | feicai0879.com | www.195622.com | www.986440.com | www.50999w.com | www.bet3652019.com | 66287g.com | h14666.com | www.933777a.com | www.8577i.cc | www.1274uu.com | www.0888js.com | 3846y.com | 7570.am | www.hy5505.com | www.xpj66123.com | www.088878.com | www.zr609.com | 3559d.com | 4123001.com | www.592909.com | www.yun877.com | www.7415o.com | www.hg978978.com | mry456.com | 4508vv.com | 9103ff.com | www.799346.com | www.yl1981.com | www.16181g.com | www.24671.net | 897kk.cc | 5080.cc | 3936d.com | www.52303o.com | www.76gcw.com | www.7zz66.com | www.92518.com | www.v0022.tv | 6647h.com | 33846.net | 8547r.com | www.81520u.com | www.fl98.com | www.135539.com | www.89677y.com | www.msc997.com | www.32126n.net | 45637b.com | 2021x.com | 3016uuu.com | www.53900i.com | www.994948.com | www.21202i.com | www.77782yh.com | www.hjcp22.com | www.969516.com | www.bh33123.com | 00cc8331.com | 36400077.com | 54443b.com | 6220d.com | www.308908.com | www.flcb5.com | www.6000hd.com | www.77785yh.com | www.8967g.com | www.70022.com | www.7830k.com | 79889b.com | z92266.com | hhvip666.com | 4880i.com | chinajtw.com | 3089.com | www.41518e.com | www.631799.com | www.le96.com | www.43818c.com | www.win1235.com | www.30350g.com | www.98698l.com | www.333010.com | www.b2229b.com | www.u30226.com | www.md006.com | 5651m.com | 6868aa.cc | 58532222.com | 9679n.com | 新2.com | 3779955.com | 37a700.com | 9964.one | xf122.com | 060.com | 00048j.com | www.109031.com | www.431056.com | www.661023.com | www.924377.com | www.qucp1.com | www.2109t.com | www.53539.cc | www.36166z.com | www.07163i.com | www.13434f.com | www.1466d.com | www.27jsc.com | www.0033sun.com | www.2566y9.com | www.js6969.com | www.http://443598.com/ | www.293988.com | www.yy17173.com | www.5446nn.com | www.g32939.com | www.58118h.com | www.k70.com | www.68806.com | www.565560.com | www.50999h.com | www.c9860.com | www.6606488.com | www.19yh4.com | www.00772j.com | www.bwinyz11.com | www.666207.com | www.33678xx.com | www.38775bb.com | www.087p.com | www.35898.COM | www.288963.com | www.87668d.com | www.00840n.com | www.080wy.com | www.911888aa.com | www.808751.com | www.500106.com | www.060888.com | 28886508.com | tzvip2019.com | 50024499.com | 1317726.com | so88888cc | 93922l.com | 8381005.com | y2921.com | www.jsw77.cc | www.8694l.com | www.hg3385.com | www.hggj5551.com | www.5966yyy.com | www.16181n.com | www.60886w.com | www.747365a.com | www.68568l.com | www.2dzh.com | www.587639.com | www.32123v.com | j5429.com | 4036xx.com | 66287c.com | 838388d.com | 5099ee.com | www.055468.com | www.hg901.com | www.dzcp1111.com | www.4196a.com | www.1128229.com | www.21202m.com | www.849129.com | www.106576.com | yd12302.cc | 8449yht.com | 888992266.com | 2013.vip | www.804suncity.com | www.dz8789.com | www.55070m.com | www.97828f.vip | www.53900g.com | www.889688.com | 22234066.com | 996622cc.com | 4488sss.com | jinlong12.com | www.4107r.com | www.599199.com | www.06617.com | www.9989575.com | www.uucp300.com | www.153880.com | 4023r.com | 4036nn.com | 99835.com | www.6359.com | www.33707.com | www.02737.com | www.jcai0.com | 844.cc | 7720q.com | 42422.com | www.hg001111.com | www.6636msc.com | www.69567a.com | www.50051vip.com | www.196702.com | 33318s.com | 官网捕鱼5.com | www.8901z.com | www.91221.com | www.47506p.com | www.33997y.com | www.202341.com | 61652b.com | 8547c.com | www.333133v.com | www.0057a.com | www.01924.com | www.603614.com | 55984d.com | 8547q.com | www.y00000.com | www.3737.cc | www.37377f.com | www.630155.com | vns7.vip | hwcp44.com | www.4972ff.com | www.3157a.com | www.68682h.com | www.131333.com | b918.com | ylg9888.com | www.928668.com | www.1764l.com | www.773976.com | 8881207.com | 9339999t.com | www.pj2256.com | www.4996xt.com | www.2632o.com | 0747s.com | 53358v.com | www.55268tt.com | www.mgm555555.com | www.5086b.com | 8988jj.com | 185301.com | www.00829h.com | www.38138c.com | www.39cp.cc | 4997g.com | qmbc6.com | www.36796.com | www.6688kcd.com | www.596112.com | p7742.com | www.81866v.com | www.77731w.com | www.50051z.com | 921710.com | wnsr8812.com | www.44889u.com | www.xjs733.com | www.330985.com | 805216.com | www.hgbet66.com | www.377666y.com | www.959709.com | 00228.com | www.6033j.com | www.4963z.com | www.33fzc.com | 667766q.com | 228888w.com | www.l5503.com | www.5484e.com | 19991j.com | zhcpmm.com | www.b7b8.com | www.5441t.com | rrr8827.com | 89892kk.com | www.604886.com | www.zuan444.com | 1665jj.com | www.090009.com | www.b35aa.com | www.662182.com | 111pj8.cc | www.25288b.com | www.a63568.com | 97297h.com | 44yy8332.com | www.37111m.com | www.22603.cc | xpj44444.vip | www.pj80888.com | www.7225g.com | www.444081.com | 3552s.com | www.661990.com | www.43818b.com | 0250.com | www.6491n.com | www.w84z.com | www.89894c.com | 1hga.com | www.934498.com | www.c6321.com | 78666j.com | www.16297755.com | www.7239f.com | 55rr8332.com | www.38200x.com | www.7920a.com | 0332o.com | 88807z.com | www.xpj16683.com | www.178357.com | 365vip700.cc | www.169009.com | www.611506.com | 66671l.com | www.55526o.com | www.797884.com | 32212z.com | www.yh8396.com | www.861830.com | 223blr.com | www.3122mm.com | www.959581.com | pj00kk.com | www.dcyyh.com | www.858659.com | iii67890.com | www.hf6699.com | www.701564.com | 3482p.com | www.386464.com | www.330865.com | 7744kkk.com | www.4996sp.com | 4195h.com | 1770x.com | www.7240z.com | 6403c.com | www.21365kk.com | www.66621j.com | 8294n.com | www.2010889.com | www.911720.com | ag81155.com | www.tyc723.com | www.093827.com | 658606.com | www.99094k.com | 604.com | www.84898v.com | www.2632d.com | c40033.com | www.50999q.com | www.36788e.com | www.00018js.com | www.hg5013.com | 3550p.com | www.900988.com | www.602857.com | hg22211.com | www.0088psb.com | x3456.com | www.js6169.com | www.qmkl7.com | tt1030.com | www.91779i.com | ppp3405.com | www.17828v.com | www.hm3222.com | 00rr8332.com | www.88325i.com | 30006p.com | www.7545q.com | www.905866.com | 65005h.com | www.3691z.com | spj08.com | www.drf0432.com | www.060640.com | www.zr609.com | www.16878t.com | 2018plus.com | www.1754h.com | p2306.com | www.239888.com | www.318016.com | www.wxr44.com | www.26299w.com | 80368q.com | www.69567o.com | aobo77777.com | www.901690.com | www.43818u.com | www.dy6611.com | www.c4530.com | pj12234.com | www.aobo191.com | 4025e.com | www.1429b1.com | 77605h.com | www.4866a90.com | 6594kk.com | www.msc99.la | www.664628.com | 1479t.com | www.20016.cc | 8449ii.com | www.28891h.com | 4444c9.com | www.908818.com | 08702004.com | www.89.cc | zgfcw.cc | www.lu8810.com | 5509m.com | www.520008.net |