±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ±êµã·û
,½²½âÁËKafKaµÄÌØµã£¬¼Ü¹¹£¬¼°ÏûÏ¢·¢Ë͵ÄÁ÷³Ì¡£Í¨¹ýKafKaµÄÉè¼Æ¸ü¼ÓÈ«ÃæµÄÐðÊö¡£
|
|
KafkaÊÇ·Ö²¼Ê½·¢²¼-¶©ÔÄÏûϢϵͳ¡£Ëü×î³õÓÉLinkedIn¹«Ë¾¿ª·¢£¬Ö®ºó³ÉΪApacheÏîÄ¿µÄÒ»²¿·Ö¡£KafkaÊÇÒ»¸ö·Ö²¼Ê½µÄ£¬¿É»®·ÖµÄ£¬ÈßÓ౸·ÝµÄ³Ö¾ÃÐÔµÄÈÕÖ¾·þÎñ¡£ËüÖ÷ÒªÓÃÓÚ´¦Àí»îÔ¾µÄÁ÷ʽÊý¾Ý¡£
ÔÚ´óÊý¾ÝϵͳÖУ¬³£³£»áÅöµ½Ò»¸öÎÊÌ⣬Õû¸ö´óÊý¾ÝÊÇÓɸ÷¸ö×Óϵͳ×é³É£¬Êý¾ÝÐèÒªÔÚ¸÷¸ö×ÓϵͳÖиßÐÔÄÜ£¬µÍÑӳٵIJ»Í£Á÷ת¡£´«Í³µÄÆóÒµÏûϢϵͳ²¢²»ÊǷdz£Êʺϴó¹æÄ£µÄÊý¾Ý´¦Àí¡£ÎªÁËÒÑÔÚͬʱ¸ã¶¨ÔÚÏßÓ¦Óã¨ÏûÏ¢£©ºÍÀëÏßÓ¦Óã¨Êý¾ÝÎļþ£¬ÈÕÖ¾£©Kafka¾Í³öÏÖÁË¡£Kafka¿ÉÒÔÆðµ½Á½¸ö×÷Óãº
½µµÍϵͳ×éÍø¸´ÔÓ¶È¡£
½µµÍ±à³Ì¸´ÔÓ¶È£¬¸÷¸ö×Óϵͳ²»ÔÚÊÇÏ໥ÐÉ̽ӿڣ¬¸÷¸ö×ÓϵͳÀàËÆ²å¿Ú²åÔÚ²å×ùÉÏ£¬Kafka³Ðµ£¸ßËÙÊý¾Ý×ÜÏßµÄ×÷Óá£
KafkaÖ÷ÒªÌØµã£º
ͬʱΪ·¢²¼ºÍ¶©ÔÄÌṩ¸ßÍÌÍÂÁ¿¡£¾ÝÁ˽⣬KafkaÿÃë¿ÉÒÔÉú²úÔ¼25ÍòÏûÏ¢£¨50 MB£©£¬Ã¿Ãë´¦Àí55ÍòÏûÏ¢£¨110
MB£©¡£
¿É½øÐг־û¯²Ù×÷¡£½«ÏûÏ¢³Ö¾Ã»¯µ½´ÅÅÌ£¬Òò´Ë¿ÉÓÃÓÚÅúÁ¿Ïû·Ñ£¬ÀýÈçETL£¬ÒÔ¼°ÊµÊ±Ó¦ÓóÌÐò¡£Í¨¹ý½«Êý¾Ý³Ö¾Ã»¯µ½Ó²ÅÌÒÔ¼°replication·ÀÖ¹Êý¾Ý¶ªÊ§¡£
·Ö²¼Ê½ÏµÍ³£¬Ò×ÓÚÏòÍâÀ©Õ¹¡£ËùÓеÄproducer¡¢brokerºÍconsumer¶¼»áÓжà¸ö£¬¾ùΪ·Ö²¼Ê½µÄ¡£ÎÞÐèÍ£»ú¼´¿ÉÀ©Õ¹»úÆ÷¡£
ÏûÏ¢±»´¦ÀíµÄ״̬ÊÇÔÚconsumer¶Ëά»¤£¬¶ø²»ÊÇÓÉserver¶Ëά»¤¡£µ±Ê§°ÜʱÄÜ×Ô¶¯Æ½ºâ¡£
Ö§³ÖonlineºÍofflineµÄ³¡¾°¡£
KafkaµÄ¼Ü¹¹£º

KafkaµÄÕûÌå¼Ü¹¹·Ç³£¼òµ¥£¬ÊÇÏÔʽ·Ö²¼Ê½¼Ü¹¹£¬producer¡¢broker£¨kafka£©ºÍconsumer¶¼¿ÉÒÔÓжà¸ö¡£Producer£¬consumerʵÏÖKafka×¢²áµÄ½Ó¿Ú£¬Êý¾Ý´Óproducer·¢Ë͵½broker£¬broker³Ðµ£Ò»¸öÖм仺´æºÍ·Ö·¢µÄ×÷Óá£broker·Ö·¢×¢²áµ½ÏµÍ³ÖеÄconsumer¡£brokerµÄ×÷ÓÃÀàËÆÓÚ»º´æ£¬¼´»îÔ¾µÄÊý¾ÝºÍÀëÏß´¦Àíϵͳ֮¼äµÄ»º´æ¡£¿Í»§¶ËºÍ·þÎñÆ÷¶ËµÄͨÐÅ£¬ÊÇ»ùÓÚ¼òµ¥£¬¸ßÐÔÄÜ£¬ÇÒÓë±à³ÌÓïÑÔÎ޹صÄTCPÐÒé¡£¼¸¸ö»ù±¾¸ÅÄ
Topic£ºÌØÖ¸Kafka´¦ÀíµÄÏûÏ¢Ô´£¨feeds of messages£©µÄ²»Í¬·ÖÀà¡£
Partition£ºTopicÎïÀíÉϵķÖ×飬һ¸ötopic¿ÉÒÔ·ÖΪ¶à¸öpartition£¬Ã¿¸öpartitionÊÇÒ»¸öÓÐÐòµÄ¶ÓÁС£partitionÖеÄÿÌõÏûÏ¢¶¼»á±»·ÖÅäÒ»¸öÓÐÐòµÄid£¨offset£©¡£
Message£ºÏûÏ¢£¬ÊÇͨÐŵĻù±¾µ¥Î»£¬Ã¿¸öproducer¿ÉÒÔÏòÒ»¸ötopic£¨Ö÷Ì⣩·¢²¼Ò»Ð©ÏûÏ¢¡£
Producers£ºÏûÏ¢ºÍÊý¾ÝÉú²úÕߣ¬ÏòKafkaµÄÒ»¸ötopic·¢²¼ÏûÏ¢µÄ¹ý³Ì½Ð×öproducers¡£
Consumers£ºÏûÏ¢ºÍÊý¾ÝÏû·ÑÕߣ¬¶©ÔÄtopics²¢´¦ÀíÆä·¢²¼µÄÏûÏ¢µÄ¹ý³Ì½Ð×öconsumers¡£
Broker£º»º´æ´úÀí£¬Kafa¼¯ÈºÖеÄһ̨»ò¶ą̀·þÎñÆ÷ͳ³ÆÎªbroker¡£
ÏûÏ¢·¢Ë͵ÄÁ÷³Ì£º

Producer¸ù¾ÝÖ¸¶¨µÄpartition·½·¨£¨round-robin¡¢hashµÈ£©£¬½«ÏûÏ¢·¢²¼µ½Ö¸¶¨topicµÄpartitionÀïÃæ
kafka¼¯Èº½ÓÊÕµ½Producer·¢¹ýÀ´µÄÏûÏ¢ºó£¬½«Æä³Ö¾Ã»¯µ½Ó²ÅÌ£¬²¢±£ÁôÏûÏ¢Ö¸¶¨Ê±³¤£¨¿ÉÅäÖã©£¬¶ø²»¹Ø×¢ÏûÏ¢ÊÇ·ñ±»Ïû·Ñ¡£
Consumer´Ókafka¼¯ÈºpullÊý¾Ý£¬²¢¿ØÖÆ»ñÈ¡ÏûÏ¢µÄoffset
KafkaµÄÉè¼Æ£º
1¡¢ÍÌÍÂÁ¿
¸ßÍÌÍÂÊÇkafkaÐèҪʵÏֵĺËÐÄÄ¿±êÖ®Ò»£¬Îª´Ëkafka×öÁËÒÔÏÂһЩÉè¼Æ£º
Êý¾Ý´ÅÅ̳־û¯£ºÏûÏ¢²»ÔÚÄÚ´æÖÐcache£¬Ö±½ÓдÈëµ½´ÅÅÌ£¬³ä·ÖÀûÓôÅÅ̵Ä˳Ðò¶ÁдÐÔÄÜ
zero-copy£º¼õÉÙIO²Ù×÷²½Öè
Êý¾ÝÅúÁ¿·¢ËÍ
Êý¾ÝѹËõ
Topic»®·ÖΪ¶à¸öpartition£¬Ìá¸ßparallelism
¸ºÔؾùºâ
producer¸ù¾ÝÓû§Ö¸¶¨µÄËã·¨£¬½«ÏûÏ¢·¢Ë͵½Ö¸¶¨µÄpartition
´æÔÚ¶à¸öpartiiton£¬Ã¿¸öpartitionÓÐ×Ô¼ºµÄreplica£¬Ã¿¸öreplica·Ö²¼ÔÚ²»Í¬µÄBroker½ÚµãÉÏ
¶à¸öpartitionÐèҪѡȡ³ölead partition£¬lead partition¸ºÔð¶Áд£¬²¢ÓÉzookeeper¸ºÔðfail
over
ͨ¹ýzookeeper¹ÜÀíbrokerÓëconsumerµÄ¶¯Ì¬¼ÓÈëÓëÀ뿪
Àȡϵͳ
ÓÉÓÚkafka broker»á³Ö¾Ã»¯Êý¾Ý£¬brokerûÓÐÄÚ´æÑ¹Á¦£¬Òò´Ë£¬consumer·Ç³£ÊʺϲÉÈ¡pullµÄ·½Ê½Ïû·ÑÊý¾Ý£¬¾ßÓÐÒÔϼ¸µãºÃ´¦£º
¼ò»¯kafkaÉè¼Æ
consumer¸ù¾ÝÏû·ÑÄÜÁ¦×ÔÖ÷¿ØÖÆÏûÏ¢ÀÈ¡ËÙ¶È
consumer¸ù¾Ý×ÔÉíÇé¿ö×ÔÖ÷Ñ¡ÔñÏû·Ñģʽ£¬ÀýÈçÅúÁ¿£¬Öظ´Ïû·Ñ£¬´Óβ¶Ë¿ªÊ¼Ïû·ÑµÈ
¿ÉÀ©Õ¹ÐÔ
µ±ÐèÒªÔö¼Óbroker½áµãʱ£¬ÐÂÔöµÄbroker»áÏòzookeeper×¢²á£¬¶øproducer¼°consumer»á¸ù¾Ý×¢²áÔÚzookeeperÉϵÄwatcher¸ÐÖªÕâЩ±ä»¯£¬²¢¼°Ê±×÷³öµ÷Õû¡£
KaykaµÄÓ¦Óó¡¾°£º
1.ÏûÏ¢¶ÓÁÐ
±ÈÆð´ó¶àÊýµÄÏûϢϵͳÀ´Ëµ£¬KafkaÓиüºÃµÄÍÌÍÂÁ¿£¬ÄÚÖõķÖÇø£¬ÈßÓ༰ÈÝ´íÐÔ£¬ÕâÈÃKafka³ÉΪÁËÒ»¸öºÜºÃµÄ´ó¹æÄ£ÏûÏ¢´¦ÀíÓ¦ÓõĽâ¾ö·½°¸¡£ÏûϢϵͳһ°ãÍÌÍÂÁ¿Ïà¶Ô½ÏµÍ£¬µ«ÊÇÐèÒª¸üСµÄ¶Ëµ½¶ËÑÓʱ£¬²¢³¢³¢ÒÀÀµÓÚKafkaÌṩµÄÇ¿´óµÄ³Ö¾ÃÐÔ±£ÕÏ¡£ÔÚÕâ¸öÁìÓò£¬Kafka×ãÒÔæÇÃÀ´«Í³ÏûϢϵͳ£¬ÈçActiveMR»òRabbitMQ¡£
2.ÐÐΪ¸ú×Ù
KafkaµÄÁíÒ»¸öÓ¦Óó¡¾°ÊǸú×ÙÓû§ä¯ÀÀÒ³Ãæ¡¢ËÑË÷¼°ÆäËûÐÐΪ£¬ÒÔ·¢²¼-¶©ÔĵÄģʽʵʱ¼Ç¼µ½¶ÔÓ¦µÄtopicÀï¡£ÄÇôÕâЩ½á¹û±»¶©ÔÄÕßÄõ½ºó£¬¾Í¿ÉÒÔ×ö½øÒ»²½µÄʵʱ´¦Àí£¬»òʵʱ¼à¿Ø£¬»ò·Åµ½hadoop/ÀëÏßÊý¾Ý²Ö¿âÀï´¦Àí¡£
3.ÔªÐÅÏ¢¼à¿Ø
×÷Ϊ²Ù×÷¼Ç¼µÄ¼à¿ØÄ£¿éÀ´Ê¹Ó㬼´»ã¼¯¼Ç¼һЩ²Ù×÷ÐÅÏ¢£¬¿ÉÒÔÀí½âΪÔËάÐÔÖʵÄÊý¾Ý¼à¿Ø°É¡£
4.ÈÕÖ¾ÊÕ¼¯
ÈÕÖ¾ÊÕ¼¯·½Ã棬Æäʵ¿ªÔ´²úÆ·Óкܶ࣬°üÀ¨Scribe¡¢Apache Flume¡£ºÜ¶àÈËʹÓÃKafka´úÌæÈÕÖ¾¾ÛºÏ£¨log
aggregation£©¡£ÈÕÖ¾¾ÛºÏÒ»°ãÀ´ËµÊÇ´Ó·þÎñÆ÷ÉÏÊÕ¼¯ÈÕÖ¾Îļþ£¬È»ºó·Åµ½Ò»¸ö¼¯ÖеÄλÖã¨Îļþ·þÎñÆ÷»òHDFS£©½øÐд¦Àí¡£È»¶øKafkaºöÂÔµôÎļþµÄϸ½Ú£¬½«Æä¸üÇåÎúµØ³éÏó³ÉÒ»¸ö¸öÈÕÖ¾»òʼþµÄÏûÏ¢Á÷¡£Õâ¾ÍÈÃKafka´¦Àí¹ý³ÌÑÓ³Ù¸üµÍ£¬¸üÈÝÒ×Ö§³Ö¶àÊý¾ÝÔ´ºÍ·Ö²¼Ê½Êý¾Ý´¦Àí¡£±ÈÆðÒÔÈÕ־ΪÖÐÐĵÄϵͳ±ÈÈçScribe»òÕßFlumeÀ´Ëµ£¬KafkaÌṩͬÑù¸ßЧµÄÐÔÄܺÍÒòΪ¸´ÖƵ¼Öµĸü¸ßµÄÄÍÓÃÐÔ±£Ö¤£¬ÒÔ¼°¸üµÍµÄ¶Ëµ½¶ËÑÓ³Ù¡£
5.Á÷´¦Àí
Õâ¸ö³¡¾°¿ÉÄܱȽ϶࣬ҲºÜºÃÀí½â¡£±£´æÊÕ¼¯Á÷Êý¾Ý£¬ÒÔÌṩ֮ºó¶Ô½ÓµÄStorm»òÆäËûÁ÷ʽ¼ÆËã¿ò¼Ü½øÐд¦Àí¡£ºÜ¶àÓû§»á½«ÄÇЩ´ÓÔʼtopicÀ´µÄÊý¾Ý½øÐн׶ÎÐÔ´¦Àí£¬»ã×Ü£¬À©³ä»òÕßÒÔÆäËûµÄ·½Ê½×ª»»µ½ÐµÄtopicÏÂÔÙ¼ÌÐøºóÃæµÄ´¦Àí¡£ÀýÈçÒ»¸öÎÄÕÂÍÆ¼öµÄ´¦ÀíÁ÷³Ì£¬¿ÉÄÜÊÇÏÈ´ÓRSSÊý¾ÝÔ´ÖÐץȡÎÄÕµÄÄÚÈÝ£¬È»ºó½«Æä¶ªÈëÒ»¸ö½Ð×ö¡°ÎÄÕ¡±µÄtopicÖУ»ºóÐø²Ù×÷¿ÉÄÜÊÇÐèÒª¶ÔÕâ¸öÄÚÈݽøÐÐÇåÀí£¬±ÈÈç»Ø¸´Õý³£Êý¾Ý»òÕßɾ³ýÖØ¸´Êý¾Ý£¬×îºóÔÙ½«ÄÚÈÝÆ¥ÅäµÄ½á¹û·µ»¹¸øÓû§¡£Õâ¾ÍÔÚÒ»¸ö¶ÀÁ¢µÄtopicÖ®Í⣬²úÉúÁËһϵÁеÄʵʱÊý¾Ý´¦ÀíµÄÁ÷³Ì¡£StromºÍSamzaÊǷdz£ÖøÃûµÄʵÏÖÕâÖÖÀàÐÍÊý¾Ýת»»µÄ¿ò¼Ü¡£
6.ʼþÔ´
ʼþÔ´ÊÇÒ»ÖÖÓ¦ÓóÌÐòÉè¼ÆµÄ·½Ê½£¬¸Ã·½Ê½µÄ×´Ì¬×ªÒÆ±»¼Ç¼Ϊ°´Ê±¼ä˳ÐòÅÅÐòµÄ¼Ç¼ÐòÁС£Kafka¿ÉÒÔ´æ´¢´óÁ¿µÄÈÕÖ¾Êý¾Ý£¬ÕâʹµÃËü³ÉΪһ¸ö¶ÔÕâÖÖ·½Ê½µÄÓ¦ÓÃÀ´Ëµ¾ø¼ÑµÄºǫ́¡£±ÈÈ綯̬»ã×Ü£¨News
feed£©¡£
7.³Ö¾ÃÐÔÈÕÖ¾£¨commit log£©
Kafka¿ÉÒÔΪһÖÖÍⲿµÄ³Ö¾ÃÐÔÈÕÖ¾µÄ·Ö²¼Ê½ÏµÍ³Ìṩ·þÎñ¡£ÕâÖÖÈÕÖ¾¿ÉÒÔÔÚ½Úµã¼ä±¸·ÝÊý¾Ý£¬²¢Îª¹ÊÕϽڵãÊý¾Ý»Ø¸´ÌṩһÖÖÖØÐÂͬ²½µÄ»úÖÆ¡£KafkaÖÐÈÕ־ѹËõ¹¦ÄÜΪÕâÖÖÓ÷¨ÌṩÁËÌõ¼þ¡£ÔÚÕâÖÖÓ÷¨ÖУ¬KafkaÀàËÆÓÚApache
BookKeeperÏîÄ¿¡£
KaykaµÄÉè¼ÆÒªµã£º
1¡¢Ö±½ÓʹÓÃlinux ÎļþϵͳµÄcache£¬À´¸ßЧ»º´æÊý¾Ý¡£
2¡¢²ÉÓÃlinux Zero-CopyÌá¸ß·¢ËÍÐÔÄÜ¡£´«Í³µÄÊý¾Ý·¢ËÍÐèÒª·¢ËÍ4´ÎÉÏÏÂÎÄÇл»£¬²ÉÓÃsendfileϵͳµ÷ÓÃÖ®ºó£¬Êý¾ÝÖ±½ÓÔÚÄÚºË̬½»»»£¬ÏµÍ³ÉÏÏÂÎÄÇл»¼õÉÙΪ2´Î¡£¸ù¾Ý²âÊÔ½á¹û£¬¿ÉÒÔÌá¸ß60%µÄÊý¾Ý·¢ËÍÐÔÄÜ¡£Zero-CopyÏêϸµÄ¼¼Êõϸ½Ú¿ÉÒԲο¼£ºhttps://www.ibm.com/developerworks/linux/library/j-zerocopy/
3¡¢Êý¾ÝÔÚ´ÅÅÌÉÏ´æÈ¡´ú¼ÛΪO(1)¡£kafkaÒÔtopicÀ´½øÐÐÏûÏ¢¹ÜÀí£¬Ã¿¸ötopic°üº¬¶à¸öpart£¨ition£©£¬Ã¿¸öpart¶ÔÓ¦Ò»¸öÂß¼log£¬Óжà¸ösegment×é³É¡£Ã¿¸ösegmentÖд洢¶àÌõÏûÏ¢£¨¼ûÏÂͼ£©£¬ÏûÏ¢idÓÉÆäÂ߼λÖþö¶¨£¬¼´´ÓÏûÏ¢id¿ÉÖ±½Ó¶¨Î»µ½ÏûÏ¢µÄ´æ´¢Î»Ö㬱ÜÃâidµ½Î»ÖõĶîÍâÓ³É䡣ÿ¸öpartÔÚÄÚ´æÖжÔÓ¦Ò»¸öindex£¬¼Ç¼ÿ¸ösegmentÖеĵÚÒ»ÌõÏûÏ¢Æ«ÒÆ¡£·¢²¼Õß·¢µ½Ä³¸ötopicµÄÏûÏ¢»á±»¾ùÔȵķֲ¼µ½¶à¸öpartÉÏ£¨Ëæ»ú»ò¸ù¾ÝÓû§Ö¸¶¨µÄ»Øµ÷º¯Êý½øÐзֲ¼£©£¬brokerÊÕµ½·¢²¼ÏûÏ¢Íù¶ÔÓ¦partµÄ×îºóÒ»¸ösegmentÉÏÌí¼Ó¸ÃÏûÏ¢£¬µ±Ä³¸ösegmentÉϵÄÏûÏ¢ÌõÊý´ïµ½ÅäÖÃÖµ»òÏûÏ¢·¢²¼Ê±¼ä³¬¹ýãÐֵʱ£¬segmentÉϵÄÏûÏ¢»á±»flushµ½´ÅÅÌ£¬Ö»ÓÐflushµ½´ÅÅÌÉϵÄÏûÏ¢¶©ÔÄÕß²ÅÄܶ©Ôĵ½£¬segment´ïµ½Ò»¶¨µÄ´óСºó½«²»»áÔÙÍù¸ÃsegmentдÊý¾Ý£¬broker»á´´½¨ÐµÄsegment¡£
4¡¢ÏÔʽ·Ö²¼Ê½£¬¼´ËùÓеÄproducer¡¢brokerºÍconsumer¶¼»áÓжà¸ö£¬¾ùΪ·Ö²¼Ê½µÄ¡£ProducerºÍbrokerÖ®¼äûÓиºÔؾùºâ»úÖÆ¡£brokerºÍconsumerÖ®¼äÀûÓÃzookeeper½øÐиºÔؾùºâ¡£ËùÓÐbrokerºÍconsumer¶¼»áÔÚzookeeperÖнøÐÐ×¢²á£¬ÇÒzookeeper»á±£´æËûÃǵÄһЩԪÊý¾ÝÐÅÏ¢¡£Èç¹ûij¸öbrokerºÍconsumer·¢ÉúÁ˱仯£¬ËùÓÐÆäËûµÄbrokerºÍconsumer¶¼»áµÃµ½Í¨Öª¡£
|