• <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 bk080.net | www.36166t.com | p2306.com | www.9976733.com | www.fh3993.com | h88990.com | www.371f.cc | 33511.com | www.5095t.com | 83377z.com | www.022m.cc | www.o22365.com | www.396990.com | www.777444u.com | www.luck885.com | www.hg131.com | www.495568.com | www.777444f.com | zhcpss.com | www.vip17.bet365zhongguo8.com | 88552007.com | www.cp0015.com | 78114422.com | www.7892.ag | 553322KK.com | www.1108788.com | 6320666.com | www.3933i.cc | www.hg7725.com | 5647q.com | www.bwinyz43.com | 3242g.com | www.954321k.com | 1319345.com | www.049049.com | www.988300.com | 5309i.com | www.huangma27.com | 5309z.com | www.475711.com | www.058767.com | 2021ddd.com | www.w84q.com | 2649y.com | www.5095x.com | www.99927nn.com | 1588hg.com | www.998855w.com | hg3457.com | www.68993223.com | www.6491u.com | tyc5504.com | www.88vn777.com | 3016sss.com | www.595hc.com | www.5816ee.com | 1133589.com | www.z2894.com | www.hg191.org | www.040415.com | www.938690.com | 77115003.com | h45638.com | www.4521i.com | 51133f.com | www.5xcr.com | www.72747.com | 83138m.com | www.97655s.com | www.wnsr838.com | 38345s.com | www.6888779.com | www.001711.com | 44p88.cc | www.59901.com | www.56520o.com | 4880o.com | www.w84n.com | www.2078u.com | jixiang5.com | www.022sx.cc | www.4078c.com | ys2222.com | www.775703.com | www.3122mm.com | 4167.com | 79964w.com | www.5958125.com | www.55268qq.com | 01234h.com | www.hcjt8.com | www.xpj395.com | 750.com | www.2109t.com | www.k2678.com | 009900h.com | 19880e.com | www.v00888.com | 5856n.com | 566pj.com | www.80065s.com | www.hg06661.com | 11422u.com | www.77114l.com | www.908558.com | 4289n.com | www.701564.com | www.4078c.com | www.msc00.la | 88ee940.com | www.2188cai.com | www.79500n.com | 1294a.com | 8520f.com | www.36788f.com | www.56655a.com | www.kima99.net | 8547r.com | www.996546.com | www.lb55567.com | www.777xin2.com | 65561166.com | 33318z.com | www.07163c.com | www.50hga.com | 5446cc.com | oo44442.com | www.420421.com | www.4331t.com | www.08bwin.com | 6245q.com | mm99922.com | www.220875.com | www.js18456.com | www.k64602.com | v33669.com | bx394.com | www.505170.com | www.954321u.com | www.c46.com | 88807s.com | bowang22.com | baizun456.com | www.97655m.com | www.88166a.com | www.99338.com | bowang005.com | 1703222.com | www.hy5455.com | www.80188e.com | www.448809.com | www.hg45888.com | 86811qq.com | 89wns88.com | www.449810.com | www.582010.com | www.lu8810.com | www.788698.com | wnsr8808.com | 11557076.com | 3522tt.cc | www.309877.com | www.90305b.com | www.91779h.com | www.12345699.com | www.9068yy.com | 2381yy.com | 5360.com | e1458.com | www.874110.com | www.js89b.vip | www.hg9168.com | www.882745.com | ddcp88.com | 69441199.com | 3404s.cc | 365aaa.vip | www.369061.com | www.126kc.com | www.78949z.com | www.ba309.com | www.hg586.com | www.333xhtd.com | ff555e.com | 80892vv.com | 91019v.net | gh7106.com | www.567306.com | www.9646s.com | www.28000f.com | www.9374k.com | www.0099buyu.com | 1594002.com | 85698w.com | pj1007.com | hag8326.com | www.61655i.com | www.995sj.com | www.51331b.com | www.758908.com | www.673888y.com | www.20452.net | www.778849.com | www.5626k.com | www.h9978.com | youfa777.vip | 4182i.com | 4022u.com | 11104066.com | z88ww.com | 66671b.com | bet999000.com | 500000972.com | www.73166i.com | www.550164.com | www.9437.cc | www.22505.cc | www.772222.biz | www.6889779.com | www.8977500.com | www.pj88.com | www.hg7122.com | www.hq5177.com | www.2078o.com | www.9679h.com | www.bj9093.com | www.xhtd03.com | www.xhtd1122.com | www.z27229.com | www.3459s.com | www.7830z.com | www.msc77.net | www.32666z.com | www.0040yyy.com | www.pj88222.com | www.pj038888.com | www.vns2831.com | www.330067.com | www.0wdgj.com | www.xpj269.com | www.kj803.com | www.pj5875.com | www.20326.com | www.70022.com | www.k779977.com | www.c44ff.com | www.00013.net | www.137603.com | www.232060.com | www.00773g.com | www.9822ad.com | www.vns998.me | www.bet3651689.com | www.16065p.com | www.39957b.com | www.hm6622.com | www.550164.com | sbc89.cn | 866666c.com | tt888v.com | 1489y.com | 168b1.com | 4018kk.com | 496kk.com | 3225a.com | www.v3305.com | www.9a003.com | www.ggu.99233u.com | www.8313c.com | www.9737ii.me | www.86339m.com | www.99677h.com | www.ybao3.com | www.287916.com | 3156eee.com | 01234rr.com | 3078j.com | b21148.com | 3685m.com | www.5777933.com | www.888wa.com | www.c558.vip | www.881543.com | www.00840p.com | www.564846.com | 8030e.com | 5856fff.com | 777hg999.com | 7742gg.com | feicai0574.com | www.h22365.com | www.hg1266.com | www.60886v.com | www.1466x.com | www.996763.com | 2127dd.com | 80567h.com | 53262ww.com | 272h.net | www.64566z.com | www.xpj718.com | www.4331c.com | www.785382.com | 2222k29.com | f666.org | feicai0557.com | www.777444r.com | www.458828.com | www.ylylc07.com | www.858776.com | 5168b.com | 3435g.com | www.hg098.com | www.dafa3.cc | www.47707.co | www.3416z.com | 1466b.com | svip394.com | xx2649.com | www.hqr77.com | www.w84t.com | www.975961.com | 35222vv.com | 1443b.com | 23233h.com | www.8808777.com | www.9971i.com | www.998924.com | 36404444.com | js75ee.com | www.xpj3778.com | www.19yh6.com | www.16878g.com | 1705r.com | 3467w.cc | www.25288r.com | www.1851138.com | www.39cp.cc | e47479.com | 496qq.com | www.tb186.com | www.838957.com | www.595477.com | zoudayun88.com | 55818e.com | www.195666.com | www.081234.com | bet8688.com | aa8159.cc | www.333133r.com | www.q3410.com | www.hj9668.com | 998e.cc | 2266hhgz.com | www.11557712.com | www.2418f.com | 59964zz.com | 50025522.com | www.184589.com | www.5856877.com | www.41518b.com | 0234vv.com | www.js3034.com | www.733483.com | www.401270.com | so88888.cc | www.181070.com | www.yh888b.com | www.914902.com | 23233g.com | bb8888-3.com | www.0072737.com | www.565121.com | 3467y.cc | www.277577.com | www.50026l.com | 3473p.com | www.aicaidd.com | www.316088.com | www.607252.com | 3534i.com | www.22252055.com | www.33997j.com | 97799a.com | zhcp92.com | www.00772e.com | www.550284.com | 3522s.cc | www.555305.com | www.c5237.com | 3678gg.com | www.yinhecc99.com | www.1113yl.com | 3379y.com | 50000922.com | www.377666l.com | www.627797.com | 01885g.com | www.amjs9.com | www.1035v.com | 2618g.com | www.hy229.com | www.55228k.com | 12742n.com | www.655666a.com | www.a773776.com | 31325h.com | www.502414.com | www.61233w.com | dd3189.com | www.g1207.com | www.82676.com | 9958999.com | www.hg2381.com | www.918li.com | 37111n.com | www.25000.com | www.935506.com | 112u.net | www.38138i.com | v7742.com | 88903838.com | www.hg1125.com | blr940.net | www.h896.com | www.959122.com | v62.com | www.bwin950.co | 5006811.com | www.333222z.com | www.55676b.com | 1305007.com | www.mmtx88.com | www.44ckb.com | 3778pp.com | www.9737aa.me | 118cp4008123.com | www.hg31188.com | www.26878d.com | 3967e.com | www.31399ee.com | www.401345.com | 2246sun.com | www.68993229.com | 08530009.com | www.384559.com | 129880.net | www.85770m.com | www.16878g.com | 33318i.com | www.58908a.com | bj799.com | www.bb8005.com | www.595301.com | d2649.com | www.6613633.com | spj02.com | www.sportsinfo8.net | www.52072a.com | www.19888bet.com | www.hx1165.com | 500000713.com | www.38775vv.com | 3846nn.com | www.a81a.cc | 7141kk.com | www.yh04b.com | www.390685.com | www.709899.com | www.022u.cc | spj09.com | www.0270o.com | 8159m.cc | www.9464005.com | js14.com | www.4996gd.com | 728055.com | www.658300.com | 3788dd.com | www.xpj230.com | dz22555.com | www.82344.com | www.50026o.com | www.77007076.com | www.330276.com | www.777444r.com | www.541638.com | www.1990365.com | www.693119.com | www.223456r.com | www.810519.com | 4195k.com | www.055t.cc | 160970.com | www.le520.com | 1116dh.com | www.972283.com | www.js1166.com | www.808399.com | www.653501.com | www.599849.com | www.309181.com | www.320661.com | www.5tgpd.com | www.206881.com | www.aw6789.com | 9121904.com | www.ouzhou7.com | k1.z6528.com | www.sscb00.cc | 3957e.com | www.xpj6.net | tm700.com | www.16878e.com | qycp04.com | www.gocp3.com | www.997558.com | www.208990.com | www.38538.com | 99567v.com | www.9737bb.me | jx2900.com | www.55717g.com | hwcp33.com | www.39cp.cc | www.hg0088.co | www.66332u.com | www.992msc.com | 4155.cc | www.778545.com | hg0099e.com | www.1035t.com | www.yh8220.com | www.78949o.com | www.jlh01.com | 58802e.com | www.2283066.com | 2142255.com | www.2350c.com | www.hg5001.com | 1168z.com | www.28000a.com | 78808f.com | www.50074g.com | www.85770l.com | 2381www.com | www.9737vv.me | ccc01234.com | www.zuan333.com | www.3056008.com | 3009d.com | www.33678dd.com | 11mm8332.com | www.807266.com | www.js749.com | 863873.com | www.557466.com | www.8805js.com | www.653750.com | www.3650092.com | 0267.com | www.26878m.com | www.365815x.com | 2618i.com | www.gg4625.com | h47479.com | www.61233i.com | www.8888hj.com | 36989a.com | www.823023.com | www.84230.com | vip145b.com | www.00840r.com | www.142357.com | 11163322.com | www.68568r.com | www.5651e.com | 0011341.com | www.237377.com | www.38200l.com | 8988w.com | www.55717k.com | www.0853c.com | 6245w.com | www.rrqp111.com | www.147891635.com | pj677l.com | www.555xx.cc | www.1019992.com | dejinbet.com | www.hjdc051.vip | www.yy883.com | 2566h9.com | www.61655l.com | www.vv1112.com | eee444000.com | www.666xm.cc | www.bm246.com | 25288v.com | www.378016.com | www.848777c.com | 2381jjj.com | 59889.cc | www.68993279.com | www.87680n.com | 06006.com | www.2632m.com | www.49484.com | 54241133.com | www.178357.com | www.73990e.com | www.00217g.com | 0343e.com | www.64059.com | www.hg9010.com | 3685.com | 9964n.com | www.1466j.com | www.4445156.com | 4182008.com | www.553938.com | www.7225c.com | www.xpj8888.cc | 20771199.com | www.071wy.com | www.370175.com | 8827vv.com | 11nn8331.com | www.16878z.com | www.blg888.com | 6830s.com | xin98886.com | www.26878y.com | www.zte444.com | 4182006.com | 7570.am | www.7714i.com | www.29019.com | 6572m.com | 658089.com | www.25688p.com | www.dzcp1111.com | amjzh.top | js16858.com | www.789755.com | www.932418.com | www.76543z.com | 4080.com | 9789886.com | www.3978l.com | www.yt7488.com | 2643h.com | 3775f.com | www.696by.com | www.55070t.com | www.456589.com | 57157t.com | 7196g.com | www.7793u.com | www.55526f.com | 78114400.com | 4828.com | 66094466.com | www.26163n.com | www.7415c.com | www.40818f.com | 3024k.com | 4379r.com | www.ct8811.com | www.07679r.com | www.77605x.com | 0747j.com | z14666.com | www.324177.com | www.9646l.com | www.dggcp100.com | www.yh4477.cc | 521102.com | ww2649.com | www.859505.com | www.hg89998.com | www.09848.com | www.c50336.com | 9679f.com | www.84499o.com | www.32123h.com | www.3116s.com | www.dhygw994.com | 83377b.com | 83378a.com | 11170011.com | www.946854.com | www.3691n.com | www.lefa3333.com | www.4107m.com | 0015oo.com | vip66658.com | 80368vv.com | www.hy9311.com | www.826017.com | www.288988a.com | www.vn99.vn | 4647b.com | u2146.com | 22296yy.com | www.800986.com | www.hb598.net | www.57800m.com | www.15960000.com | www.ao899.com | bwin8w.com | hg0266.com | 67890fff.com | www.097928.com | www.qucw8.com | www.37377s.com | www.686102a.com | www.8799.cc | www.995055.com | feicai0596.com | 5856jjj.com | 626810.com | 0612j.com | www.545669.com | www.5441t.com | www.9606.tw | www.8j3.com | www.jsc12315.com | www.zs5588.com | www.hg80999.com | 37570a.com | uu01234.com | 13222x.com | 83golf.com | 5001c.com | www.573678.com | www.5086i.com | www.4331y.com | www.73990v.com | www.cp9508.com | www.861000.com | www.pj5506.com | www.0636h.com | 1115675.com | 88851w.com | 65365.com | 5201314777.com | 428428ss.com | 2355.com | 32126b.net | www.230320.com | www.769588.com | www.2632z.com | www.4323q.com | www.win1239.com | www.07679g.com | www.38138k.com | www.50999l.com | www.hg068008.com | www.89368.com | www.70088444.com | www.330099p.com | www.yh8211.com | www.xpj1122.cc | js666996.com | 0747xx.com | 3169g.com | 4465p.com | 3807o.com | laojieyuhe.com | 6999002.com | qijiduchang.com | 6175t.com | 8547rr.com | 5144m.com | zz2205.com | 2132.com | 2506o.com | 22296yy.com | 3189rr.com | xpj51333.com | 5099ll.com | 2924222.com | 131vv.net | 18438cj.com | 华人888.com | 748557.com | 48886508.com | 1331h.com | vns700.net | 30019w.com | 623670.com | k61653.com | 35ss.vip | 9679f.com | e3405.com | 655661177.com | 80892l.com | zhcpmm.com | 1705e.com | www.68666g.com | www.pjdc3388.com | www.56520i.com | www.1389v.com | www.219js.com | www.ld003.com | www.751.cc | www.xpj2060.com | www.xpj16685.com | www.180092.com | www.1434r.com | www.281138.com | www.61655j.com | www.5xch.com | www.669350.com | www.195090.com | wn99yyy.com | 7894q.com | 38365t.com | 3726j.com | 2490j.com | bb5443.com | www.76060o.com | www.3046w.com | www.610567.com | www.9980.la | www.79095r.com | www.735518.com | www.98779.com | www.819847.com | www.210793.com | 555vn77.com | nn1331.com | 4022dd.com | 3651266.com | www.xjs8895.com | www.hgbet7.com | www.76775h.com | www.89599p.com | www.2234.im | www.54968f.com | www.799439.com | www.77802u.com | 88903737.com | 8522uuuu.com | 8036aa.com | www.ag822.com | www.589tyc.com | www.2222yh.vip | www.7350.vip | www.4189b.com | www.327477.com | 11229193.com | pj223322.com | 00cc8331.com | www.pj5722.com | www.64717.com | www.4bet005.com | www.5856858.com | www.03czj.com | www.178562.com | 0033f.cc | 3957o.com | hg0088.com | www.js466.com | www.gt111777.com | www.55717l.com | www.c8714.com | 143545.com | 15a37.net | 500000576.com | www.81228m.com | www.4963qq.com | www.0343f.com | www.946854.com | 3121aa.com | 4182a.com | 37570m.com | www.85016.com | www.1429e1.com | www.77801c.com | www.412688.com | 34545.com | 3685a.com | www.m27229.com | www.8967e.com | www.556303.com | www.489770.com | 67877g.com | w77304.com | www.5559193.com | www.b35bb.com | www.9478r.com | nn32355.com | 93936x.com | 58802w.com | www.cctv577.com | www.81608s.com | www.550637.com | 1463m.com | 2569005.com | www.4719cc.com | www.33678pp.com | www.w413.com | 7742dd.com | wnsr8828.com | www.32666c.com | www.pjgw22.com | www.qucw.com | 6137z.net | BY30832.com | www.1116609.com | www.362bbb.com | www.709928.com | js07.app | 4052aa.com | www.falao268268.com | www.ag.hg3005.com | www.093388.com | yh22444.com | www.alpk11.com | www.10999q.com | www.sytg8.com | 1463c.com | ll2649.com | www.070977.com | www.xj444555.com | 777hg333.com | 9879733.com | www.sun3388.com | www.4102r.com | www.541811.com | 55331v.com | www.9999wns.com | www.4058kk.com | www.955494.com | 86688100.com | www.hg11768.com | www.26123kk.com | www.hj1991.com | yahu167.com | www.99999jsc.com | www.16181c.com | www.am6633.com | 6601.com | www.38200l.com | www.87708d.com | www.508477.com | 2jsddd.com | www.v15541.com | www.2345678.pw | 15856y.com | 00774zz.com | www.4516.com | www.5086i.com | 2682.com | www.agg066.com | www.hg33396.com | www.362322.com | 0332m.com | www.8694c.com | www.1466j.com | 66300vip37.com | 33115ww.com | www.dzcp2222.com | www.914077.com | 3304tt.com | www.4270nn.com | www.38998.com | 1634x.com | www.ylg4499.com | www.6789527.com | www.106135.com | yhguangxi.vip | www.184897.com | www.775720.com | 8037xxx.com | www.12222055.com | www.33598j.com | c67890.com | www.yh6118.com | www.975510.com | 345678.com | www.6491k.com | www.63800d.com | 89892.com | 5429d.com | www.200068.com | 8547w.com | js909019.com | www.9464005.com | 78666c.com | 230120.com | www.3421b.com | 9895o.com | www.5699v.com | www.xpj66123.com | 2820c.com | www.0222hg.com | www.48330n.com | m88.cn | www.7025g.com | www.96386m.com | js74120.com | www.zr7377.com | www.99ttz.com | 3435a.com | www.jxcp4444.com | www.536210.com | 05071111.com | www.3066qq.com | 59889a.com | www.a1a222.cc | www.570041.com | 201855.com | www.1007b.cc | www.fcff8.com | 7249b.com | www.4212q.com | www.150822.com | 8547y.com | www.38138l.com | yiqunhs.com | www.8494s.com | www.83993n.com | 61652j.com | www.hg032.com | www.444165.com | 26444a.com | www.9971002.com | 703669.com | www.4887555.com | www.609810.com | 2677qqq.com | www.rrqp222.com | 1104013.com | www.hg0189.com | www.636309.com | 9498.biz | www.37377c.com | js66.com | www.009959.com | www.186763.com | www.35530.com | www.73736c.com | 3568e.com | www.4bet005.com | amblm.com | www.hg1918.com | www.817824.com | 518cp-4.com | www.8998933.com | 8827nn.com | www.fh990.com | q72227.com | www.365815k.com | www.sxyl9.com | 3169g.com | www.3775u.com | 2008rr.com | www.9418cp.com | j9907.com | www.hg8561.com | www.792088.com | 2643x.com | www.66376d.com | 15856s.com | www.63606i.com | vip66657.com | www.239872.com | jsp36.com | www.879nn.com | www.499393.com | www.hg9016.com | www.009ac.com | 0033m.cc | www.ky1007.com | 2824.cc | www.55717e.com | 3435d.com |