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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
dz̸·Ö²¼Ê½ÏûÏ¢¼¼Êõ Kafka
 
À´Ô´£ºÀ´×ÔÍøÂç ·¢²¼ÓÚ£º2017-7-31
  3433  次浏览      29
 

KafkaµÄ»ù±¾½éÉÜ

KafkaÊÇ×î³õÓÉLinkedin¹«Ë¾¿ª·¢£¬ÊÇÒ»¸ö·Ö²¼Ê½¡¢·ÖÇøµÄ¡¢¶à¸±±¾µÄ¡¢¶à¶©ÔÄÕߣ¬»ùÓÚzookeeperЭµ÷µÄ·Ö²¼Ê½ÈÕ־ϵͳ£¨Ò²¿ÉÒÔµ±×öMQϵͳ£©£¬³£¼û¿ÉÒÔÓÃÓÚweb/nginxÈÕÖ¾¡¢·ÃÎÊÈÕÖ¾£¬ÏûÏ¢·þÎñµÈµÈ£¬LinkedinÓÚ2010Äê¹±Ï׸øÁËApache»ù½ð»á²¢³ÉΪ¶¥¼¶¿ªÔ´ÏîÄ¿¡£

Ö÷ÒªÓ¦Óó¡¾°ÊÇ£ºÈÕÖ¾ÊÕ¼¯ÏµÍ³ºÍÏûϢϵͳ¡£

KafkaÖ÷ÒªÉè¼ÆÄ¿±êÈçÏ£º

1.ÒÔʱ¼ä¸´ÔÓ¶ÈΪO(1)µÄ·½Ê½ÌṩÏûÏ¢³Ö¾Ã»¯ÄÜÁ¦£¬¼´Ê¹¶ÔTB¼¶ÒÔÉÏÊý¾ÝÒ²Äܱ£Ö¤³£Êýʱ¼äµÄ·ÃÎÊÐÔÄÜ¡£

2.¸ßÍÌÍÂÂÊ¡£¼´Ê¹Ôڷdz£Á®¼ÛµÄÉÌÓûúÆ÷ÉÏÒ²ÄÜ×öµ½µ¥»úÖ§³ÖÿÃë100KÌõÏûÏ¢µÄ´«Êä¡£

3.Ö§³ÖKafka Server¼äµÄÏûÏ¢·ÖÇø£¬¼°·Ö²¼Ê½Ïû·Ñ£¬Í¬Ê±±£Ö¤Ã¿¸öpartitionÄÚµÄÏûϢ˳Ðò´«Êä¡£

4.ͬʱ֧³ÖÀëÏßÊý¾Ý´¦ÀíºÍʵʱÊý¾Ý´¦Àí¡£

KafkaµÄÉè¼ÆÔ­Àí·ÖÎö

Ò»¸öµäÐ͵Äkafka¼¯ÈºÖаüº¬Èô¸Éproducer£¬Èô¸Ébroker£¬Èô¸Éconsumer£¬ÒÔ¼°Ò»¸öZookeeper¼¯Èº¡£Kafkaͨ¹ýZookeeper¹ÜÀí¼¯ÈºÅäÖã¬Ñ¡¾Ùleader£¬ÒÔ¼°ÔÚconsumer group·¢Éú±ä»¯Ê±½øÐÐrebalance¡£producerʹÓÃpushģʽ½«ÏûÏ¢·¢²¼µ½broker£¬consumerʹÓÃpullģʽ´Óbroker¶©ÔIJ¢Ïû·ÑÏûÏ¢¡£ ¡¡

KafkaרÓÃÊõÓ

1.Broker£ºÏûÏ¢Öмä¼þ´¦Àí½áµã£¬Ò»¸öKafka½Úµã¾ÍÊÇÒ»¸öbroker£¬¶à¸öbroker¿ÉÒÔ×é³ÉÒ»¸öKafka¼¯Èº¡£

2.Topic£ºÒ»ÀàÏûÏ¢£¬Kafka¼¯ÈºÄܹ»Í¬Ê±¸ºÔð¶à¸ötopicµÄ·Ö·¢¡£

3.Partition£ºtopicÎïÀíÉϵķÖ×飬һ¸ötopic¿ÉÒÔ·ÖΪ¶à¸öpartition£¬Ã¿¸öpartitionÊÇÒ»¸öÓÐÐòµÄ¶ÓÁС£

4.Segment£ºpartitionÎïÀíÉÏÓɶà¸ösegment×é³É¡£

5.offset£ºÃ¿¸öpartition¶¼ÓÉһϵÁÐÓÐÐòµÄ¡¢²»¿É±äµÄÏûÏ¢×é³É£¬ÕâЩÏûÏ¢±»Á¬ÐøµÄ×·¼Óµ½partitionÖС£partitionÖеÄÿ¸öÏûÏ¢¶¼ÓÐÒ»¸öÁ¬ÐøµÄÐòÁкŽÐ×öoffset£¬ÓÃÓÚpartitionΨһ±êʶһÌõÏûÏ¢¡£

6.Producer£º¸ºÔð·¢²¼ÏûÏ¢µ½Kafka broker¡£

7.Consumer£ºÏûÏ¢Ïû·ÑÕߣ¬ÏòKafka broker¶ÁÈ¡ÏûÏ¢µÄ¿Í»§¶Ë¡£

8.Consumer Group£ºÃ¿¸öConsumerÊôÓÚÒ»¸öÌØ¶¨µÄConsumer Group¡£

KafkaÊý¾Ý´«ÊäµÄÊÂÎñÌØµã

at most once£º×î¶àÒ»´Î£¬Õâ¸öºÍJMSÖÐ"·Ç³Ö¾Ã»¯"ÏûÏ¢ÀàËÆ£¬·¢ËÍÒ»´Î£¬ÎÞÂ۳ɰܣ¬½«²»»áÖØ·¢¡£Ïû·ÑÕßfetchÏûÏ¢£¬È»ºó±£´æoffset£¬È»ºó´¦ÀíÏûÏ¢£»µ±client±£´æoffsetÖ®ºó£¬µ«ÊÇÔÚÏûÏ¢´¦Àí¹ý³ÌÖгöÏÖÁËÒì³££¬µ¼Ö²¿·ÖÏûϢδÄܼÌÐø´¦Àí¡£ÄÇô´Ëºó"δ´¦Àí"µÄÏûÏ¢½«²»Äܱ»fetchµ½£¬Õâ¾ÍÊÇ"at most once"¡£

at least once£ºÏûÏ¢ÖÁÉÙ·¢ËÍÒ»´Î£¬Èç¹ûÏûϢδÄܽÓÊܳɹ¦£¬¿ÉÄÜ»áÖØ·¢£¬Ö±µ½½ÓÊճɹ¦¡£Ïû·ÑÕßfetchÏûÏ¢£¬È»ºó´¦ÀíÏûÏ¢£¬È»ºó±£´æoffset¡£Èç¹ûÏûÏ¢´¦Àí³É¹¦Ö®ºó£¬µ«ÊÇÔÚ±£´æoffset½×¶ÎzookeeperÒì³£µ¼Ö±£´æ²Ù×÷δÄÜÖ´Ðгɹ¦£¬Õâ¾Íµ¼Ö½ÓÏÂÀ´ÔÙ´Îfetchʱ¿ÉÄÜ»ñµÃÉÏ´ÎÒѾ­´¦Àí¹ýµÄÏûÏ¢£¬Õâ¾ÍÊÇ"at least once"£¬Ô­ÒòoffsetûÓм°Ê±µÄÌá½»¸øzookeeper£¬zookeeper»Ö¸´Õý³£»¹ÊÇ֮ǰoffset״̬¡£

exactly once£ºÏûÏ¢Ö»»á·¢ËÍÒ»´Î¡£kafkaÖв¢Ã»ÓÐÑϸñµÄȥʵÏÖ£¨»ùÓÚ2½×¶ÎÌá½»£©£¬ÎÒÃÇÈÏΪÕâÖÖ²ßÂÔÔÚkafkaÖÐÊÇûÓбØÒªµÄ¡£

ͨ³£Çé¿öÏÂ"at-least-once"ÊÇÎÒÃÇÊ×Ñ¡¡£

KafkaÏûÏ¢´æ´¢¸ñʽ

Topic & Partition

Ò»¸ötopic¿ÉÒÔÈÏΪһ¸öÒ»ÀàÏûÏ¢£¬Ã¿¸ötopic½«±»·Ö³É¶à¸öpartition£¬Ã¿¸öpartitionÔÚ´æ´¢²ãÃæÊÇappend logÎļþ¡£

ÔÚKafkaÎļþ´æ´¢ÖУ¬Í¬Ò»¸ötopicÏÂÓжà¸ö²»Í¬partition£¬Ã¿¸öpartitionΪһ¸öĿ¼£¬partitonÃüÃû¹æÔòΪtopicÃû³Æ+ÓÐÐòÐòºÅ£¬µÚÒ»¸öpartitonÐòºÅ´Ó0¿ªÊ¼£¬ÐòºÅ×î´óֵΪpartitionsÊýÁ¿¼õ1¡£

1.ÿ¸öpartion£¨Ä¿Â¼£©Ï൱ÓÚÒ»¸ö¾ÞÐÍÎļþ±»Æ½¾ù·ÖÅäµ½¶à¸ö´óСÏàµÈsegment£¨¶Î£©Êý¾ÝÎļþÖС£µ«Ã¿¸ö¶Îsegment fileÏûÏ¢ÊýÁ¿²»Ò»¶¨ÏàµÈ£¬ÕâÖÖÌØÐÔ·½±ãold segment file¿ìËÙ±»É¾³ý¡£

2.ÿ¸öpartitonÖ»ÐèÒªÖ§³Ö˳Ðò¶Áд¾ÍÐÐÁË£¬segmentÎļþÉúÃüÖÜÆÚÓÉ·þÎñ¶ËÅäÖòÎÊý¾ö¶¨¡£

3.ÕâÑù×öµÄºÃ´¦¾ÍÊÇÄÜ¿ìËÙɾ³ýÎÞÓÃÎļþ£¬ÓÐЧÌá¸ß´ÅÅÌÀûÓÃÂÊ¡£

4.segment file×é³É£ºÓÉ2´ó²¿·Ö×é³É£¬·Ö±ðΪindex fileºÍdata file£¬´Ë2¸öÎļþÒ»Ò»¶ÔÓ¦£¬³É¶Ô³öÏÖ£¬ºó׺".index"ºÍ¡°.log¡±·Ö±ð±íʾΪsegmentË÷ÒýÎļþ¡¢Êý¾ÝÎļþ.

5.segmentÎļþÃüÃû¹æÔò£ºpartionÈ«¾ÖµÄµÚÒ»¸ösegment´Ó0¿ªÊ¼£¬ºóÐøÃ¿¸ösegmentÎļþÃûΪÉÏÒ»¸ösegmentÎļþ×îºóÒ»ÌõÏûÏ¢µÄoffsetÖµ¡£ÊýÖµ×î´óΪ64λlong´óС£¬19λÊý×Ö×Ö·û³¤¶È£¬Ã»ÓÐÊý×ÖÓÃ0Ìî³ä¡£

segmentÖÐindexÓëdata file¶ÔÓ¦¹ØÏµÎïÀí½á¹¹ÈçÏ£º

ÉÏͼÖÐË÷ÒýÎļþ´æ´¢´óÁ¿ÔªÊý¾Ý£¬Êý¾ÝÎļþ´æ´¢´óÁ¿ÏûÏ¢£¬Ë÷ÒýÎļþÖÐÔªÊý¾ÝÖ¸Ïò¶ÔÓ¦Êý¾ÝÎļþÖÐmessageµÄÎïÀíÆ«ÒÆµØÖ·¡£

ÆäÖÐÒÔË÷ÒýÎļþÖÐÔªÊý¾Ý3,497ΪÀý£¬ÒÀ´ÎÔÚÊý¾ÝÎļþÖбíʾµÚ3¸ömessage£¨ÔÚÈ«¾Öpartiton±íʾµÚ368772¸ömessage£©£¬ÒÔ¼°¸ÃÏûÏ¢µÄÎïÀíÆ«ÒÆµØÖ·Îª497¡£

Á˽⵽segment data fileÓÉÐí¶àmessage×é³É£¬ÏÂÃæÏêϸ˵Ã÷messageÎïÀí½á¹¹ÈçÏ£º

²ÎÊý˵Ã÷£º

¹Ø¼ü×Ö ½âÊÍ˵Ã÷

8 byte offset ÔÚparition(·ÖÇø)ÄÚµÄÿÌõÏûÏ¢¶¼ÓÐÒ»¸öÓÐÐòµÄidºÅ£¬Õâ¸öidºÅ±»³ÆÎªÆ«ÒÆ(offset),Ëü¿ÉÒÔΨһȷ¶¨Ã¿ÌõÏûÏ¢ÔÚparition(·ÖÇø)ÄÚµÄλÖ᣼´offset±íʾpartiionµÄµÚ¶àÉÙmessage

4 byte message size message´óС

4 byte CRC32 ÓÃcrc32УÑémessage

1 byte ¡°magic" ±íʾ±¾´Î·¢²¼Kafka·þÎñ³ÌÐòЭÒé°æ±¾ºÅ

1 byte ¡°attributes" ±íʾΪ¶ÀÁ¢°æ±¾¡¢»ò±êʶѹËõÀàÐÍ¡¢»ò±àÂëÀàÐÍ¡£

4 byte key length ±íʾkeyµÄ³¤¶È,µ±keyΪ-1ʱ£¬K byte key×ֶβ»Ìî

K byte key ¿ÉÑ¡

value bytes payload ±íʾʵ¼ÊÏûÏ¢Êý¾Ý¡£

¸±±¾£¨replication£©²ßÂÔ

KafkaµÄ¸ß¿É¿¿ÐԵı£ÕÏÀ´Ô´ÓÚÆä½¡×³µÄ¸±±¾£¨replication£©²ßÂÔ¡£

1) Êý¾Ýͬ²½

kafkaÔÚ0.8°æ±¾Ç°Ã»ÓÐÌṩPartitionµÄReplication»úÖÆ£¬Ò»µ©Brokerå´»ú£¬ÆäÉϵÄËùÓÐPartition¾Í¶¼ÎÞ·¨Ìṩ·þÎñ£¬¶øPartitionÓÖûÓб¸·ÝÊý¾Ý£¬Êý¾ÝµÄ¿ÉÓÃÐԾʹó´ó½µµÍÁË¡£ËùÒÔ0.8ºóÌṩÁËReplication»úÖÆÀ´±£Ö¤BrokerµÄfailover¡£

ÒýÈëReplicationÖ®ºó£¬Í¬Ò»¸öPartition¿ÉÄÜ»áÓжà¸öReplica£¬¶øÕâʱÐèÒªÔÚÕâЩReplicationÖ®¼äÑ¡³öÒ»¸öLeader£¬ProducerºÍConsumerÖ»ÓëÕâ¸öLeader½»»¥£¬ÆäËüReplica×÷ΪFollower´ÓLeaderÖи´ÖÆÊý¾Ý¡£

2) ¸±±¾·ÅÖòßÂÔ

ΪÁ˸üºÃµÄ×ö¸ºÔؾùºâ£¬Kafka¾¡Á¿½«ËùÓеÄPartition¾ùÔÈ·ÖÅäµ½Õû¸ö¼¯ÈºÉÏ¡£

Kafka·ÖÅäReplicaµÄËã·¨ÈçÏ£º

1.½«ËùÓдæ»îµÄN¸öBrokersºÍ´ý·ÖÅäµÄPartitionÅÅÐò

2.½«µÚi¸öPartition·ÖÅäµ½µÚ(i mod n)¸öBrokerÉÏ£¬Õâ¸öPartitionµÄµÚÒ»¸öReplica´æÔÚÓÚÕâ¸ö·ÖÅäµÄBrokerÉÏ£¬²¢ÇÒ»á×÷ΪpartitionµÄÓÅÏȸ±±¾

3.½«µÚi¸öPartitionµÄµÚj¸öReplica·ÖÅäµ½µÚ((i + j) mod n)¸öBrokerÉÏ

¼ÙÉ輯Ⱥһ¹²ÓÐ4¸öbrokers£¬Ò»¸ötopicÓÐ4¸öpartition£¬Ã¿¸öPartitionÓÐ3¸ö¸±±¾¡£ÏÂͼÊÇÿ¸öBrokerÉϵĸ±±¾·ÖÅäÇé¿ö¡£

3) ͬ²½²ßÂÔ

ProducerÔÚ·¢²¼ÏûÏ¢µ½Ä³¸öPartitionʱ£¬ÏÈͨ¹ýZooKeeperÕÒµ½¸ÃPartitionµÄLeader£¬È»ºóÎÞÂÛ¸ÃTopicµÄReplication FactorΪ¶àÉÙ£¬ProducerÖ»½«¸ÃÏûÏ¢·¢Ë͵½¸ÃPartitionµÄLeader¡£Leader»á½«¸ÃÏûϢдÈëÆä±¾µØLog¡£Ã¿¸öFollower¶¼´ÓLeader pullÊý¾Ý¡£ÕâÖÖ·½Ê½ÉÏ£¬Follower´æ´¢µÄÊý¾Ý˳ÐòÓëLeader±£³ÖÒ»Ö¡£FollowerÔÚÊÕµ½¸ÃÏûÏ¢²¢Ð´ÈëÆäLogºó£¬ÏòLeader·¢ËÍACK¡£Ò»µ©LeaderÊÕµ½ÁËISRÖеÄËùÓÐReplicaµÄACK£¬¸ÃÏûÏ¢¾Í±»ÈÏΪÒѾ­commitÁË£¬Leader½«Ôö¼ÓHW²¢ÇÒÏòProducer·¢ËÍACK¡£

ΪÁËÌá¸ßÐÔÄÜ£¬Ã¿¸öFollowerÔÚ½ÓÊÕµ½Êý¾Ýºó¾ÍÁ¢ÂíÏòLeader·¢ËÍACK£¬¶ø·ÇµÈµ½Êý¾ÝдÈëLogÖС£Òò´Ë£¬¶ÔÓÚÒѾ­commitµÄÏûÏ¢£¬KafkaÖ»Äܱ£Ö¤Ëü±»´æÓÚ¶à¸öReplicaµÄÄÚ´æÖУ¬¶ø²»Äܱ£Ö¤ËüÃDZ»³Ö¾Ã»¯µ½´ÅÅÌÖУ¬Ò²¾Í²»ÄÜÍêÈ«±£Ö¤Òì³£·¢Éúºó¸ÃÌõÏûÏ¢Ò»¶¨Äܱ»ConsumerÏû·Ñ¡£

Consumer¶ÁÏûÏ¢Ò²ÊÇ´ÓLeader¶ÁÈ¡£¬Ö»Óб»commit¹ýµÄÏûÏ¢²Å»á±©Â¶¸øConsumer¡£

Kafka ReplicationµÄÊý¾ÝÁ÷ÈçÏÂͼËùʾ£º

¶ÔÓÚKafka¶øÑÔ£¬¶¨ÒåÒ»¸öBrokerÊÇ·ñ¡°»î×Å¡±°üº¬Á½¸öÌõ¼þ£º

1.Ò»ÊÇËü±ØÐëά»¤ÓëZooKeeperµÄsession£¨Õâ¸öͨ¹ýZooKeeperµÄHeartbeat»úÖÆÀ´ÊµÏÖ£©¡£

2.¶þÊÇFollower±ØÐëÄܹ»¼°Ê±½«LeaderµÄÏûÏ¢¸´ÖƹýÀ´£¬²»ÄÜ¡°ÂäºóÌ«¶à¡±¡£

Leader»á¸ú×ÙÓëÆä±£³Öͬ²½µÄReplicaÁÐ±í£¬¸ÃÁÐ±í³ÆÎªISR£¨¼´in-sync Replica£©¡£Èç¹ûÒ»¸öFollowerå´»ú£¬»òÕßÂäºóÌ«¶à£¬Leader½«°ÑËü´ÓISRÖÐÒÆ³ý¡£ÕâÀïËùÃèÊöµÄ¡°ÂäºóÌ«¶à¡±Ö¸Follower¸´ÖƵÄÏûÏ¢ÂäºóÓÚLeaderºóµÄÌõÊý³¬¹ýÔ¤¶¨Öµ»òÕßFollower³¬¹ýÒ»¶¨Ê±¼äδÏòLeader·¢ËÍfetchÇëÇó¡£

KafkaÖ»½â¾öfail/recover£¬Ò»ÌõÏûÏ¢Ö»Óб»ISRÀïµÄËùÓÐFollower¶¼´ÓLeader¸´ÖƹýÈ¥²Å»á±»ÈÏΪÒÑÌá½»¡£ÕâÑù¾Í±ÜÃâÁ˲¿·ÖÊý¾Ý±»Ð´½øÁËLeader£¬»¹Ã»À´µÃ¼°±»ÈκÎFollower¸´ÖƾÍå´»úÁË£¬¶øÔì³ÉÊý¾Ý¶ªÊ§£¨ConsumerÎÞ·¨Ïû·ÑÕâЩÊý¾Ý£©¡£¶ø¶ÔÓÚProducer¶øÑÔ£¬Ëü¿ÉÒÔÑ¡ÔñÊÇ·ñµÈ´ýÏûÏ¢commit¡£ÕâÖÖ»úÖÆÈ·±£ÁËÖ»ÒªISRÓÐÒ»¸ö»òÒÔÉϵÄFollower£¬Ò»Ìõ±»commitµÄÏûÏ¢¾Í²»»á¶ªÊ§¡£

4) leaderÑ¡¾Ù

LeaderÑ¡¾Ù±¾ÖÊÉÏÊÇÒ»¸ö·Ö²¼Ê½Ëø£¬ÓÐÁ½ÖÖ·½Ê½ÊµÏÖ»ùÓÚZooKeeperµÄ·Ö²¼Ê½Ëø£º

1.½ÚµãÃû³ÆÎ¨Ò»ÐÔ£º¶à¸ö¿Í»§¶Ë´´½¨Ò»¸ö½Úµã£¬Ö»Óгɹ¦´´½¨½ÚµãµÄ¿Í»§¶Ë²ÅÄÜ»ñµÃËø

2.ÁÙʱ˳Ðò½Úµã£ºËùÓпͻ§¶ËÔÚij¸öĿ¼Ï´´½¨×Ô¼ºµÄÁÙʱ˳Ðò½Úµã£¬Ö»ÓÐÐòºÅ×îСµÄ²Å»ñµÃËø

Majority VoteµÄÑ¡¾Ù²ßÂÔºÍZooKeeperÖеÄZabÑ¡¾ÙÊÇÀàËÆµÄ£¬Êµ¼ÊÉÏZooKeeperÄÚ²¿±¾Éí¾ÍʵÏÖÁËÉÙÊý·þ´Ó¶àÊýµÄÑ¡¾Ù²ßÂÔ¡£kafkaÖжÔÓÚPartitionµÄleader¸±±¾µÄÑ¡¾Ù²ÉÓÃÁ˵ÚÒ»ÖÖ·½·¨£ºÎªPartition·ÖÅ丱±¾£¬Ö¸¶¨Ò»¸öZNodeÁÙʱ½Úµã£¬µÚÒ»¸ö³É¹¦´´½¨½ÚµãµÄ¸±±¾¾ÍÊÇLeader½Úµã£¬ÆäËû¸±±¾»áÔÚÕâ¸öZNode½ÚµãÉÏ×¢²áWatcher¼àÌýÆ÷£¬Ò»µ©Leaderå´»ú£¬¶ÔÓ¦µÄÁÙʱ½Úµã¾Í»á±»×Ô¶¯É¾³ý£¬Õâʱע²áÔڸýڵãÉϵÄËùÓÐFollower¶¼»áÊÕµ½¼àÌýÆ÷ʼþ£¬ËüÃǶ¼»á³¢ÊÔ´´½¨¸Ã½Úµã£¬Ö»Óд´½¨³É¹¦µÄÄǸöfollower²Å»á³ÉΪLeader£¨ZooKeeper±£Ö¤¶ÔÓÚÒ»¸ö½ÚµãÖ»ÓÐÒ»¸ö¿Í»§¶ËÄÜ´´½¨³É¹¦£©£¬ÆäËûfollower¼ÌÐøÖØÐÂ×¢²á¼àÌýʼþ¡£

KafkaÏûÏ¢·Ö×飬ÏûÏ¢Ïû·ÑÔ­Àí

ͬһTopicµÄÒ»ÌõÏûÏ¢Ö»Äܱ»Í¬Ò»¸öConsumer GroupÄÚµÄÒ»¸öConsumerÏû·Ñ£¬µ«¶à¸öConsumer Group¿ÉͬʱÏû·ÑÕâÒ»ÏûÏ¢¡£

ÕâÊÇKafkaÓÃÀ´ÊµÏÖÒ»¸öTopicÏûÏ¢µÄ¹ã²¥£¨·¢¸øËùÓеÄConsumer£©ºÍµ¥²¥£¨·¢¸øÄ³Ò»¸öConsumer£©µÄÊֶΡ£Ò»¸öTopic¿ÉÒÔ¶ÔÓ¦¶à¸öConsumer Group¡£Èç¹ûÐèҪʵÏֹ㲥£¬Ö»ÒªÃ¿¸öConsumerÓÐÒ»¸ö¶ÀÁ¢µÄGroup¾Í¿ÉÒÔÁË¡£ÒªÊµÏÖµ¥²¥Ö»ÒªËùÓеÄConsumerÔÚͬһ¸öGroupÀï¡£ÓÃConsumer Group»¹¿ÉÒÔ½«Consumer½øÐÐ×ÔÓɵķÖ×é¶ø²»ÐèÒª¶à´Î·¢ËÍÏûÏ¢µ½²»Í¬µÄTopic¡£

Push vs. Pull

×÷Ϊһ¸öÏûϢϵͳ£¬Kafka×ñÑ­ÁË´«Í³µÄ·½Ê½£¬Ñ¡ÔñÓÉProducerÏòbroker pushÏûÏ¢²¢ÓÉConsumer´Óbroker pullÏûÏ¢¡£

pushģʽºÜÄÑÊÊÓ¦Ïû·ÑËÙÂʲ»Í¬µÄÏû·ÑÕߣ¬ÒòΪÏûÏ¢·¢ËÍËÙÂÊÊÇÓÉbroker¾ö¶¨µÄ¡£pushģʽµÄÄ¿±êÊǾ¡¿ÉÄÜÒÔ×î¿ìËÙ¶È´«µÝÏûÏ¢£¬µ«ÊÇÕâÑùºÜÈÝÒ×Ôì³ÉConsumerÀ´²»¼°´¦ÀíÏûÏ¢£¬µäÐ͵ıíÏÖ¾ÍÊǾܾø·þÎñÒÔ¼°ÍøÂçÓµÈû¡£¶øpullģʽÔò¿ÉÒÔ¸ù¾ÝConsumerµÄÏû·ÑÄÜÁ¦ÒÔÊʵ±µÄËÙÂÊÏû·ÑÏûÏ¢¡£

¶ÔÓÚKafka¶øÑÔ£¬pullģʽ¸üºÏÊÊ¡£pullģʽ¿É¼ò»¯brokerµÄÉè¼Æ£¬Consumer¿É×ÔÖ÷¿ØÖÆÏû·ÑÏûÏ¢µÄËÙÂÊ£¬Í¬Ê±Consumer¿ÉÒÔ×Ô¼º¿ØÖÆÏû·Ñ·½Ê½¡ª¡ª¼´¿ÉÅúÁ¿Ïû·ÑÒ²¿ÉÖðÌõÏû·Ñ£¬Í¬Ê±»¹ÄÜÑ¡Ôñ²»Í¬µÄÌá½»·½Ê½´Ó¶øÊµÏÖ²»Í¬µÄ´«ÊäÓïÒå¡£

Kafak˳ÐòдÈëÓëÊý¾Ý¶ÁÈ¡

Éú²úÕߣ¨producer£©ÊǸºÔðÏòKafkaÌá½»Êý¾ÝµÄ£¬Kafka»á°ÑÊÕµ½µÄÏûÏ¢¶¼Ð´Èëµ½Ó²ÅÌÖУ¬Ëü¾ø¶Ô²»»á¶ªÊ§Êý¾Ý¡£ÎªÁËÓÅ»¯Ð´ÈëËÙ¶ÈKafak²ÉÓÃÁËÁ½¸ö¼¼Êõ£¬Ë³ÐòдÈëºÍMMFile¡£

˳ÐòдÈë

ÒòΪӲÅÌÊÇ»úе½á¹¹£¬Ã¿´Î¶Áд¶¼»áѰַ£¬Ð´È룬ÆäÖÐѰַÊÇÒ»¸ö¡°»úе¶¯×÷¡±£¬ËüÊÇ×îºÄʱµÄ¡£ËùÒÔÓ²ÅÌ×î¡°ÌÖÑá¡±Ëæ»úI/O£¬×îϲ»¶Ë³ÐòI/O¡£ÎªÁËÌá¸ß¶ÁдӲÅ̵ÄËÙ¶È£¬Kafka¾ÍÊÇʹÓÃ˳ÐòI/O¡£

ÿÌõÏûÏ¢¶¼±»appendµ½¸ÃPartitionÖУ¬ÊôÓÚ˳Ðòд´ÅÅÌ£¬Òò´ËЧÂʷdz£¸ß¡£

¶ÔÓÚ´«Í³µÄmessage queue¶øÑÔ£¬Ò»°ã»áɾ³ýÒѾ­±»Ïû·ÑµÄÏûÏ¢£¬¶øKafkaÊDz»»áɾ³ýÊý¾ÝµÄ£¬Ëü»á°ÑËùÓеÄÊý¾Ý¶¼±£ÁôÏÂÀ´£¬Ã¿¸öÏû·ÑÕߣ¨Consumer£©¶Ôÿ¸öTopic¶¼ÓÐÒ»¸öoffsetÓÃÀ´±íʾ¶ÁÈ¡µ½Á˵ڼ¸ÌõÊý¾Ý¡£

¼´±ãÊÇ˳ÐòдÈëÓ²ÅÌ£¬Ó²Å̵ķÃÎÊËÙ¶È»¹ÊDz»¿ÉÄÜ×·ÉÏÄÚ´æ¡£ËùÒÔKafkaµÄÊý¾Ý²¢²»ÊÇʵʱµÄдÈëÓ²ÅÌ£¬Ëü³ä·ÖÀûÓÃÁËÏÖ´ú²Ù×÷ϵͳ·ÖÒ³´æ´¢À´ÀûÓÃÄÚ´æÌá¸ßI/OЧÂÊ¡£

ÔÚLinux Kernal 2.2Ö®ºó³öÏÖÁËÒ»ÖÖ½Ð×ö¡°Á㿽±´(zero-copy)¡±ÏµÍ³µ÷ÓûúÖÆ£¬¾ÍÊÇÌø¹ý¡°Óû§»º³åÇø¡±µÄ¿½±´£¬½¨Á¢Ò»¸ö´ÅÅ̿ռäºÍÄÚ´æ¿Õ¼äµÄÖ±½ÓÓ³É䣬Êý¾Ý²»ÔÙ¸´ÖƵ½¡°Óû§Ì¬»º³åÇø¡±ÏµÍ³ÉÏÏÂÎÄÇл»¼õÉÙ2´Î£¬¿ÉÒÔÌáÉýÒ»±¶ÐÔÄÜ¡£

ͨ¹ýmmap£¬½ø³ÌÏñ¶ÁдӲÅÌÒ»Ñù¶ÁдÄڴ棨µ±È»ÊÇÐéÄâ»úÄڴ棩¡£Ê¹ÓÃÕâÖÖ·½Ê½¿ÉÒÔ»ñÈ¡ºÜ´óµÄI/OÌáÉý£¬Ê¡È¥ÁËÓû§¿Õ¼äµ½ÄÚºË¿Õ¼ä¸´ÖÆµÄ¿ªÏú£¨µ÷ÓÃÎļþµÄread»á°ÑÊý¾ÝÏȷŵ½Äں˿ռäµÄÄÚ´æÖУ¬È»ºóÔÙ¸´ÖƵ½Óû§¿Õ¼äµÄÄÚ´æÖС£

Ïû·ÑÕߣ¨¶ÁÈ¡Êý¾Ý£©

ÊÔÏëһϣ¬Ò»¸öWeb Server´«ËÍÒ»¸ö¾²Ì¬Îļþ£¬ÈçºÎÓÅ»¯£¿´ð°¸ÊÇzero copy¡£´«Í³Ä£Ê½ÏÂÎÒÃÇ´ÓÓ²Å̶Áȡһ¸öÎļþÊÇÕâÑùµÄ¡£

Ïȸ´ÖƵ½Äں˿ռ䣨readÊÇϵͳµ÷Ó㬷ŵ½ÁËDMA£¬ËùÒÔÓÃÄں˿ռ䣩£¬È»ºó¸´ÖƵ½Óû§¿Õ¼ä£¨1¡¢2£©£»´ÓÓû§¿Õ¼äÖØÐ¸´ÖƵ½Äں˿ռ䣨ÄãÓõÄsocketÊÇϵͳµ÷Óã¬ËùÒÔËüÒ²ÓÐ×Ô¼ºµÄÄں˿ռ䣩£¬×îºó·¢Ë͸øÍø¿¨£¨3¡¢4£©¡£

Zero CopyÖÐÖ±½Ó´ÓÄں˿ռ䣨DMAµÄ£©µ½Äں˿ռ䣨SocketµÄ£©£¬È»ºó·¢ËÍÍø¿¨¡£Õâ¸ö¼¼Êõ·Ç³£ÆÕ±é£¬NginxÒ²ÊÇÓõÄÕâÖÖ¼¼Êõ¡£

ʵ¼ÊÉÏ£¬Kafka°ÑËùÓеÄÏûÏ¢¶¼´æ·ÅÔÚÒ»¸öÒ»¸öµÄÎļþÖУ¬µ±Ïû·ÑÕßÐèÒªÊý¾ÝµÄʱºòKafkaÖ±½Ó°Ñ¡°Îļþ¡±·¢Ë͸øÏû·ÑÕß¡£µ±²»ÐèÒª°ÑÕû¸öÎļþ·¢³öÈ¥µÄʱºò£¬Kafkaͨ¹ýµ÷ÓÃZero CopyµÄsendfileÕâ¸öº¯Êý£¬Õâ¸öº¯Êý°üÀ¨£º

1.out_fd×÷ΪÊä³ö£¨Ò»°ã¼°Ê±socketµÄ¾ä±ú£©

2.in_fd×÷ΪÊäÈëÎļþ¾ä±ú

3.off_t±íʾin_fdµÄÆ«ÒÆ£¨´ÓÄÄÀ↑ʼ¶ÁÈ¡£©

4.size_t±íʾ¶ÁÈ¡¶àÉÙ¸ö

5.¡¸ dz̸´ó¹æÄ£·Ö²¼Ê½ÏµÍ³ÖÐÄÇЩ¼¼Êõµã¡¹ÏµÁÐÎÄÕ£º

6.dz̸·Ö²¼Ê½ÊÂÎñ

7.dz̸·Ö²¼Ê½·þÎñЭµ÷¼¼Êõ Zookeeper

   
3433 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

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

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

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