±à¼ÍƼö: |
±¾ÎÄÊ×ÏȽéÉÜKafkaµÄÔÀí£¬
Kafka¼¯Èº·ÖÀà´æ´¢ÒÔ¼°KafkaµÄºËÐijéÏó¸ÅÄî¼Ç¼Á÷£¬È»ºóÏêϸ²ûÊöKafkaµÄÓ¦Óó¡¾°ÈçºÎ×÷ΪÁ÷Ó¦ÓÃÆ½Ì¨ÒÔ¼°Êý¾ÝÁ÷´¦Àí£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚÍøÂç´óÊý¾Ý-¼¼Êõ·ÖÏí£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼¡¢ÍƼö¡£
|
|
1¡¢¼ò½é
Ëü¿ÉÒÔÈÃÄã·¢²¼ºÍ¶©ÔļǼÁ÷¡£ÔÚÕâ·½Ãæ£¬ËüÀàËÆÓÚÒ»¸öÏûÏ¢¶ÓÁлòÆóÒµÏûϢϵͳ¡£
Ëü¿ÉÒÔÈÃÄã³Ö¾Ã»¯ÊÕµ½µÄ¼Ç¼Á÷£¬´Ó¶ø¾ßÓÐÈÝ´íÄÜÁ¦¡£
Ê×ÏÈ£¬Ã÷È·¼¸¸ö¸ÅÄ
KafkaÔËÐÐÔÚÒ»¸ö»ò¶à¸ö·þÎñÆ÷ÉÏ¡£
Kafka¼¯Èº·ÖÀà´æ´¢µÄ¼Ç¼Á÷±»³ÆÎªÖ÷Ìâ(Topics)¡£
ÿ¸öÏûÏ¢¼Ç¼°üº¬Ò»¸ö¼ü£¬Ò»¸öÖµºÍʱ¼ä´Á¡£
KafkaÓÐËĸöºËÐÄAPI£º
Éú²úÕß API ÔÊÐíÓ¦ÓóÌÐò·¢²¼¼Ç¼Á÷ÖÁÒ»¸ö»ò¶à¸öKafkaµÄ»°Ìâ(Topics)¡£
Ïû·ÑÕßAPI ÔÊÐíÓ¦ÓóÌÐò¶©ÔÄÒ»¸ö»ò¶à¸öÖ÷Ì⣬²¢´¦ÀíÕâЩÖ÷Ìâ½ÓÊÕµ½µÄ¼Ç¼Á÷¡£
Streams API ÔÊÐíÓ¦ÓóÌÐò³äµ±Á÷´¦ÀíÆ÷(stream processor)£¬´ÓÒ»¸ö»ò¶à¸öÖ÷Ìâ»ñÈ¡ÊäÈëÁ÷£¬²¢Éú²úÒ»¸öÊä³öÁ÷ÖÁÒ»¸ö»ò¶à¸öµÄÖ÷Ì⣬Äܹ»ÓÐЧµØ±ä»»ÊäÈëÁ÷ΪÊä³öÁ÷¡£
Connector API ÔÊÐí¹¹½¨ºÍÔËÐпÉÖØÓõÄÉú²úÕß»òÏû·ÑÕߣ¬Äܹ»°Ñ KafkaÖ÷ÌâÁ¬½Óµ½ÏÖÓеÄÓ¦ÓóÌÐò»òÊý¾Ýϵͳ¡£ÀýÈ磬һ¸öÁ¬½Óµ½¹ØÏµÊý¾Ý¿âµÄÁ¬½ÓÆ÷(connector)¿ÉÄÜ»á»ñȡÿ¸ö±íµÄ±ä»¯¡£
KafkaµÄ¿Í»§¶ËºÍ·þÎñÆ÷Ö®¼äµÄͨÐÅÊÇ¿¿Ò»¸ö¼òµ¥µÄ£¬¸ßÐÔÄܵģ¬ÓëÓïÑÔÎ޹صÄTCPÐÒéÍê³ÉµÄ¡£Õâ¸öÐÒéÓв»Í¬µÄ°æ±¾£¬²¢±£³ÖÏòǰ¼æÈݾɰ汾¡£Kafka²»¹âÌṩÁËÒ»¸öJava¿Í»§¶Ë£¬»¹ÓÐÐí¶àÓïÑÔ°æ±¾µÄ¿Í»§¶Ë¡£
2¡¢ ¼Ü¹¹
2.1 Broker
ÿ¸ökafka server³ÆÎªÒ»¸öBroker£¬¶à¸öborker×é³Ékafka cluster¡£Ò»¸ö»úÆ÷ÉÏ¿ÉÒÔ²¿ÊðÒ»¸ö»òÕß¶à¸öBroker£¬Õâ¶à¸öBrokerÁ¬½Óµ½ÏàͬµÄZooKeeper¾Í×é³ÉÁËKafka¼¯Èº¡£

2.2 Ö÷ÌâTopic
ÈÃÎÒÃÇÏÈÀ´Á˽âKafkaµÄºËÐijéÏó¸ÅÄî¼Ç¼Á÷ ¨C Ö÷Ìâ¡£Ö÷ÌâÊÇÒ»ÖÖ·ÖÀà»ò·¢²¼µÄһϵÁмǼµÄÃûÒåÉϵÄÃû×Ö¡£KafkaµÄÖ÷ÌâʼÖÕÊÇÖ§³Ö¶àÓû§¶©ÔĵÄ;
Ò²¾ÍÊÇ˵£¬Ò»¸öÖ÷Ìâ¿ÉÒÔÓÐÁã¸ö£¬Ò»¸ö»ò¶à¸öÏû·ÑÕß¶©ÔÄдÈëµÄÊý¾Ý¡£
Topic Óëbroker
Ò»¸öBrokerÉÏ¿ÉÒÔ´´½¨Ò»¸ö»òÕß¶à¸öTopic¡£Í¬Ò»¸ötopic¿ÉÒÔÔÚͬһ¼¯ÈºÏµĶà¸öBrokerÖзֲ¼¡£

µ±È»£¬TopicÖ»ÊÇÒ»¸öÃûÒåÉϵÄ×é¼þ£¬ÕæÕýÔÚBroker¼ä·Ö²¼Ê½µÄPartition¡£
2.3 ·ÖÇøÓëÈÕÖ¾
Ò»¸öÖ÷Ìâ¶ÔÓ¦¶à¸ö·ÖÇø£¬Ò»¸ö·ÖÇø¶ÔÓ¦Ò»¸öÈÕÖ¾
Kafka»áΪÿ¸ötopicά»¤Á˶à¸ö·ÖÇø(partition)£¬Ã¿¸ö·ÖÇø»áÓ³Éäµ½Ò»¸öÂß¼µÄÈÕÖ¾(log)Îļþ¡£Ã¿¸ö·ÖÇøÊÇÒ»¸öÓÐÐòµÄ£¬²»¿É±äµÄÏûÏ¢ÐòÁУ¬ÐµÄÏûÏ¢²»¶Ï×·¼Óµ½Õâ¸öÓÐ×éÖ¯µÄÓб£Ö¤µÄÈÕÖ¾ÉÏ¡£·ÖÇø»á¸øÃ¿¸öÏûÏ¢¼Ç¼·ÖÅäÒ»¸ö˳ÐòIDºÅ
¨C Æ«ÒÆÁ¿£¬ Äܹ»Î¨Ò»µØ±êʶ¸Ã·ÖÇøÖеÄÿ¸ö¼Ç¼¡£
ÈÕÖ¾·ÖÇøÊÇ·Ö²¼Ê½µÄ´æÔÚÓÚÒ»¸ökafka¼¯ÈºµÄ¶à¸öbrokerÉÏ¡£Ã¿¸öpartition»á±»¸´Öƶà·Ý´æÔÚÓÚ²»Í¬µÄbrokerÉÏ¡£ÕâÑù×öÊÇΪÁËÈÝÔÖ¡£¾ßÌå»á¸´ÖƼ¸·Ý£¬»á¸´ÖƵ½ÄÄЩbrokerÉÏ£¬¶¼ÊÇ¿ÉÒÔÅäÖõġ£¾¹ýÏà¹ØµÄ¸´ÖƲßÂÔºó£¬Ã¿¸ötopicÔÚÿ¸öbrokerÉÏ»áפÁôÒ»µ½¶à¸öpartition£º

2.4 ±£Áô²ßÂÔÓëOffset
Kafka¼¯Èº±£ÁôËùÓз¢²¼µÄ¼Ç¼£¬²»¹ÜÕâ¸ö¼Ç¼ÓÐûÓб»Ïû·Ñ¹ý£¬KafkaÌṩ¿ÉÅäÖõı£Áô²ßÂÔȥɾ³ý¾ÉÊý¾Ý(»¹ÓÐÒ»ÖÖ²ßÂÔ¸ù¾Ý·ÖÇø´óСɾ³ýÊý¾Ý)¡£ÀýÈ磬Èç¹û½«±£Áô²ßÂÔÉèÖÃΪÁ½Ì죬ÔڼǼ¹«²¼ºóÁ½ÌìÄÚ£¬Ëü¿ÉÓÃÓÚÏû·Ñ£¬Ö®ºóËü½«±»¶ªÆúÒÔÌÚ³ö¿Õ¼ä¡£KafkaµÄÐÔÄܸú´æ´¢µÄÊý¾ÝÁ¿µÄ´óСÎ޹أ¬
ËùÒÔ½«Êý¾Ý´æ´¢ºÜ³¤Ò»¶Îʱ¼äÊÇûÓÐÎÊÌâµÄ¡£

ÊÂʵÉÏ£¬±£ÁôÔÚÿ¸öÏû·ÑÕßÔªÊý¾ÝÖеÄ×î»ù´¡µÄÊý¾Ý¾ÍÊÇÏû·ÑÕßÕýÔÚ´¦ÀíµÄµ±Ç°¼Ç¼µÄÆ«ÒÆÁ¿(offset)»òλÖÃ(position)¡£ÕâÖÖÆ«ÒÆÊÇÓÉÏû·ÑÕß¿ØÖÆ£ºÍ¨³£Æ«ÒÆ»áËæ×ÅÏû·ÑÕß¶ÁÈ¡¼Ç¼ÏßÐÔǰ½ø£¬µ«ÊÂʵÉÏ£¬ÒòΪÆäλÖÃÊÇÓÉÏû·ÑÕß½øÐпØÖÆ£¬Ïû·ÑÕß¿ÉÒÔÔÚÈκÎËüϲ»¶µÄλÖöÁÈ¡¼Ç¼¡£ÀýÈ磬Ïû·ÑÕß¿ÉÒÔ»Ö¸´µ½¾ÉµÄÆ«ÒÆÁ¿¶Ô¹ýÈ¥µÄÊý¾ÝÔÙ¼Ó¹¤»òÕßÖ±½ÓÌøµ½×îеļǼ£¬²¢Ïû·Ñ´Ó¡°ÏÖÔÚ¡±¿ªÊ¼µÄеļǼ¡£
ÕâЩ¹¦ÄܵĽáºÏÒâζ×Å£¬ÊµÏÖKafkaµÄÏû·ÑÕߵĴú¼Û¶¼ÊǺÜСµÄ£¬ËûÃÇ¿ÉÒÔÔö¼Ó»òÕß¼õÉÙ¶ø²»»á¶Ô¼¯Èº»òÆäËûÏû·ÑÕßÓÐÌ«´óÓ°Ïì¡£ÀýÈ磬Äã¿ÉÒÔʹÓÃÎÒÃǵÄÃüÁîÐй¤¾ßÈ¥×·ËæÈκÎÖ÷Ì⣬¶øÇÒ²»»á¸Ä±äÈκÎÏÖÓеÄÏû·ÑÕßÏû·ÑµÄ¼Ç¼¡£
2.5 LeaderÓëFollowers
Ò»¸öTopic¿ÉÄÜÓкܶà·ÖÇø£¬ÒÔ±ãËüÄܹ»Ö§³Öº£Á¿µÄµÄÊý¾Ý£¬¸üÖØÒªµÄÒâÒåÊÇ·ÖÇøÊǽøÐв¢Ðд¦ÀíµÄ»ù´¡µ¥Ôª¡£ÈÕÖ¾µÄ·ÖÇø»á¿ç·þÎñÆ÷µÄ·Ö²¼ÔÚKafka¼¯ÈºÖУ¬Ã¿¸ö·ÖÇø¿ÉÒÔÅäÖÃÒ»¶¨ÊýÁ¿µÄ¸±±¾·ÖÇøÌṩÈÝ´íÄÜÁ¦¡£ÎªÁ˱£Ö¤½Ï¸ßµÄ´¦ÀíЧÂÊ£¬ÏûÏ¢µÄ¶Áд¶¼ÊÇÔڹ̶¨µÄÒ»¸ö¸±±¾ÉÏÍê³É¡£Õâ¸ö¸±±¾¾ÍÊÇËùνµÄLeader£¬¶øÆäËû¸±±¾ÔòÊÇFollower£¬¶øFollowerÔò»á¶¨ÆÚµØµ½LeaderÉÏͬ²½Êý¾Ý¡£
(1)leader´¦ÀíËùÓеĶÁÈ¡ºÍдÈë·ÖÇøµÄÇëÇ󣬶øfollowers±»¶¯µÄ´ÓÁìµ¼Õß¿½±´Êý¾Ý¡£
(2)Èç¹ûleaderʧ°ÜÁË£¬followersÖ®Ò»½«×Ô¶¯³ÉΪеÄÁìµ¼Õß¡£
(3)ÿ¸ö·þÎñÆ÷¿ÉÄܳ䵱һЩ·ÖÇøµÄleaderºÍÆäËû·ÖÇøµÄfollower£¬ÕâÑùµÄ¸ºÔؾͻáÔÚ¼¯ÈºÄںܺõľùºâ·ÖÅä¡£
(4)Ò»¸ö·ÖÇøÔÚͬһʱ¿ÌÖ»ÄÜÓÐÒ»¸öÏû·ÑÕßʵÀý½øÐÐÏû·Ñ¡£
¾ÙÀý£º

¿ÉÒÔ¿´¼ûÎÒÃÇÒ»¹²ÓÐ3¸ö·ÖÇø·Ö±ðÊÇ0£¬1£¬2£¬ replica ÓÐ2¸ö£º
partition 0 µÄleaderÔÚbroker1£¬ followerÔÚbroker2
partition 1 µÄleaderÔÚbroker2£¬ followerÔÚbroker0
partition 2 µÄleaderÔÚbroker0£¬ followerÔÚbrokder1
Ò»¸öbrokerÖв»»á³öÏÖÁ½¸öÒ»ÑùµÄPartition£¬replica»á±»¾ùÔȵķֲ¼ÔÚ¸÷¸ökafka
server(broker)ÉÏ ¡£Kafka²¢²»ÔÊÐíreplicas ÊýÉèÖôóÓÚ brokerÊý£¬ÒòΪÔÚÒ»¸öbrokerÉÏÈç¹ûÓÐ2¸öreplicaÆäʵÊÇûÓÐÒâÒåµÄ£¬ÒòΪÔÙ¶àµÄreplicaͬʱÔÚһ̨brokerÉÏ£¬Ëæ×ŸÃbrokerµÄcrash£¬Ò»Æð²»¿ÉÓá£
(1)LeaderÑ¡¾ÙÓëISR
Èç¹ûij¸ö·ÖÇøËùÔڵķþÎñÆ÷³ýÁËÎÊÌ⣬²»¿ÉÓã¬kafka»á´Ó¸Ã·ÖÇøµÄÆäËûµÄ¸±±¾ÖÐÑ¡ÔñÒ»¸ö×÷ΪеÄLeader¡£Ö®ºóËùÓеĶÁд¾Í»á×ªÒÆµ½Õâ¸öеÄLeaderÉÏ¡£ÏÖÔÚµÄÎÊÌâÊÇÓ¦µ±Ñ¡ÔñÄĸö×÷ΪеÄLeader¡£ÏÔÈ»£¬Ö»ÓÐÄÇЩ¸úLeader±£³Öͬ²½µÄFollower²ÅÓ¦¸Ã±»Ñ¡×÷еÄLeader¡£
Kafka»áÔÚZookeeperÉÏÕë¶Ôÿ¸öTopicά»¤Ò»¸ö³ÆÎªISR(in-sync replica£¬ÒÑͬ²½µÄ¸±±¾)µÄ¼¯ºÏ£¬¸Ã¼¯ºÏÖÐÊÇһЩ·ÖÇøµÄ¸±±¾¡£Ö»Óе±ÕâЩ¸±±¾¶¼¸úLeaderÖеĸ±±¾Í¬²½ÁËÖ®ºó£¬kafka²Å»áÈÏΪÏûÏ¢ÒÑÌá½»£¬²¢·´À¡¸øÏûÏ¢µÄÉú²úÕß¡£Èç¹ûÕâ¸ö¼¯ºÏÓÐÔö¼õ£¬kafka»á¸üÐÂzookeeperÉϵļǼ¡£Èç¹ûij¸ö·ÖÇøµÄLeader²»¿ÉÓã¬Kafka¾Í»á´ÓISR¼¯ºÏÖÐÑ¡ÔñÒ»¸ö¸±±¾×÷ΪеÄLeader¡£ÏÔȻͨ¹ýISR£¬kafkaÐèÒªµÄÈßÓà¶È½ÏµÍ£¬¿ÉÒÔÈÝÈ̵Äʧ°ÜÊý±È½Ï¸ß¡£¼ÙÉèij¸ötopicÓÐf+1¸ö¸±±¾£¬kafka¿ÉÒÔÈÝÈÌf¸ö·þÎñÆ÷²»¿ÉÓá£
(2)Ϊʲô²»ÓÃÉÙÊý·þ´Ó¶àÊýµÄ·½·¨
ÉÙÊý·þ´Ó¶àÊýÊÇÒ»ÖֱȽϳ£¼ûµÄÒ»ÖÂÐÔËã·¨ºÍLeaderÑ¡¾Ù·¨¡£ËüµÄº¬ÒåÊÇÖ»Óг¬¹ý°ëÊýµÄ¸±±¾Í¬²½ÁË£¬ÏµÍ³²Å»áÈÏΪÊý¾ÝÒÑͬ²½;Ñ¡ÔñLeaderʱҲÊÇ´Ó³¬¹ý°ëÊýµÄͬ²½µÄ¸±±¾ÖÐÑ¡Ôñ¡£ÕâÖÖËã·¨ÐèÒª½Ï¸ßµÄÈßÓà¶È¡£Æ©ÈçÖ»ÔÊÐíһ̨»úÆ÷ʧ°Ü£¬ÐèÒªÓÐÈý¸ö¸±±¾;¶øÈç¹ûÖ»ÈÝÈÌÁ½Ì¨»úÆ÷ʧ°Ü£¬ÔòÐèÒªÎå¸ö¸±±¾¡£¶økafkaµÄISR¼¯ºÏ·½·¨£¬·Ö±ðÖ»ÐèÒªÁ½¸öºÍÈý¸ö¸±±¾¡£
(3)Èç¹ûËùÓеÄISR¸±±¾¶¼Ê§°ÜÁËÔõô°ì
´ËʱÓÐÁ½ÖÖ·½·¨¿ÉÑ¡£¬Ò»ÖÖÊǵȴýISR¼¯ºÏÖеĸ±±¾¸´»î£¬Ò»ÖÖÊÇÑ¡ÔñÈκÎÒ»¸öÁ¢¼´¿ÉÓõĸ±±¾£¬¶øÕâ¸ö¸±±¾²»Ò»¶¨ÊÇÔÚISR¼¯ºÏÖС£ÕâÁ½ÖÖ·½·¨¸÷ÓÐÀû±×£¬Êµ¼ÊÉú²úÖа´ÐèÑ¡Ôñ¡£Èç¹ûÒªµÈ´ýISR¸±±¾¸´»î£¬ËäÈ»¿ÉÒÔ±£Ö¤Ò»ÖÂÐÔ£¬µ«¿ÉÄÜÐèÒªºÜ³¤Ê±¼ä¡£¶øÈç¹ûÑ¡ÔñÁ¢¼´¿ÉÓõĸ±±¾£¬ÔòºÜ¿ÉÄܸø±±¾²¢²»Ò»Ö¡£
2.6 Éú²úÕߺÍÏû·ÑÕß
(1)Éú²úÕß
Éú²úÕß·¢²¼Êý¾Ýµ½ËûÃÇËùÑ¡ÔñµÄÖ÷Ìâ¡£Éú²úÕ߸ºÔðÑ¡Ôñ°Ñ¼Ç¼·ÖÅäµ½Ö÷ÌâÖеÄÄĸö·ÖÇø¡£Õâ¿ÉÒÔʹÓÃÂÖѯËã·¨(
round-robin)½øÐмòµ¥µØÆ½ºâ¸ºÔØ£¬Ò²¿ÉÒÔ¸ù¾ÝһЩ¸ü¸´ÔÓµÄÓïÒå·ÖÇøËã·¨(±ÈÈç»ùÓڼǼһЩ¼üÖµ)À´Íê³É¡£
(2)Ïû·ÑÕß
Ïû·ÑÕßÒÔÏû·ÑȺ(consumer group)µÄÃû³ÆÀ´±êʶ×Ô¼º£¬Ã¿¸ö·¢²¼µ½Ö÷ÌâµÄÏûÏ¢¶¼»á·¢Ë͸ø¶©ÔÄÁËÕâ¸öÖ÷ÌâµÄÏû·ÑȺÀïÃæµÄÒ»¸öÏû·ÑÕßʵÀý£¬¼´Ò»¸öÏû·ÑȺֻ·¢ËÍÒ»´Î¡£Ïû·ÑÕßµÄʵÀý¿ÉÒÔÔÚµ¥¶ÀµÄ½ø³Ì»òµ¥¶ÀµÄ»úÆ÷ÉÏ¡£

ÉÏͼÖÐÁ½¸ö·þÎñÆ÷µÄKafka¼¯Èº¾ßÓÐËĸö·ÖÇø(P0-P3)ºÍÁ½¸öÏû·ÑȺ¡£AÏû·ÑȺÓÐÁ½¸öÏû·ÑÕߣ¬BȺÓÐËĸö¡£¸ü³£¼ûµÄÊÇ£¬ÎÒÃǻᷢÏÖÖ÷ÌâÓÐÉÙÁ¿µÄÏû·ÑȺ£¬Ã¿Ò»¸ö¶¼ÊÇ¡°Âß¼ÉϵĶ©ÔÄÕß¡±¡£Ã¿×é¶¼ÊÇÓɺܶàÏû·ÑÕßʵÀý×é³É£¬´Ó¶øÊµÏÖ¿ÉÀ©Õ¹ÐÔºÍÈÝ´íÐÔ¡£ÕâÖ»²»¹ýÊÇ·¢²¼
¨C ¶©ÔÄģʽµÄÔÙÏÖ£¬Çø±ðÊÇÕâÀïµÄ¶©ÔÄÕßÊÇÒ»×éÏû·ÑÕß¶ø²»ÊÇÒ»¸öµ¥Ò»µÄ½ø³ÌµÄÏû·ÑÕß¡£
KafkaÏû·ÑȺµÄʵÏÖ·½Ê½ÊÇͨ¹ý·Ö¸î·ÖÇø¸øÃ¿¸öConsumerʵÀýʵÏֵģ¬Ê¹Ã¿¸öʵÀýÔÚÈκÎʱ¼äµãµÄ¶¼¿ÉÒÔ¡°¹«Æ½·ÖÏí¡±¶ÀÕ¼µÄ·ÖÇø¡£Î¬³ÖÏû·ÑȺÖеijÉÔ±¹ØÏµµÄÕâ¸ö¹ý³ÌÊÇͨ¹ýKafka¶¯Ì¬ÐÒé´¦Àí¡£Èç¹ûеÄʵÀý¼ÓÈë¸Ã×飬Ëû½«½Ó¹Ü¸Ã×éµÄÆäËû³ÉÔ±µÄһЩ·ÖÇø;
Èç¹ûÒ»¸öʵÀýËÀÍö£¬Æä·ÖÇø½«±»·ÖÅ䵽ʣÓàµÄʵÀý¡£
KafkaÖ»±£Ö¤Ò»¸ö·ÖÇøÄÚµÄÏûÏ¢ÓÐÐò£¬²»Äܱ£Ö¤Ò»¸öÖ÷ÌâµÄ²»Í¬·ÖÇøÖ®¼äµÄÏûÏ¢ÓÐÐò¡£·ÖÇøµÄÏûÏ¢ÓÐÐòÓëÒÀ¿¿Ö÷¼ü½øÐÐÊý¾Ý·ÖÇøµÄÄÜÁ¦Ïà½áºÏ×ãÒÔÂú×ã´ó¶àÊýÓ¦ÓõÄÒªÇó¡£µ«ÊÇ£¬Èç¹ûÄãÏëÒª±£Ö¤ËùÓеÄÏûÏ¢¶¼¾ø¶ÔÓÐÐò¿ÉÒÔֻΪһ¸öÖ÷Ìâ·ÖÅäÒ»¸ö·ÖÇø£¬ËäÈ»Õ⽫Òâζ×Åÿ¸öÏû·ÑȺͬʱֻÄÜÓÐÒ»¸öÏû·Ñ½ø³ÌÔÚÏû·Ñ¡£
3 ¡¢Êý¾Ý¿É¿¿ÐÔÓëÒ»ÖÂÐÔ
3.1 Partition Recovery»úÖÆ
ÿ¸öPartition»áÔÚ´ÅÅ̼Ǽһ¸öRecoveryPoint£¬¼Ç¼ÒѾflushµ½´ÅÅ̵Ä×î´óoffset¡£µ±broker
fail ÖØÆôʱ£¬»á½øÐÐloadLogs¡£ Ê×ÏÈ»á¶ÁÈ¡¸ÃPartitionµÄRecoveryPoint£¬ÕÒµ½°üº¬RecoveryPointµÄsegment¼°ÒÔºóµÄsegment£¬
ÕâЩsegment¾ÍÊÇ¿ÉÄÜûÓÐÍêÈ«flushµ½´ÅÅÌsegments¡£È»ºóµ÷ÓÃsegmentµÄrecover£¬ÖØÐ¶ÁÈ¡¸÷¸ösegmentµÄmsg£¬²¢Öؽ¨Ë÷Òý¡£
Óŵã
ÒÔsegmentΪµ¥Î»¹ÜÀíPartitionÊý¾Ý£¬·½±ãÊý¾ÝÉúÃüÖÜÆÚµÄ¹ÜÀí£¬É¾³ý¹ýÆÚÊý¾Ý¼òµ¥¡£
ÔÚ³ÌÐò±ÀÀ£ÖØÆôʱ£¬¼Ó¿ìrecoveryËÙ¶È£¬Ö»Ðè»Ö¸´Î´ÍêÈ«flushµ½´ÅÅ̵Äsegment¡£
ͨ¹ýindexÖÐoffsetÓëÎïÀíÆ«ÒÆÓ³É䣬Óöþ·Ö²éÕÒÄÜ¿ìËÙ¶¨Î»msg£¬²¢ÇÒͨ¹ý·Ö¶à¸öSegment£¬Ã¿¸öindexÎļþºÜС£¬²éÕÒËٶȸü¿ì¡£
3.2 Partition Replicaͬ²½»úÖÆ
PartitionµÄ¶à¸öreplicaÖÐÒ»¸öΪLeader£¬ÆäÓàΪfollower
ProducerÖ»ÓëLeader½»»¥£¬°ÑÊý¾ÝдÈëµ½LeaderÖÐ
Followers´ÓLeaderÖÐÀÈ¡Êý¾Ý½øÐÐÊý¾Ýͬ²½
ConsumerÖ»´ÓLeaderÀÈ¡Êý¾Ý
ISR£ºin-sync replica£¬ÒÑͬ²½µÄ¸±±¾¡£×¼È·µÄ¶¨ÒåÊÇ¡°ËùÓв»ÂäºóµÄreplica¼¯ºÏ¡±¡£²»ÂäºóÓÐÁ½²ãº¬Òå:¾àÀëÉÏ´ÎFetchRequestµÄʱ¼ä²»´óÓÚijһ¸öÖµ»òÂäºóµÄÏûÏ¢Êý²»´óÓÚijһ¸öÖµ£¬
Leaderʧ°Üºó»á´ÓISRÖÐѡȡһ¸öFollower×öLeader¡£
3.3 ÏûÏ¢µÄ˳ÐòÏû·ÑÎÊÌâ
ÔÚ˵µ½ÏûÏ¢Öмä¼þµÄʱºò£¬ÎÒÃÇͨ³£¶¼»á̸µ½Ò»¸öÌØÐÔ£ºÏûÏ¢µÄ˳ÐòÏû·ÑÎÊÌâ¡£Õâ¸öÎÊÌâ¿´ÆðÀ´ºÜ¼òµ¥£ºProducer·¢ËÍÏûÏ¢1,
2, 3;Consumer°´1, 2, 3˳ÐòÏû·Ñ¡£µ«Êµ¼ÊÇé¿öÈ´ÊÇ£ºÎÞÂÛRocketMQ£¬»¹ÊÇKafka£¬È±Ê¡¶¼²»±£Ö¤ÏûÏ¢µÄÑϸñÓÐÐòÏû·Ñ!À§ÄÑÈçÏ£º
(1)Producer
·¢ËͶ˲»ÄÜÒì²½·¢ËÍ£¬Òì²½·¢ËÍÔÚ·¢ËÍʧ°ÜµÄÇé¿öÏ£¬¾Íû°ì·¨±£Ö¤ÏûϢ˳Ðò¡£±ÈÈçÄãÁ¬Ðø·¢ÁË1£¬2£¬3¡£
¹ýÁËÒ»»á£¬·µ»Ø½á¹û1ʧ°Ü£¬2, 3³É¹¦¡£Äã°Ñ1ÔÙÖØÐ·¢ËÍ1±é£¬Õâ¸öʱºò˳Ðò¾ÍÂÒµôÁË¡£
(2)´æ´¢¶Ë
¶ÔÓÚ´æ´¢¶Ë£¬Òª±£Ö¤ÏûϢ˳Ðò£¬»áÓÐÒÔϼ¸¸öÎÊÌ⣺
ÏûÏ¢²»ÄÜ·ÖÇø¡£Ò²¾ÍÊÇ1¸ötopic£¬Ö»ÄÜÓÐ1¸ö¶ÓÁС£ÔÚKafkaÖУ¬Ëü½Ð×öpartition;ÔÚRocketMQÖУ¬Ëü½Ð×öqueue¡£
Èç¹ûÄãÓжà¸ö¶ÓÁУ¬ÄÇͬ1¸ötopicµÄÏûÏ¢£¬»á·ÖÉ¢µ½¶à¸ö·ÖÇøÀïÃæ£¬×ÔÈ»²»Äܱ£Ö¤Ë³Ðò¡£
¼´Ê¹Ö»ÓÐ1¸ö¶ÓÁеÄÇé¿öÏ£¬»áÓеÚ2¸öÎÊÌâ¡£¸Ã»úÆ÷¹ÒÁËÖ®ºó£¬ÄÜ·ñÇл»µ½ÆäËû»úÆ÷Ò²¾ÍÊǸ߿ÉÓÃÎÊÌâ¡£±ÈÈçÄ㵱ǰµÄ»úÆ÷¹ÒÁË£¬ÉÏÃæ»¹ÓÐÏûϢûÓÐÏû·ÑÍê¡£´ËʱÇл»µ½ÆäËû»úÆ÷£¬¿ÉÓÃÐÔ±£Ö¤ÁË¡£µ«ÏûϢ˳Ðò¾ÍÂÒµôÁË¡£ÒªÏë±£Ö¤£¬Ò»·½ÃæÒªÍ¬²½¸´ÖÆ£¬²»ÄÜÒì²½¸´ÖÆ;Áí1·½ÃæµÃ±£Ö¤£¬ÇлúÆ÷֮ǰ£¬¹ÒµôµÄ»úÆ÷ÉÏÃæ£¬ËùÓÐÏûÏ¢±ØÐëÏû·ÑÍêÁË£¬²»ÄÜÓвÐÁô¡£ºÜÃ÷ÏÔ£¬Õâ¸öºÜÄÑ¡£
(3)½ÓÊÕ¶Ë
¶ÔÓÚ½ÓÊÕ¶Ë£¬²»Äܲ¢ÐÐÏû·Ñ£¬Ò²¼´²»ÄÜ¿ª¶àÏ̻߳òÕß¶à¸ö¿Í»§¶ËÏû·Ñͬ1¸ö¶ÓÁС£
3.4 Producer·¢ËÍÏûÏ¢µÄÅäÖÃ
3.4.1 ͬ²½Ä£Ê½
kafkaÓÐͬ²½(sync)¡¢Òì²½(async)ÒÔ¼°onewayÕâÈýÖÖ·¢ËÍ·½Ê½£¬Ä³Ð©¸ÅÄîÉÏÇø·ÖÒ²¿ÉÒÔ·ÖΪͬ²½ºÍÒì²½Á½ÖÖ£¬Í¬²½ºÍÒì²½µÄ·¢ËÍ·½Ê½Í¨¹ýproducer.type²ÎÊýÖ¸¶¨£¬¶øonewayÓÉrequest.require.acks²ÎÊýÖ¸¶¨¡£
producer.typeµÄĬÈÏÖµÊÇsync£¬¼´Í¬²½µÄ·½Ê½¡£Õâ¸ö²ÎÊýÖ¸¶¨ÁËÔÚºǫ́Ïß³ÌÖÐÏûÏ¢µÄ·¢ËÍ·½Ê½ÊÇͬ²½µÄ»¹ÊÇÒì²½µÄ¡£Èç¹ûÉèÖóÉÒì²½µÄģʽ£¬¿ÉÒÔÔËÐÐÉú²úÕßÒÔbatchµÄÐÎʽpushÊý¾Ý£¬ÕâÑù»á¼«´óµÄÌá¸ßbrokerµÄÐÔÄÜ£¬µ«ÊÇÕâÑù»áÔö¼Ó¶ªÊ§Êý¾ÝµÄ·çÏÕ¡£
3.4.2 Ò첽ģʽ
¶ÔÓÚÒ첽ģʽ£¬»¹ÓÐ4¸öÅäÌ׵IJÎÊý£¬ÈçÏ£º

3.4.3 oneway
onewayÊÇÖ»¹ËÏûÏ¢·¢³öÈ¥¶ø²»¹ÜËÀ»î£¬ÏûÏ¢¿É¿¿ÐÔ×îµÍ£¬µ«ÊǵÍÑÓ³Ù¡¢¸ßÍÌÍ£¬ÕâÖÖ¶ÔÓÚijЩÍêÈ«¶Ô¿É¿¿ÐÔûÓÐÒªÇóµÄ³¡¾°»¹ÊÇÊÊÓõ쬼´request.required.acksÉèÖÃΪ0¡£
3.4.4 ÏûÏ¢¿É¿¿ÐÔ¼¶±ð
µ±ProducerÏòLeader·¢ËÍÊý¾Ýʱ£¬¿ÉÒÔͨ¹ýrequest.required.acks²ÎÊýÉèÖÃÊý¾Ý¿É¿¿ÐԵļ¶±ð£º
0: ²»ÂÛдÈëÊÇ·ñ³É¹¦£¬server²»ÐèÒª¸øProducer·¢ËÍResponse£¬Èç¹û·¢ÉúÒì³££¬server»áÖÕÖ¹Á¬½Ó£¬´¥·¢Producer¸üÐÂmetaÊý¾Ý;
1: LeaderдÈë³É¹¦ºó¼´·¢ËÍResponse£¬´ËÖÖÇé¿öÈç¹ûLeader fail£¬»á¶ªÊ§Êý¾Ý
-1: µÈ´ýËùÓÐISR½ÓÊÕµ½ÏûÏ¢ºóÔÙ¸øProducer·¢ËÍResponse£¬ÕâÊÇ×îÇ¿±£Ö¤
½öÉèÖÃacks=-1Ò²²»Äܱ£Ö¤Êý¾Ý²»¶ªÊ§£¬µ±IsrÁбíÖÐÖ»ÓÐLeaderʱ£¬Í¬ÑùÓпÉÄÜÔì³ÉÊý¾Ý¶ªÊ§¡£Òª±£Ö¤Êý¾Ý²»¶ª³ýÁËÉèÖÃacks=-1£¬
»¹Òª±£ Ö¤ISRµÄ´óС´óÓÚµÈÓÚ2£¬¾ßÌå²ÎÊýÉèÖÃ:
(1)request.required.acks: ÉèÖÃΪ-1 µÈ´ýËùÓÐISRÁбíÖеÄReplica½ÓÊÕµ½ÏûÏ¢ºó²ÉËãд³É¹¦;
(2)min.insync.replicas: ÉèÖÃΪ´óÓÚµÈÓÚ2£¬±£Ö¤ISRÖÐÖÁÉÙÓÐÁ½¸öReplica
ProducerÒªÔÚÍÌÍÂÂʺÍÊý¾Ý¿É¿¿ÐÔÖ®¼ä×öÒ»¸öȨºâ¡£
3.4.5 Ò»°ãÅäÖÃ

4¡¢ Ó¦Óó¡¾°
4.1 ÏûϢϵͳ
ÏûÏ¢´¦ÀíÄ£ÐÍÀúÀ´ÓÐÁ½ÖÖ£º
¶ÓÁÐÄ£ÐÍ£ºÒ»×éÏû·ÑÕß¿ÉÒÔ´Ó·þÎñÆ÷¶ÁÈ¡¼Ç¼£¬Ã¿¸ö¼Ç¼¶¼»á±»ÆäÖÐÒ»¸öÏû·ÑÕß´¦Àí£¬Îª±£ÕÏÏûÏ¢µÄ˳Ðò£¬Í¬Ò»Ê±¿ÌÖ»ÄÜÓÐÒ»¸ö½ø³Ì½øÐÐÏû·Ñ¡£
·¢²¼-¶©ÔÄÄ£ÐÍ£º¼Ç¼±»¹ã²¥µ½ËùÓеÄÏû·ÑÕß¡£
KafkaµÄÏû·ÑȺµÄÍÆ¹ãÁËÕâÁ½¸ö¸ÅÄî¡£Ïû·ÑȺ¿ÉÒÔÏñ¶ÓÁÐÒ»ÑùÈÃÏûÏ¢±»Ò»×é½ø³Ì´¦Àí(Ïû·ÑȺµÄ³ÉÔ±)£¬Óë·¢²¼
¨C ¶©ÔÄģʽһÑù£¬Kafka¿ÉÒÔÈÃÄã·¢Ë͹㲥ÏûÏ¢µ½¶à¸öÏû·ÑȺ¡£
Kafka¼æ¹ËÁËÏûÏ¢µÄÓÐÐòÐԺͲ¢·¢´¦ÀíÄÜÁ¦¡£´«Í³µÄÏûÏ¢¶ÓÁеÄÏûÏ¢ÔÚ¶ÓÁÐÖÐÊÇÓÐÐòµÄ£¬¶à¸öÏû·ÑÕß´Ó¶ÓÁÐÖÐÏû·ÑÏûÏ¢£¬·þÎñÆ÷°´ÕÕ´æ´¢µÄ˳ÐòÅÉ·¢ÏûÏ¢¡£È»¶ø£¬¾¡¹Ü·þÎñÆ÷Êǰ´ÕÕ˳ÐòÅÉ·¢ÏûÏ¢£¬µ«ÊÇÕâЩÏûÏ¢¼Ç¼±»Òì²½´«µÝ¸øÏû·ÑÕߣ¬Ïû·ÑÕß½ÓÊÕµ½µÄÏûÏ¢Ò²ÐíÒѾÊÇÂÒÐòµÄÁË¡£Õâʵ¼ÊÉÏÒâζ×ÅÏûÏ¢µÄÅÅÐòÔÚ²¢ÐÐÏû·ÑÖж¼½«¶ªÊ§¡£ÏûϢϵͳͨ³£¿¿
¡°ÅÅËûÐÔÏû·Ñ¡±( exclusive consumer)À´½â¾öÕâ¸öÎÊÌ⣬ֻÔÊÐíÒ»¸ö½ø³Ì´Ó¶ÓÁÐÖÐÏû·Ñ£¬µ±È»£¬ÕâÒâζ×ÅûÓв¢Ðд¦ÀíµÄÄÜÁ¦¡£
Kafka×öµÄ¸üºÃ¡£Í¨¹ýÒ»¸ö¸ÅÄ²¢ÐÐÐÔ-·ÖÇø-Ö÷ÌâʵÏÖÖ÷ÌâÄڵIJ¢Ðд¦Àí£¬KafkaÊÇÄܹ»Í¨¹ýÒ»×éÏû·ÑÕߵĽø³ÌͬʱÌṩÅÅÐò±£Ö¤ºÍ²¢Ðд¦ÀíÒÔ¼°¸ºÔؾùºâµÄÄÜÁ¦£º
(1)ÅÅÐò±£ÕÏ
ÿ¸öÖ÷ÌâµÄ·ÖÇøÖ¸¶¨¸øÃ¿¸öÏû·ÑȺÖеÄÒ»¸öÏû·ÑÕߣ¬Ê¹Ã¿¸ö·ÖÇøÖ»ÓɸÃ×éÖеÄÒ»¸öÏû·ÑÕßËùÏû·Ñ¡£Í¨¹ýÕâÑù×ö£¬ÎÒÃÇÈ·±£Ïû·ÑÕßÊÇÒ»¸ö·ÖÇøÎ¨Ò»µÄ¶ÁÕߣ¬´Ó¶øË³ÐòµÄÏû·ÑÊý¾Ý¡£
(2)²¢Ðд¦Àí
ÒòΪÓÐÐí¶àµÄ·ÖÇø£¬ËùÒÔ¸ºÔØ»¹Äܹ»¾ùºâµÄ·ÖÅäµ½ºÜ¶àµÄÏû·ÑÕßʵÀýÉÏÈ¥¡£µ«ÊÇÇë×¢Ò⣬һ¸öÏû·ÑȺµÄÏû·ÑÕßʵÀý²»ÄܱȷÖÇøÊýÁ¿¶à£¬ÒòΪ·ÖÇøÊý´ú±íÁËÒ»¸öÖ÷ÌâµÄ×î´ó²¢·¢Êý£¬Ïû·ÑÕßµÄÊýÁ¿¸ßÓÚÕâ¸öÊýÁ¿ÒâÒå²»´ó¡£
4.2 ÈÕÖ¾²É¼¯
´ó¶àÊýʱºò£¬ÎÒÃǵÄlog¶¼»áÊä³öµ½±¾µØµÄ´ÅÅÌÉÏ£¬ÅŲéÎÊÌâÒ²ÊÇʹÓÃlinuxÃüÁîÀ´¸ã¶¨£¬Èç¹ûweb³ÌÐò×é³É¸ºÔؼ¯Èº£¬ÄÇô¾ÍÓжą̀»úÆ÷£¬Èç¹ûÓм¸Ê®Ì¨»úÆ÷£¬¼¸Ê®¸ö·þÎñ£¬ÄÇôÏë¿ìËÙ¶¨Î»logÎÊÌâºÍÅŲé¾Í±È½ÏÂé·³ÁË£¬ËùÒÔºÜÓбØÒªÓÐÒ»¸öͳһµÄƽ̨¹ÜÀílog£¬ÏÖÔÚ´ó¶àÊý¹«Ë¾µÄÌ×·¶¼ÊÇÊÕ¼¯ÖØÒªÓ¦ÓõÄlog¼¯Öе½kafkaÖУ¬È»ºóÔÚ·Ö±ðµ¼Èëµ½esºÍhdfsÉÏ£¬Ò»¸ö×öʵʱ¼ìË÷·ÖÎö£¬ÁíÒ»¸ö×öÀëÏßͳ¼ÆºÍÊý¾Ý±¸·Ý¡£ÈçºÎÄÜ¿ìËÙÊÕ¼¯Ó¦ÓÃÈÕÖ¾µ½kafkaÖÐ
·½·¨Ò»£ºÊ¹ÓÃlog4jµÄ¼¯³É°ü
kafka¹ÙÍøÒѾÌṩÁ˷dz£·½±ãµÄlog4jµÄ¼¯³É°ü kafka-log4j-appender£¬ÎÒÃÇÖ»ÐèÒª¼òµ¥ÅäÖÃlog4jÎļþ£¬¾ÍÄÜÊÕ¼¯Ó¦ÓóÌÐòlogµ½kafkaÖС£
×¢Ò⣬ÐèÒªÒýÈëmavenµÄÒÀÀµ°ü£º

·Ç³£¼òµ¥£¬Ò»¸ömavenÒÀÀµ¼ÓÒ»¸ölog4jÅäÖÃÎļþ¼´¿É£¬Èç¹ûÒÀÈ»ÏëдÈëlogµ½±¾µØ ÎļþÒÀȻҲÊÇ¿ÉÒԵģ¬ÕâÖÖ·½Ê½×î¼òµ¥¿ìËÙ£¬µ«ÊÇĬÈϵĵÄlogÈÕÖ¾ÊÇÒ»ÐÐÒ»ÐеĴ¿Îı¾£¬ÓÐЩ³¡¾°ÏÂÎÒÃÇ¿ÉÄÜÐèÒªjson¸ñʽµÄÊý¾Ý¡£
·½·¨¶þ: ÖØÐ´Log4jAppender
ÖØÐ´Log4jAppender£¬×Ô¶¨ÒåÊä³ö¸ñʽ£¬Ö§³Öjson¸ñʽ£¬Èç¹ûÊÇjson¸ñʽµÄÊý¾Ý´òÈëµ½kafkaÖУ¬ºóÐøÊÕ¼¯³ÌÐò¿ÉÄܾͷdz£·½±ãÁË£¬Ö±½ÓÄõ½json¾ÍÄÜÈëµ½mongodb»òÕßesÖУ¬Èç¹û´òÈëµ½kafkaÖеÄÊý¾ÝÊÇ´¿Îı¾£¬ÄÇôÊÕ¼¯³ÌÐò£¬¿ÉÄÜÐèÒª×öһЩetl£¬½âÎöÆäÖеÄһЩ×Ö¶ÎÈ»ºóÔÙÈëµ½esÖУ¬ËùÒÔÔÉúµÄÊä³ö¸ñʽ£¬¿ÉÄÜÉÔ²»Áé»î£¬ÕâÑù¾ÍÐèÒªÎÒÃÇ×Ô¼ºÐ´Ò»Ð©À࣬Ȼºó´ïµ½Áé»îµÄ³Ì¶È£¬githubÁ¬½Ó£ºhttps://github.com/qindongliang/log_to_kafka¸ÐÐËȤµÄÅóÓÑ¿ÉÒÔ¿´Ï¡£
×ܽ᣺
(1)·½·¨Ò»¼òµ¥¿ìËÙ£¬²»Ö§³Öjson¸ñʽµÄÊä³ö£¬´òµ½kafkaµÄÏûÏ¢¶¼ÊÇÔÑùµÄlogÈÕÖ¾ÐÅÏ¢
(2)·½·¨¶þÉÔ΢¸´ÔÓ£¬ÐèÒª×Ô¼ºÀ©Õ¹logÊÕ¼¯À࣬µ«Ö§³Öjson¸ñʽµÄÊý¾ÝÊä³ö£¬¶ÔÓÚÏëÂ䵨jsonÊý¾ÝÖ±½Óµ½´æ´¢ÏµÍ³ÖÐÊǷdz£Êʺϵġ£
´ËÍâÐèҪעÒ⣬ÔÚµ÷ÊÔµÄʱºòlog·¢ËÍÊý¾Ýµ½kafkaģʽ×îºÃÊÇͬ²½Ä£Ê½µÄ·ñÔòÄã¿ØÖÆÌ¨´òÓ¡µÄÊý¾ÝºÜÓпÉÄܲ»»á±»ÊÕ¼¯kafkaÖУ¬³ÌÐò¾ÍÍ£Ö¹ÁË¡£Éú²ú»·¾³×îºÃ¿ªÆôÒì²½·¢ËÍÊý¾Ýģʽ£¬ÒòΪÄÚ²¿ÊÇÅúÁ¿µÄ´¦Àí£¬ËùÒÔÄÜÌáÉýÍÌÍÂ,µ«ÓÐÒ»¶¨µÄÇá΢ÑÓ³Ù¡£
4.3 Á÷´¦Àí
Ö»ÊǶÁ£¬Ð´£¬ÒÔ¼°´¢´æÊý¾ÝÁ÷ÊDz»¹»µÄ£¬Ä¿µÄÊÇÄܹ»ÊµÊ±´¦ÀíÊý¾ÝÁ÷¡£ÔÚKafkaÖУ¬Á÷´¦ÀíÆ÷ÊÇ´ÓÊäÈëµÄÖ÷ÌâÁ¬ÐøµÄ»ñÈ¡Êý¾ÝÁ÷£¬È»ºó¶ÔÊäÈë½øÐÐһϵÁеĴ¦Àí£¬²¢Éú²úÁ¬ÐøµÄÊý¾ÝÁ÷µ½Êä³öÖ÷Ìâ¡£
ÕâЩ¼òµ¥´¦Àí¿ÉÒÔÖ±½ÓʹÓÃÉú²úÕߺÍÏû·ÑÕßµÄAPI×öµ½¡£È»¶ø£¬¶ÔÓÚ¸ü¸´ÔÓµÄת»»KafkaÌṩÁËÒ»¸öÍêÈ«¼¯³ÉµÄÁ÷API¡£ÕâÔÊÐíÓ¦ÓóÌÐò°ÑÒ»Ð©ÖØÒªµÄ¼ÆËã¹ý³Ì´ÓÁ÷ÖаþÀë»òÕß¼ÓÈëÁ÷Ò»Æð¡£ÕâÖÖÉèÊ©¿É°ïÖú½â¾öÕâÀàÓ¦ÓÃÃæÁÙµÄÄÑÌ⣺´¦ÀíÔÓÂÒµÄÊý¾Ý£¬¸Ä±ä´úÂëÈ¥ÖØÐ´¦ÀíÊäÈ룬ִÐÐÓÐ״̬µÄ¼ÆËãµÈ¡£Á÷API½¨Á¢ÔÚKafkaÌṩµÄºËÐÄ»ù´¡µ¥ÔªÖ®ÉÏ£ºËüʹÓÃÉú²úÕߺÍÏû·ÑÕßµÄAPI½øÐÐÊäÈëÊä³ö£¬Ê¹ÓÃKafka´æ´¢ÓÐ״̬µÄÊý¾Ý£¬²¢Ê¹ÓÃȺ×é»úÖÆÔÚÒ»×éÁ÷´¦ÀíʵÀýÖÐʵÏÖÈÝ´í¡£
°Ñ¹¦ÄÜ×éºÏÆðÀ´
ÏûÏ¢µÄ´«Ê䣬´æ´¢ºÍÁ÷´¦ÀíµÄ×éºÏ¿´ËƲ»Ñ°³££¬È´ÊÇKafka×÷ΪÁ÷´¦ÀíÆ½Ì¨µÄ¹Ø¼ü¡£ÏñHDFS·Ö²¼Ê½Îļþϵͳ£¬ÔÊÐí´æ´¢¾²Ì¬Îļþ½øÐÐÅúÁ¿´¦Àí¡£ÏñÕâÑùµÄϵͳÔÊÐí´æ´¢ºÍ´¦Àí¹ýÈ¥µÄÀúÊ·Êý¾Ý¡£´«Í³µÄÆóÒµÏûϢϵͳÔÊÐí´¦ÀíÄú¶©Ôĺó²ÅµÖ´ïµÄÏûÏ¢¡£ÕâÑùµÄϵͳֻÄÜ´¦Àí½«À´µ½´ïµÄÊý¾Ý¡£
Kafka½áºÏÁËÕâЩ¹¦ÄÜ£¬ÕâÖÖ½áºÏ¶ÔKafka×÷ΪÁ÷Ó¦ÓÃÆ½Ì¨ÒÔ¼°Êý¾ÝÁ÷´¦ÀíµÄ¹ÜµÀÖÁ¹ØÖØÒª¡£Í¨¹ýÕûºÏ´æ´¢ºÍµÍÑÓ³Ù¶©ÔÄ£¬Á÷´¦ÀíÓ¦ÓÿÉÒ԰ѹýÈ¥ºÍδÀ´µÄÊý¾ÝÓÃÏàͬµÄ·½Ê½´¦Àí¡£ÕâÑùÒ»¸öµ¥¶ÀµÄÓ¦ÓóÌÐò£¬²»µ«¿ÉÒÔ´¦ÀíÀúÊ·µÄ£¬±£´æµÄÊý¾Ý£¬µ±Ëüµ½´ï×îºóÒ»Ìõ¼Ç¼²»»áÍ£Ö¹£¬¼ÌÐøµÈ´ý´¦ÀíδÀ´µ½´ïµÄÊý¾Ý¡£ÕâÊÇ·º»¯Á˵ÄÁ÷´¦ÀíµÄ¸ÅÄ°üÀ¨ÁËÅú´¦ÀíÓ¦ÓÃÒÔ¼°ÏûÏ¢Çý¶¯µÄÓ¦Óá£Í¬Ñù£¬Á÷Êý¾Ý´¦ÀíµÄ¹ÜµÀ½áºÏʵʱʼþµÄ¶©ÔÄʹÈËÃÇÄܹ»ÓÃKafkaʵÏÖµÍÑӳٵĹܵÀ;
¿É¿¿µÄ´æ´¢Êý¾ÝµÄÄÜÁ¦Ê¹ÈËÃÇÓпÉÄÜʹÓÃËü´«ÊäÒ»Ð©ÖØÒªµÄ±ØÐë±£Ö¤¿É´ïµÄÊý¾Ý¡£¿ÉÒÔÓëÒ»¸ö¶¨ÆÚ¼ÓÔØÊý¾ÝµÄÏßÏÂϵͳ¼¯³É£¬»òÕßÓëÒ»¸öÒòΪά»¤³¤Ê±¼äÏÂÏßµÄϵͳ¼¯³É¡£Á÷´¦ÀíµÄ×é¼þÄܹ»±£Ö¤×ª»»(´¦Àí)µ½´ïµÄÊý¾Ý¡£
5¡¢KafkaÓëActiveMQ¶Ô±È
Ê×ÏÈ£¬Active MQÓëKafkaµÄÏàͬµãÖ»ÓÐÒ»¸ö£¬¾ÍÊǶ¼ÊÇÏûÏ¢Öмä¼þ¡£ÆäËûûÓÐÈκÎÏàͬµã¡£
5.1 consumerµÄ²»Í¬
(1)AMQÏû·ÑÍêµÄÏûÏ¢»á±»ÇåÀíµô
AMQÎÞÂÛÔÚstandalone»¹ÊÇ·Ö²¼Ê½µÄÇé¿öÏ£¬¶¼»áʹÓÃmysql×÷Ϊ´æ´¢£¬¶àÒ»¸öconsumerÏß³ÌÈ¥Ïû·Ñ¶à¸öqueue,
Ïû·ÑÍêµÄmessage»áÔÚmysqlÖб»ÇåÀíµô¡£
(2)AMQµÄÏû·ÑÂß¼ÔÚBrokerÖÐÍê³É
×÷ΪAMQµÄconsume clinetµÄ¶à¸öconsumerÏß³ÌÈ¥Ïû·Ñqueue£¬AMQ Broker»á½ÓÊÕµ½ÕâЩconsumeỊ̈߳¬×èÈûÔÚÕâÀÓÐmessageÀ´ÁË¾Í»á½øÐÐÏû·Ñ£¬Ã»ÓÐÏûÏ¢¾Í»á×èÈûÔÚÕâÀï¡£¾ßÌåÏû·ÑµÄÂß¼Ò²¾ÍÊÇ´¦ÀíÕâЩconsumerÏ̶߳¼ÊÇAMQ
BrokerÄÇÃæ´¦Àí¡£
kafkaÊÇmessage¶¼´æÔÚpartitionϵÄsegmentÎļþÀïÃæ£¬ÓÐoffsiteÆ«ÒÆÁ¿È¥¼Ç¼ÄÇÌõÏû·ÑÁË£¬ÄÄÌõûÏû·Ñ¡£Ä³¸öconsumer
groupÏÂconsumerÏß³ÌÏû·ÑÍê¾Í»á£¬Õâ¸öconsumer group ϵÄÕâ¸öconsumer¶ÔÓ¦Õâ¸öpartitionµÄoffset+1£¬kafka²¢²»»áɾ³ýÕâÌõÒѾ±»Ïû·ÑµÄmessage¡£ÆäËûµÄconsumer
groupÒ²¿ÉÒÔÔÙ´ÎÏû·ÑÕâ¸ömessage¡£ÔÚhigh level apiÖÐoffset»á×Ô¶¯»òÊÖ¶¯µÄÌá½»µ½zookeeperÉÏ(Èç¹ûÊÇ×Ô¶¯Ìá½»¾ÍÓпÉÄÜ´¦Àíʧ°Ü»ò»¹Ã»´¦ÀíÍê¾ÍÌá½»offset+1ÁË£¬ÈÝÒ׳öÏÖÏ´ÎÔÙÆô¶¯consumer
groupµÄʱºòÕâÌõmessage¾Í±»Â©ÁË)£¬Ò²¿ÉÒÔʹÓÃlow level api£¬ÄÇô¾ÍÊÇconsumer³ÌÐòÖÐ×Ô¼ºÎ¬»¤offset+1µÄÂß¼¡£kafkaÖеÄmessage»á¶¨ÆÚɾ³ý¡£
(3)KafkaÓÐconsumer groupµÄ¸ÅÄAMQûÓС£
Ò»¸öconsumer groupÏÂÓжà¸öconsumer£¬Ã¿¸öconsumer¶¼ÊÇÒ»¸öỊ̈߳¬consumer
groupÊÇÒ»¸öÏß³Ì×顣ÿ¸öÏß³Ì×éconsumer groupÖ®¼ä»¥Ïà¶ÀÁ¢¡£Í¬Ò»¸öpartitionÖеÄÒ»¸ömessageÖ»Äܱ»Ò»¸öconsumer
groupϵÄÒ»¸öconsumerÏß³ÌÏû·Ñ£¬ÒòΪÏû·ÑÍêÁËÕâ¸öconsumer groupϵÄÕâ¸öconsumer¶ÔÓ¦µÄÕâ¸öpartitionµÄoffset¾Í+1ÁË£¬Õâ¸öconsumer
groupÏÂµÄÆäËûconsumer»¹ÊÇÕâ¸öconsumer¶¼²»ÄÜÔÚÏû·ÑÁË¡£ µ«ÊÇÁíÍâÒ»¸öconsumer
groupÊÇÍêÈ«¶ÀÁ¢µÄ£¬¿ÉÒÔÉèÖÃÒ»¸öfromµÄoffsetλÖã¬ÖØÐÂÏû·ÑÕâ¸öpartition¡£
5.2 ¹ØÓÚ´æ´¢½á¹¹
ActiveMQµÄÏûÏ¢³Ö¾Ã»¯»úÖÆÓÐJDBC£¬AMQ£¬KahaDBºÍLevelDB
KafkaÊÇÎļþ´æ´¢£¬Ã¿¸ötopicÓжà¸öpartition£¬Ã¿¸öpartitionÓжà¸öreplica¸±±¾(ÿ¸öpartitionºÍreplica¶¼ÊǾùÔÈ·ÖÅäÔÚ²»Í¬µÄkafka
brokerÉϵÄ)¡£Ã¿¸öpartitionÓɶà¸ösegmentÎļþ×é³É¡£ÕâЩÎļþÊÇ˳Ðò´æ´¢µÄ¡£Òò´Ë¶ÁÈ¡ºÍдÈë¶¼ÊÇ˳ÐòµÄ£¬Òò´Ë£¬ËٶȺܿ죬ʡȥÁË´ÅÅÌѰַµÄʱ¼ä¡£
ºÜ¶àϵͳ¡¢×é¼þΪÁËÌáÉýЧÂÊÒ»°ãºÞ²»µÃ°ÑËùÓÐÊý¾Ý¶¼ÈÓµ½ÄÚ´æÀȻºó¶¨ÆÚflushµ½´ÅÅÌÉÏ;¶øKafka¾ö¶¨Ö±½ÓʹÓÃÒ³Ãæ»º´æ;µ«ÊÇËæ»úдÈëµÄЧÂʺÜÂý£¬ÎªÁËά»¤±Ë´ËµÄ¹ØÏµË³Ðò»¹ÐèÒª¶îÍâµÄ²Ù×÷ºÍ´æ´¢£¬¶øÏßÐÔµÄ˳ÐòдÈë¿ÉÒÔ±ÜÃâ´ÅÅÌѰַʱ¼ä£¬Êµ¼ÊÉÏ£¬ÏßÐÔдÈë(linear
write)µÄËÙ¶È´óÔ¼ÊÇ300MB/Ã룬µ«Ë漴дÈëÈ´Ö»ÓÐ50k/Ã룬ÆäÖеIJî±ð½Ó½ü10000±¶¡£ÕâÑù£¬KafkaÒÔÒ³Ãæ»º´æÎªÖмäµÄÉè¼ÆÔÚ±£Ö¤Ð§ÂʵÄͬʱ»¹ÌṩÁËÏûÏ¢µÄ³Ö¾Ã»¯£¬Ã¿¸öconsumer×Ô¼ºÎ¬»¤µ±Ç°¶ÁÈ¡Êý¾ÝµÄoffset(Ò²¿ÉίÍиøzookeeper)£¬ÒÔ´Ë¿Éͬʱ֧³ÖÔÚÏߺÍÀëÏßµÄÏû·Ñ¡£
5.3 ¹ØÓÚʹÓó¡¾°ÓëÍÌÍÂÁ¿
ActiveMQÓÃÓÚÆóÒµÏûÏ¢Öмä¼þ£¬Ê¹µÃÒµÎñÂß¼ºÍǰ¶Ë´¦ÀíÂß¼½âñî¡£AMQµÄÍÌÍÂÁ¿²»´ó£¬zuoraµÄAMQ¾ÍÊÇÓÃ×÷jmsÀ´Ê¹Óá£AMQÍÌÍÂÁ¿²»¹»£¬²¢Çҳ־û¯messageÊý¾Ýͨ¹ýjdbc´æÔÚmysql£¬Ð´ÈëºÍ¶ÁÈ¡messageÐÔÄÜÌ«µÍ¡£¶øKafkaµÄÍÌÍÂÁ¿·Ç³£´ó¡£
5.4 push/pull Ä£ÐÍ
¶ÔÓÚÏû·ÑÕß¶øÑÔÓÐÁ½ÖÖ·½Ê½´ÓÏûÏ¢Öмä¼þ»ñÈ¡ÏûÏ¢£º
¢ÙPush·½Ê½£ºÓÉÏûÏ¢Öмä¼þÖ÷¶¯µØ½«ÏûÏ¢ÍÆË͸øÏû·ÑÕߣ¬²ÉÓÃPush·½Ê½£¬¿ÉÒÔ¾¡¿ÉÄÜ¿ìµØ½«ÏûÏ¢·¢Ë͸øÏû·ÑÕß;¢ÚPull·½Ê½£ºÓÉÏû·ÑÕßÖ÷¶¯ÏòÏûÏ¢Öмä¼þÀÈ¡ÏûÏ¢£¬»áÔö¼ÓÏûÏ¢µÄÑÓ³Ù£¬¼´ÏûÏ¢µ½´ïÏû·ÑÕßµÄʱ¼äÓе㳤
µ«ÊÇ£¬Push·½Ê½»áÓÐÒ»¸ö»µ´¦£ºÈç¹ûÏû·ÑÕߵĴ¦ÀíÏûÏ¢µÄÄÜÁ¦ºÜÈõ(Ò»ÌõÏûÏ¢ÐèÒªºÜ³¤µÄʱ¼ä´¦Àí)£¬¶øÏûÏ¢Öмä¼þ²»¶ÏµØÏòÏû·ÑÕßPushÏûÏ¢£¬Ïû·ÑÕߵĻº³åÇø¿ÉÄÜ»áÒç³ö¡£
AMQµÄPushÏû·Ñ
ActiveMQʹÓÃPUSHÄ£ÐÍ£¬ ¶ÔÓÚPUSH£¬brokerºÜÄÑ¿ØÖÆÊý¾Ý·¢Ë͸ø²»Í¬Ïû·ÑÕßµÄËÙ¶È¡£AMQ
Broker½«messageÍÆË͸ø¶ÔÓ¦µÄBET consumer¡£ActiveMQÓÃprefetch
limit ¹æ¶¨ÁËÒ»´Î¿ÉÒÔÏòÏû·ÑÕßPush(ÍÆËÍ)¶àÉÙÌõÏûÏ¢¡£µ±ÍÆËÍÏûÏ¢µÄÊýÁ¿µ½´ïÁËperfetch
limit¹æ¶¨µÄÊýֵʱ£¬Ïû·ÑÕß»¹Ã»ÓÐÏòÏûÏ¢Öмä¼þ·µ»ØACK£¬ÏûÏ¢Öмä¼þ½«²»ÔÙ¼ÌÐøÏòÏû·ÑÕßÍÆËÍÏûÏ¢¡£
AMQµÄPullÏû·Ñ
ActiveMQ prefetch limit ÉèÖóÉ0Òâζ×ÅʲôÒâζ×Å´Ëʱ£¬Ïû·ÑÕßÈ¥ÂÖѯÏûÏ¢Öмä¼þ»ñÈ¡ÏûÏ¢¡£²»ÔÙÊÇPush·½Ê½ÁË£¬¶øÊÇPull·½Ê½ÁË¡£¼´Ïû·ÑÕßÖ÷¶¯È¥ÏûÏ¢Öмä¼þÀÈ¡ÏûÏ¢¡£
ÄÇô£¬ActiveMQÖÐÈçºÎ²ÉÓÃPush·½Ê½»òÕßPull·½Ê½ÄØ´ÓÊÇ·ñ×èÈûÀ´¿´£¬Ïû·ÑÕßÓÐÁ½ÖÖ·½Ê½»ñÈ¡ÏûÏ¢¡£Í¬²½·½Ê½ºÍÒì²½·½Ê½¡£
ͬ²½·½Ê½Ê¹ÓõÄÊÇActiveMQMessageConsumerµÄreceive()·½·¨¡£¶øÒì²½·½Ê½ÔòÊDzÉÓÃÏû·ÑÕßʵÏÖMessageListener½Ó¿Ú£¬¼àÌýÏûÏ¢¡£Ê¹ÓÃͬ²½·½Ê½receive()·½·¨»ñÈ¡ÏûϢʱ£¬prefetch
limit¼´¿ÉÒÔÉèÖÃΪ0£¬Ò²¿ÉÒÔÉèÖÃΪ´óÓÚ0¡£
prefetch limitΪÁã Òâζ×Å£º¡°receive()·½·¨½«»áÊ×ÏÈ·¢ËÍÒ»¸öPULLÖ¸Áî²¢×èÈû£¬Ö±µ½broker¶Ë·µ»ØÏûϢΪֹ£¬ÕâÒ²Òâζ×ÅÏûÏ¢Ö»ÄÜÖð¸ö»ñÈ¡(ÀàËÆÓÚRequest<->Response)¡±¡£
prefetch limit ´óÓÚÁã Òâζ×Å£º¡°broker¶Ë½«»áÅúÁ¿push¸øclient Ò»¶¨ÊýÁ¿µÄÏûÏ¢(<=
prefetch)£¬client¶Ë»á°ÑÕâЩÏûÏ¢(unconsumedMessage)·ÅÈëµ½±¾µØµÄ¶ÓÁÐÖУ¬Ö»Òª´Ë¶ÓÁÐÓÐÏûÏ¢£¬ÄÇôreceive·½·¨½«»áÁ¢¼´·µ»Ø£¬µ±Ò»¶¨Á¿µÄÏûÏ¢ACKÖ®ºó£¬broker¶Ë»á¼ÌÐøÅúÁ¿pushÏûÏ¢¸øclient¶Ë¡£¡±
µ±Ê¹ÓÃMessageListenerÒì²½»ñÈ¡ÏûϢʱ£¬prefetch limit±ØÐë´óÓÚÁãÁË¡£ÒòΪ£¬prefetch
limit µÈÓÚÁã Òâζ×ÅÏûÏ¢Öмä¼þ²»»áÖ÷¶¯¸øÏû·ÑÕßPushÏûÏ¢£¬¶ø´ËʱÏû·ÑÕßÓÖÓÃMessageListener±»¶¯»ñÈ¡ÏûÏ¢(²»»áÖ÷¶¯È¥ÂÖѯÏûÏ¢)¡£Õâ¶þÕßÊÇì¶ÜµÄ¡£
KafkaÖ»ÓÐPullÏû·Ñ·½Ê½
KafkaʹÓÃPULLÄ£ÐÍ£¬PULL¿ÉÒÔÓÉÏû·ÑÕß×Ô¼º¿ØÖÆ£¬µ«ÊÇPULLÄ£ÐÍ¿ÉÄÜÔì³ÉÏû·ÑÕßÔÚûÓÐÏûÏ¢µÄÇé¿öÏÂäµÈ£¬ÕâÖÖÇé¿öÏ¿ÉÒÔͨ¹ýlong
polling»úÖÆ»º½â£¬¶ø¶ÔÓÚ¼¸ºõÿʱÿ¿Ì¶¼ÓÐÏûÏ¢´«µÝµÄÁ÷ʽϵͳ£¬ÕâÖÖÓ°Ïì¿ÉÒÔºöÂÔ¡£Kafka µÄ
consumer ÊÇÒÔpullµÄÐÎʽ»ñÈ¡ÏûÏ¢Êý¾ÝµÄ¡£ pruducer pushÏûÏ¢µ½kafka cluster
£¬consumer´Ó¼¯ÈºÖÐpullÏûÏ¢¡£
|