Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Kafka High Availability £¨ÖУ©
 
À´Ô´£º¼¼ÊõÊÀ½ç ·¢²¼ÓÚ£º2017-9-20
  2697  次浏览      27
 

±¾ÎÄÊÇϵÁÐÎÄÕµĵÚÈýƪ£¬µÚһƪ "KafkaÉè¼Æ½âÎö£¨Ò»£©- Kafka±³¾°¼°¼Ü¹¹½éÉÜ"¡£µÚ¶þƪ KafkaÉè¼Æ½âÎö£¨¶þ£©- Kafka High Availability £¨ÉÏ£©

±¾ÎÄÔÚÉÏÆªÎÄÕ»ù´¡ÉÏ£¬¸ü¼ÓÉîÈë½²½âÁËKafkaµÄHA»úÖÆ£¬Ö÷Òª²ûÊöÁËHAÏà¹Ø¸÷ÖÖ³¡¾°£¬ÈçBroker failover£¬Controller failover£¬Topic´´½¨/ɾ³ý£¬BrokerÆô¶¯£¬Follower´ÓLeader fetchÊý¾ÝµÈÏêϸ´¦Àí¹ý³Ì¡£

Controller¶ÔBroker FailureµÄ´¦Àí¹ý³Ì

ControllerÔÚZookeeperµÄ/brokers/ids½ÚµãÉÏ×¢²áWatch¡£Ò»µ©ÓÐBrokerå´»ú£¨±¾ÎÄÓÃå´»ú´ú±íÈκÎÈÃKafkaÈÏΪÆäBroker dieµÄÇé¾°£¬°üÀ¨µ«²»ÏÞÓÚ»úÆ÷¶Ïµç£¬ÍøÂç²»¿ÉÓã¬GCµ¼ÖµÄStop The World£¬½ø³ÌcrashµÈ£©£¬ÆäÔÚZookeeper¶ÔÓ¦µÄZnode»á×Ô¶¯±»É¾³ý£¬Zookeeper»áfire Controller×¢²áµÄWatch£¬Controller¼´¿É»ñÈ¡×îеÄÐÒ´æµÄBrokerÁÐ±í¡£

Controller¾ö¶¨set_p£¬¸Ã¼¯ºÏ°üº¬ÁËå´»úµÄËùÓÐBrokerÉϵÄËùÓÐPartition¡£

¶Ôset_pÖеÄÿһ¸öPartition£º

´Ó/brokers/topics/[topic]/partitions/[partition]/state¶ÁÈ¡¸ÃPartitionµ±Ç°µÄISR¡£

¾ö¶¨¸ÃPartitionµÄÐÂLeader¡£Èç¹ûµ±Ç°ISRÖÐÓÐÖÁÉÙÒ»¸öReplica»¹ÐҴ棬ÔòÑ¡ÔñÆäÖÐÒ»¸ö×÷ΪÐÂLeader£¬ÐµÄISRÔò°üº¬µ±Ç°ISRÖÐËùÓÐÐÒ´æµÄReplica¡£·ñÔòÑ¡Ôñ¸ÃPartitionÖÐÈÎÒâÒ»¸öÐÒ´æµÄReplica×÷ΪеÄLeaderÒÔ¼°ISR£¨¸Ã³¡¾°Ï¿ÉÄÜ»áÓÐDZÔÚµÄÊý¾Ý¶ªÊ§£©¡£Èç¹û¸ÃPartitionµÄËùÓÐReplica¶¼å´»úÁË£¬Ôò½«ÐµÄLeaderÉèÖÃΪ-1¡£

½«ÐµÄLeader£¬ISRºÍеÄleader_epoch¼°controller_epochдÈë/brokers/topics/[topic]/partitions/[partition]/state¡£×¢Ò⣬¸Ã²Ù×÷Ö»ÓÐController°æ±¾ÔÚ3.1ÖÁ3.3µÄ¹ý³ÌÖÐÎޱ仯ʱ²Å»áÖ´ÐУ¬·ñÔòÌø×ªµ½3.1¡£

Ö±½Óͨ¹ýRPCÏòset_pÏà¹ØµÄBroker·¢ËÍLeaderAndISRRequestÃüÁî¡£Controller¿ÉÒÔÔÚÒ»¸öRPC²Ù×÷Öз¢ËͶà¸öÃüÁî´Ó¶øÌá¸ßЧÂÊ¡£

Broker failover˳ÐòͼÈçÏÂËùʾ¡£

LeaderAndIsrRequest½á¹¹ÈçÏÂ

LeaderAndIsrResponse½á¹¹ÈçÏÂ

´´½¨/ɾ³ýTopic

ControllerÔÚZookeeperµÄ/brokers/topics½ÚµãÉÏ×¢²áWatch£¬Ò»µ©Ä³¸öTopic±»´´½¨»òɾ³ý£¬ÔòController»áͨ¹ýWatchµÃµ½Ð´´½¨/ɾ³ýµÄTopicµÄPartition/Replica·ÖÅä¡£

¶ÔÓÚɾ³ýTopic²Ù×÷£¬Topic¹¤¾ß»á½«¸ÃTopicÃû×Ö´æÓÚ/admin/delete_topics¡£Èôdelete.topic.enableΪtrue£¬ÔòController×¢²áÔÚ/admin/delete_topicsÉϵÄWatch±»fire£¬Controllerͨ¹ý»Øµ÷Ïò¶ÔÓ¦µÄBroker·¢ËÍStopReplicaRequest£»ÈôΪfalseÔòController²»»áÔÚ/admin/delete_topicsÉÏ×¢²áWatch£¬Ò²¾Í²»»á¶Ô¸Ãʼþ×÷³ö·´Ó¦£¬´ËʱTopic²Ù×÷Ö»±»¼Ç¼¶ø²»»á±»Ö´ÐС£

¶ÔÓÚ´´½¨Topic²Ù×÷£¬Controller´Ó/brokers/ids¶ÁÈ¡µ±Ç°ËùÓпÉÓõÄBrokerÁÐ±í£¬¶ÔÓÚset_pÖеÄÿһ¸öPartition£º

´Ó·ÖÅ䏸¸ÃPartitionµÄËùÓÐReplica£¨³ÆÎªAR£©ÖÐÈÎѡһ¸ö¿ÉÓõÄBroker×÷ΪеÄLeader£¬²¢½«ARÉèÖÃΪеÄISR£¨ÒòΪ¸ÃTopicÊÇд´½¨µÄ£¬ËùÒÔARÖÐËùÓеÄReplica¶¼Ã»ÓÐÊý¾Ý£¬¿ÉÈÏΪËüÃǶ¼ÊÇͬ²½µÄ£¬Ò²¼´¶¼ÔÚISRÖУ¬ÈÎÒâÒ»¸öReplica¶¼¿É×÷ΪLeader£©

½«ÐµÄLeaderºÍISRдÈë/brokers/topics/[topic]/partitions/[partition]

Ö±½Óͨ¹ýRPCÏòÏà¹ØµÄBroker·¢ËÍLeaderAndISRRequest¡£

´´½¨Topic˳ÐòͼÈçÏÂËùʾ¡£

BrokerÏìÓ¦ÇëÇóÁ÷³Ì

Brokerͨ¹ýkafka.network.SocketServer¼°Ïà¹ØÄ£¿é½ÓÊܸ÷ÖÖÇëÇó²¢×÷³öÏìÓ¦¡£Õû¸öÍøÂçͨÐÅÄ£¿é»ùÓÚJava NIO¿ª·¢£¬²¢²ÉÓÃReactorģʽ£¬ÆäÖаüº¬1¸öAcceptor¸ºÔð½ÓÊܿͻ§ÇëÇó£¬N¸öProcessor¸ºÔð¶ÁдÊý¾Ý£¬M¸öHandler´¦ÀíÒµÎñÂß¼­¡£

AcceptorµÄÖ÷ÒªÖ°ÔðÊǼàÌý²¢½ÓÊܿͻ§¶Ë£¨ÇëÇó·¢Æð·½£¬°üÀ¨µ«²»ÏÞÓÚProducer£¬Consumer£¬Controller£¬Admin Tool£©µÄÁ¬½ÓÇëÇ󣬲¢½¨Á¢ºÍ¿Í»§¶ËµÄÊý¾Ý´«ÊäͨµÀ£¬È»ºóΪ¸Ã¿Í»§¶ËÖ¸¶¨Ò»¸öProcessor£¬ÖÁ´ËËü¶Ô¸Ã¿Í»§¶Ë¸Ã´ÎÇëÇóµÄÈÎÎñ¾Í½áÊøÁË£¬Ëü¿ÉÒÔÈ¥ÏìÓ¦ÏÂÒ»¸ö¿Í»§¶ËµÄÁ¬½ÓÇëÇóÁË¡£ÆäºËÐÄ´úÂëÈçÏ¡£

ProcessorÖ÷Òª¸ºÔð´Ó¿Í»§¶Ë¶ÁÈ¡Êý¾Ý²¢½«ÏìÓ¦·µ»Ø¸ø¿Í»§¶Ë£¬Ëü±¾Éí²¢²»´¦Àí¾ßÌåµÄÒµÎñÂß¼­£¬²¢ÇÒÆäÄÚ²¿Î¬»¤ÁËÒ»¸ö¶ÓÁÐÀ´±£´æ·ÖÅ䏸ËüµÄËùÓÐSocketChannel¡£ProcessorµÄrun·½·¨»áÑ­»·´Ó¶ÓÁÐÖÐÈ¡³öеÄSocketChannel²¢½«ÆäSelectionKey.OP_READ×¢²áµ½selectorÉÏ£¬È»ºóÑ­»·´¦ÀíÒѾÍÐ÷µÄ¶Á£¨ÇëÇ󣩺Íд£¨ÏìÓ¦£©¡£Processor¶ÁÈ¡ÍêÊý¾Ýºó£¬½«Æä·â×°³ÉRequest¶ÔÏó²¢½«Æä½»¸øRequestChannel¡£

RequestChannelÊÇProcessorºÍKafkaRequestHandler½»»»Êý¾ÝµÄµØ·½£¬Ëü°üº¬Ò»¸ö¶ÓÁÐrequestQueueÓÃÀ´´æ·ÅProcessor¼ÓÈëµÄRequest£¬KafkaRequestHandler»á´ÓÀïÃæÈ¡³öRequestÀ´´¦Àí£»Í¬Ê±Ëü»¹°üº¬Ò»¸örespondQueue£¬ÓÃÀ´´æ·ÅKafkaRequestHandler´¦ÀíÍêRequestºó·µ»¹¸ø¿Í»§¶ËµÄResponse¡£

Processor»áͨ¹ýprocessNewResponses·½·¨ÒÀ´Î½«requestChannelÖÐresponseQueue±£´æµÄResponseÈ¡³ö£¬²¢½«¶ÔÓ¦µÄSelectionKey.OP_WRITEʼþ×¢²áµ½selectorÉÏ¡£µ±selectorµÄselect·½·¨·µ»ØÊ±£¬¶Ô¼ì²âµ½µÄ¿ÉдͨµÀ£¬µ÷ÓÃwrite·½·¨½«Response·µ»Ø¸ø¿Í»§¶Ë¡£

KafkaRequestHandlerÑ­»·´ÓRequestChannelÖÐÈ¡Request²¢½»¸økafka.server.KafkaApis´¦Àí¾ßÌåµÄÒµÎñÂß¼­¡£

LeaderAndIsrRequestÏìÓ¦¹ý³Ì

¶ÔÓÚÊÕµ½µÄLeaderAndIsrRequest£¬BrokerÖ÷Ҫͨ¹ýReplicaManagerµÄbecomeLeaderOrFollower´¦Àí£¬Á÷³ÌÈçÏ£º

ÈôÇëÇóÖÐcontrollerEpochСÓÚµ±Ç°×îеÄcontrollerEpoch£¬ÔòÖ±½Ó·µ»ØErrorMapping.StaleControllerEpochCode¡£

¶ÔÓÚÇëÇóÖÐpartitionStateInfosÖеÄÿһ¸öÔªËØ£¬¼´((topic, partitionId), partitionStateInfo)£º

ÈôpartitionStateInfoÖеÄleader epoch´óÓÚµ±Ç°ReplicManagerÖд洢µÄ(topic, partitionId)¶ÔÓ¦µÄpartitionµÄleader epoch£¬Ôò£º

Èôµ±Ç°brokerid£¨»òÕß˵replica id£©ÔÚpartitionStateInfoÖУ¬Ôò½«¸Ãpartition¼°partitionStateInfo´æÈëÒ»¸öÃûΪpartitionStateµÄHashMapÖÐ

·ñÔò˵Ã÷¸ÃBroker²»ÔÚ¸ÃPartition·ÖÅäµÄReplica listÖУ¬½«¸ÃÐÅÏ¢¼Ç¼ÓÚlogÖÐ

·ñÔò½«ÏàÓ¦µÄError code£¨ErrorMapping.StaleLeaderEpochCode£©´æÈëResponseÖÐ

ɸѡ³öpartitionStateÖÐLeaderÓ뵱ǰBroker IDÏàµÈµÄËùÓмǼ´æÈëpartitionsTobeLeaderÖУ¬ÆäËü¼Ç¼´æÈëpartitionsToBeFollowerÖС£

ÈôpartitionsTobeLeader²»Îª¿Õ£¬Ôò¶ÔÆäÖ´ÐÐmakeLeaders·½¡£

ÈôpartitionsToBeFollower²»Îª¿Õ£¬Ôò¶ÔÆäÖ´ÐÐmakeFollowers·½·¨¡£

ÈôhighwatermakÏ̻߳¹Î´Æô¶¯£¬Ôò½«ÆäÆô¶¯£¬²¢½«hwThreadInitializedÉèΪtrue¡£

¹Ø±ÕËùÓÐIdle״̬µÄFetcher¡£

LeaderAndIsrRequest´¦Àí¹ý³ÌÈçÏÂͼËùʾ

BrokerÆô¶¯¹ý³Ì

BrokerÆô¶¯ºóÊ×Ïȸù¾ÝÆäIDÔÚZookeeperµÄ/brokers/idszondeÏ´´½¨ÁÙʱ×ӽڵ㣨Ephemeral node£©£¬´´½¨³É¹¦ºóControllerµÄReplicaStateMachine×¢²áÆäÉϵÄBroker Change Watch»á±»fire£¬´Ó¶øÍ¨¹ý»Øµ÷KafkaController.onBrokerStartup·½·¨Íê³ÉÒÔϲ½Ö裺

1. ÏòËùÓÐÐÂÆô¶¯µÄBroker·¢ËÍUpdateMetadataRequest£¬Æä¶¨ÒåÈçÏÂ

2. ½«ÐÂÆô¶¯µÄBrokerÉϵÄËùÓÐReplicaÉèÖÃΪOnlineReplica״̬£¬Í¬Ê±ÕâЩBroker»áΪÕâЩPartitionÆô¶¯high watermarkÏ̡߳£

3. ͨ¹ýpartitionStateMachine´¥·¢OnlinePartitionStateChange¡£

Controller Failover

ControllerÒ²ÐèÒªFailover¡£Ã¿¸öBroker¶¼»áÔÚController Path (/controller)ÉÏ×¢²áÒ»¸öWatch¡£µ±Ç°Controllerʧ°Üʱ£¬¶ÔÓ¦µÄController Path»á×Ô¶¯Ïûʧ£¨ÒòΪËüÊÇEphemeral Node£©£¬´Ëʱ¸ÃWatch±»fire£¬ËùÓС°»î¡±×ŵÄBroker¶¼»áÈ¥¾ºÑ¡³ÉΪеÄController£¨´´½¨ÐµÄController Path£©£¬µ«ÊÇÖ»»áÓÐÒ»¸ö¾ºÑ¡³É¹¦£¨ÕâµãÓÉZookeeper±£Ö¤£©¡£¾ºÑ¡³É¹¦Õß¼´ÎªÐµÄLeader£¬¾ºÑ¡Ê§°ÜÕßÔòÖØÐÂÔÚеÄController PathÉÏ×¢²áWatch¡£ÒòΪZookeeperµÄWatchÊÇÒ»´ÎÐԵ쬱»fireÒ»´ÎÖ®ºó¼´Ê§Ð§£¬ËùÒÔÐèÒªÖØÐÂ×¢²á¡£

Broker³É¹¦¾ºÑ¡ÎªÐÂControllerºó»á´¥·¢KafkaController.onControllerFailover·½·¨£¬²¢Ôڸ÷½·¨ÖÐÍê³ÉÈçϲÙ×÷£º

¶ÁÈ¡²¢Ôö¼ÓController Epoch¡£

ÔÚReassignedPartitions Patch (/admin/reassign_partitions)ÉÏ×¢²áWatch¡£

ÔÚPreferredReplicaElection Path (/admin/preferred_replica_election)ÉÏ×¢²áWatch¡£

ͨ¹ýpartitionStateMachineÔÚBroker Topics Patch (/brokers/topics)ÉÏ×¢²áWatch¡£

Èôdelete.topic.enableÉèÖÃΪtrue£¨Ä¬ÈÏÖµÊÇfalse£©£¬ÔòpartitionStateMachineÔÚDelete Topic Patch (/admin/delete_topics)ÉÏ×¢²áWatch¡£

ͨ¹ýreplicaStateMachineÔÚBroker Ids Patch (/brokers/ids)ÉÏ×¢²áWatch¡£

³õʼ»¯ControllerContext¶ÔÏó£¬ÉèÖõ±Ç°ËùÓÐTopic£¬¡°»î¡±×ŵÄBrokerÁÐ±í£¬ËùÓÐPartitionµÄLeader¼°ISRµÈ¡£

Æô¶¯replicaStateMachineºÍpartitionStateMachine¡£

½«brokerState״̬ÉèÖÃΪRunningAsController¡£

½«Ã¿¸öPartitionµÄLeadershipÐÅÏ¢·¢Ë͸øËùÓС°»î¡±×ŵÄBroker¡£

Èôauto.leader.rebalance.enableÅäÖÃΪtrue£¨Ä¬ÈÏÖµÊÇtrue£©£¬ÔòÆô¶¯partition-rebalanceÏ̡߳£

Èôdelete.topic.enableÉèÖÃΪtrueÇÒDelete Topic Patch(/admin/delete_topics)ÖÐÓÐÖµ£¬Ôòɾ³ýÏàÓ¦µÄTopic¡£

PartitionÖØÐ·ÖÅä

¹ÜÀí¹¤¾ß·¢³öÖØÐ·ÖÅäPartitionÇëÇóºó£¬»á½«ÏàÓ¦ÐÅϢдµ½/admin/reassign_partitionsÉÏ£¬¶ø¸Ã²Ù×÷»á´¥·¢ReassignedPartitionsIsrChangeListener£¬´Ó¶øÍ¨¹ýÖ´Ðлص÷º¯ÊýKafkaController.onPartitionReassignmentÀ´Íê³ÉÒÔϲÙ×÷£º

½«ZookeeperÖеÄAR£¨Current Assigned Replicas£©¸üÐÂΪOAR£¨Original list of replicas for partition£© + RAR£¨Reassigned replicas£©¡£

Ç¿ÖÆ¸üÐÂZookeeperÖеÄleader epoch£¬ÏòARÖеÄÿ¸öReplica·¢ËÍLeaderAndIsrRequest¡£

½«RAR - OARÖеÄReplicaÉèÖÃΪNewReplica״̬¡£

µÈ´ýÖ±µ½RARÖÐËùÓеÄReplica¶¼ÓëÆäLeaderͬ²½¡£

½«RARÖÐËùÓеÄReplica¶¼ÉèÖÃΪOnlineReplica״̬¡£

½«CacheÖеÄARÉèÖÃΪRAR¡£

ÈôLeader²»ÔÚRARÖУ¬Ôò´ÓRARÖÐÖØÐÂÑ¡¾Ù³öÒ»¸öеÄLeader²¢·¢ËÍLeaderAndIsrRequest¡£ÈôеÄLeader²»ÊÇ´ÓRARÖÐÑ¡¾Ù¶ø³ö£¬Ôò»¹ÒªÔö¼ÓZookeeperÖеÄleader epoch¡£

½«OAR - RARÖеÄËùÓÐReplicaÉèÖÃΪOfflineReplica״̬£¬¸Ã¹ý³Ì°üº¬Á½²¿·Ö¡£µÚÒ»£¬½«ZookeeperÉÏISRÖеÄOAR - RARÒÆ³ý²¢ÏòLeader·¢ËÍLeaderAndIsrRequest´Ó¶øÍ¨ÖªÕâЩReplicaÒѾ­´ÓISRÖÐÒÆ³ý£»µÚ¶þ£¬ÏòOAR - RARÖеÄReplica·¢ËÍStopReplicaRequest´Ó¶øÍ£Ö¹²»ÔÙ·ÖÅ䏸¸ÃPartitionµÄReplica¡£

½«OAR - RARÖеÄËùÓÐReplicaÉèÖÃΪNonExistentReplica״̬´Ó¶ø½«Æä´Ó´ÅÅÌÉÏɾ³ý¡£

½«ZookeeperÖеÄARÉèÖÃΪRAR¡£

ɾ³ý/admin/reassign_partition¡£

×¢Ò⣺×îºóÒ»²½²Å½«ZookeeperÖеÄAR¸üУ¬ÒòΪÕâÊÇΨһһ¸ö³Ö¾Ã´æ´¢ARµÄµØ·½£¬Èç¹ûControllerÔÚÕâÒ»²½Ö®Ç°crash£¬ÐµÄControllerÈÔÈ»Äܹ»¼ÌÐøÍê³É¸Ã¹ý³Ì¡£

ÒÔÏÂÊÇPartitionÖØÐ·ÖÅäµÄ°¸Àý£¬OAR = {1£¬2£¬3}£¬RAR = {4£¬5£¬6}£¬PartitionÖØÐ·ÖÅä¹ý³ÌÖÐZookeeperÖеÄARºÍLeader/ISR·¾¶ÈçÏÂ

Follower´ÓLeader FetchÊý¾Ý

Followerͨ¹ýÏòLeader·¢ËÍFetchRequest»ñÈ¡ÏûÏ¢£¬FetchRequest½á¹¹ÈçÏÂ

´ÓFetchRequestµÄ½á¹¹¿ÉÒÔ¿´³ö£¬Ã¿¸öFetchÇëÇó¶¼ÒªÖ¸¶¨×î´óµÈ´ýʱ¼äºÍ×îС»ñÈ¡×Ö½ÚÊý£¬ÒÔ¼°ÓÉTopicAndPartitionºÍPartitionFetchInfo¹¹³ÉµÄMap¡£Êµ¼ÊÉÏ£¬Follower´ÓLeaderÊý¾ÝºÍConsumer´ÓBroker FetchÊý¾Ý£¬¶¼ÊÇͨ¹ýFetchRequestÇëÇóÍê³É£¬ËùÒÔÔÚFetchRequest½á¹¹ÖУ¬ÆäÖÐÒ»¸ö×Ö¶ÎÊÇclientID£¬²¢ÇÒÆäĬÈÏÖµÊÇConsumerConfig.DefaultClientId¡£

LeaderÊÕµ½FetchÇëÇóºó£¬Kafkaͨ¹ýKafkaApis.handleFetchRequestÏìÓ¦¸ÃÇëÇó£¬ÏìÓ¦¹ý³ÌÈçÏ£º

replicaManager¸ù¾ÝÇëÇó¶Á³öÊý¾Ý´æÈëdataReadÖС£

Èç¹û¸ÃÇëÇóÀ´×ÔFollowerÔò¸üÐÂÆäÏàÓ¦µÄLEO£¨log end offset£©ÒÔ¼°ÏàÓ¦PartitionµÄHigh Watermark

¸ù¾ÝdataReadËã³ö¿É¶ÁÏûÏ¢³¤¶È£¨µ¥Î»Îª×Ö½Ú£©²¢´æÈëbytesReadableÖС£

Âú×ãÏÂÃæ4¸öÌõ¼þÖеÄ1¸ö£¬ÔòÁ¢¼´½«ÏàÓ¦µÄÊý¾Ý·µ»Ø

FetchÇëÇó²»Ï£ÍûµÈ´ý£¬¼´fetchRequest.macWait <= 0

FetchÇëÇó²»ÒªÇóÒ»¶¨ÄÜÈ¡µ½ÏûÏ¢£¬¼´fetchRequest.numPartitions <= 0£¬Ò²¼´requestInfoΪ¿Õ

ÓÐ×ã¹»µÄÊý¾Ý¿É¹©·µ»Ø£¬¼´bytesReadable >= fetchRequest.minBytes

¶ÁÈ¡Êý¾Ýʱ·¢ÉúÒì³£

Èô²»Âú×ãÒÔÉÏ4¸öÌõ¼þ£¬FetchRequest½«²»»áÁ¢¼´·µ»Ø£¬²¢½«¸ÃÇëÇó·â×°³ÉDelayedFetch¡£¼ì²é¸ÃDeplayedFetchÊÇ·ñÂú×㣬ÈôÂú×ãÔò·µ»ØÇëÇ󣬷ñÔò½«¸ÃÇëÇó¼ÓÈëWatchÁбí

Leaderͨ¹ýÒÔFetchResponseµÄÐÎʽ½«ÏûÏ¢·µ»Ø¸øFollower£¬FetchResponse½á¹¹ÈçÏÂ

   
2697 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ