
ǰÑÔ
ÕâÊÇһƪѧϰ±Ê¼Ç¡£Ñ§Ï°µÄ²ÄÁÏÀ´×ÔJay KrepsµÄһƪ½²LogµÄ²©ÎÄ¡£ÔÎĺܳ¤£¬µ«ÊÇÎÒ¼á³Ö¿´ÍêÁË£¬ÊÕ»ñÆÄ¶à£¬Ò²ÉîÉîΪJay¸çµÄ¼¼ÊõÄÜÁ¦¡¢¼Ü¹¹ÄÜÁ¦ºÍ¶ÔÓÚ·Ö²¼Ê½ÏµÍ³µÄÀí½âÖ®Éî¿ÌËùÕÛ·þ¡£Í¬Ê±Ò²ÒòΪijЩÀí½âºÍJay¸ç¹ÛµãÎǺ϶øÂÔÕ´Õ´×Ôϲ¡£
Jay KrepsÊÇǰLinkedinµÄPrincipal Staff Engineer£¬ÏÖÈÎConfluent¹«Ë¾µÄÁªºÏ´´Ê¼È˺ÍCEO£¬KafkaºÍSamzaµÄÖ÷Òª×÷Õß¡£
Ëùν±Ê¼Ç£¬¾ÍÊÇ¿´ÁËÎÄÕ£¬Ìá±Ê¾Í¼Ç£¬ÒòΪJay¸ç±¾Éí±¾ÕÂ×éÖ¯µÄÌ«ºÃ£¬¶øÆä±¾ÉíµÄ¿ÆÑ§ËØÑø¼°ÕÜÑ§ËØÑøÒ²ºÜ¸ß£¬ËùÒÔ˽ÒÔΪ³ö²ÊµÄ¶«Î÷¾Í²»Ê¡ÂÔÁË¡£
Ò»¡¢×ÊÁÏÀ´Ô´
The Log: What every software engineer should know about real-time data¡¯s unifying abstraction
¶þ¡¢±Ê¼Ç
2.1 LogµÄ¼ÛÖµ
1) LogÊÇÈçÏÂϵͳµÄºËÐÄ£º
- ·Ö²¼Ê½Í¼Êý¾Ý¿â
- ·Ö²¼Ê½ËÑË÷ÒýÇæ
- Hadoop
- µÚÒ»´úºÍµÚ¶þ´úK-VÊý¾Ý¿â
2) Log¿ÉÄܸú¼ÆËã»úµÄÀúÊ·Ò»Ñù³¤£¬²¢ÇÒÊÇ·Ö²¼Ê½Êý¾ÝϵͳºÍʵʱ¼ÆËãϵͳµÄºËÐÄ¡£
3) LogµÄÃû×ֺࣺܶ
- Commit log
- Transaction log
- Write-ahead log
4) ²»Àí½âLog£¬Äã¾Í²»¿ÉÄܳä·ÖÀí½â
- Êý¾Ý¿â
- NoSQL´æ´¢
- K-V´æ´¢
- ¸´ÖÆ
- PaxosËã·¨
- Hadoop
- Version Control
- »òÕߣ¬ÈκÎÈí¼þϵͳ
2.2 ʲôÊÇLog£¿
2.2.1 ¸ÅÊö

- ¼Ç¼»á¸½¼Óµ½logµÄβ²¿¡£
- ´Ó×óµ½ÓÒ¶ÁÈ¡¼Ç¼¡£
- ÿ¸öentry¶¼ÓÐΨһÇÒÓÐÐòµÄlog entry ÐòºÅ¡£
¼Ç¼µÄ˳Ðò¶¨ÒåÁËÕâÑùµÄÒ»¸ö¸ÅÄʱ¼ä¡£
ÒòΪԽ¿¿×óµÄ¼Ç¼ԽÔç¡£
EntryµÄÐòºÅ¿ÉÒÔµ±×÷Ò»ÖÖʱ¼ä´Á£¬½«¼Ç¼µÄ˳Ðòµ±×÷ʱ¼äÕâÒ»¸ÅÄî¿´ÆðÀ´ºÜÆæ¹Ö£¬µ«ÊǺܿìÄã¾Í»á·¢ÏÖ£¬ÕâÑù×ö£º¿ÉÒÔ·½±ãµØ½«¡°Ê±¼ä¡±ÓëÈÎÒ»ÌØ¶¨µÄÎïÀíʱÖÓ½âñî¡£
LogºÍ³£¼ûµÄÎļþ¡¢±í£¨table£©Ã»ÓÐÄÇô´óµÄ²î±ð¡£
- ÎļþÊÇÒ»×é×Ö½Ú
- ±íÊÇÒ»×é¼Ç¼
- Log¿ÉÒÔ˵ÊÇijÖÖ½«¼Ç¼°´Ê±¼äÅÅÐòµÄÎļþ»òÕß±í
ÕâÑù˵£¬¿ÉÄÜÄã»á¾õµÃlogÈç´Ë¼òµ¥£¬»¹ÓÐÌÖÂ۵ıØÒªÂð£¿
Æäʵ£¬logµÄºËÐÄÒâÒåÔÚÓÚ£º
Log¼Ç¼Á˺Îʱ·¢ÉúÁËʲô£¨they record what happened and when.£©¡£
¶øÕâÒ»Ìõ£¬Í¨³£ÊÇ·Ö²¼Ê½ÏµÍ³×î×î×îºËÐĵĶ«Î÷¡£
×¢Ò⣬ÕâÀïÓбØÒª³ÎÇ弸¸ö¸ÅÄ
- ±¾ÆªËùÌÖÂÛµÄLogºÍ³ÌÐòԱͨ³£½Ó´¥µÄÓ¦ÓÃÈÕÖ¾£¨application logs£©²»Í¬
- Ó¦ÓÃÈÕ־ͨ³£ÊÇÒ»Öַǽṹ»¯µÄ£¬¼Ç¼´íÎóÐÅÏ¢¡¢µ÷ÊÔÐÅÏ¢£¬ÓÃÓÚ×·×ÙÓ¦ÓõÄÔËÐе쬏øÈË¿´µÄÈÕÖ¾£¬±ÈÈçͨ¹ýlog4j»òÕß syslogÀ´Ð´Èë±¾µØÎļþµÄÈÕÖ¾¡£
- ¶ø±¾ÆªËùÌÖÂÛµÄlogÊÇͨ¹ý±à³Ì·½Ê½·ÃÎʵ쬲»ÊǸøÈË¿´µÄ£¬±ÈÈç¡°journal¡±¡¢¡°data logs¡±¡£
- Ó¦ÓÃÈÕÖ¾ÊDZ¾ÆªËùÌÖÂÛµÄlogµÄÒ»ÖÖÌØ»¯¡£
2.2.2 Êý¾Ý¿âÖеÄLogs
LogµÄÆðÔ´²»µÃ¶øÖª£¬¾ÍÏñ·¢Ã÷¶þ·Ö²éÕÒµÄÈË£¬ÄÑÒÔÒâʶµ½ÕâÖÖ·¢Ã÷ÊÇÒ»ÖÖ·¢Ã÷¡£
LogµÄ³öÏÖºÍIBMµÄSystem R Ò»ÑùÔç¡£
ÔÚÊý¾Ý¿âÖУ¬ÐèÒªÔÚÊý¾Ý¿â±ÀÀ£Ê±£¬±£³Ö¶àÖÖ¶àÑùµÄÊý¾Ý½á¹¹ºÍË÷Òý±£³Öͬ²½¡£
Ϊ±£Ö¤Ô×ÓÐԺͳ־ÃÐÔ£¬Êý¾Ý¿âÐèÒªÔÚ¶ÔÊý¾Ý½á¹¹ºÍË÷Òý½øÐÐÐÞ¸ÄÌύ֮ǰ£¬¼Ç¼ÆäÒªÐ޸ĵÄÄÚÈÝ¡£
ËùÒÔlog¼Ç¼Á˺Îʱ·¢ÉúÁËʲô£¬¶øÃ¿Ò»ÕűíºÍË÷Òý±¾Éí£¬¶¼ÊÇÕâÖÖÀúÊ·ÐÅÏ¢µÄÓ³Éä¡£
ÒòΪlogÊÇÁ¢¼´³Ö¾Ã»¯µÄ£¬ËùÒÔµ±crash·¢Éúʱ£¬Æä³ÉΪ»Ö¸´ÆäËü³Ö¾Ã»¯½á¹¹µÄ¿É¿¿À´Ô´¡£
Log´Ó±£Ö¤ACIDÌØÐÔµÄÒ»ÖÖʵÏÖ£¬·¢Õ¹³ÉÁËÒ»ÖÖÊý¾Ý¿âÖ®¼äÊý¾Ý¸´ÖƵÄÊֶΡ£
ºÜÏÔÈ»£¬Êý¾Ý¿âÖз¢ÉúµÄһϵÁеÄÊý¾Ý±ä¸ü£¬³ÉΪÊý¾Ý¿âÖ®¼ä ±£³Öͬ²½×îÐèÒªµÄÐÅÏ¢¡£
Oracle¡¢MySQL¡¢PostgreSQL£¬¶¼°üº¬ÁËlog´«ÊäÐÒ飬½«logµÄÒ»²¿·Ö·¢Ë͵½ÓÃÓÚ±£³Ö¸´ÖƵĴÓÊý¾Ý¿â£¨Slave£©¡£
OracleµÄXStreamsºÍGoldenState£¬½«logµ±×÷Ò»ÖÖͨÓõÄÊý¾Ý¶©ÔÄ»úÖÆ£¬ÒÔÌṩ¸ø·ÇOracleµÄÊý¾Ý¿â¶©ÔÄÊý¾Ý¡£
MySQLºÍPostgreSQLÒ²ÌṩÁËÀàËÆµÄ×é¼þ£¬ÕâЩ×é¼þÊÇÊý¾Ýϵͳ¼Ü¹¹µÄºËÐÄ¡£
ÃæÏò»úÆ÷µÄLog£¬²»½ö½ö¿É±»ÓÃÔÚÊý¾Ý¿âÖУ¬Ò²¿ÉÒÔÓÃÔÚ£º
- ÏûϢϵͳ
- Êý¾ÝÁ÷£¨data flow£©
- ʵʱ¼ÆËã
2.2.3 ·Ö²¼Ê½ÏµÍ³ÖеÄlogs
Log½â¾öÁËÁ½¸öºÜÖØÒªµÄ·Ö²¼Ê½Êý¾ÝϵͳÖеÄÎÊÌ⣺
1) ÓÐÐòµÄÊý¾Ý±ä»¯
2) Êý¾Ý·Ö²¼Ê½»¯
ËùνµÄ״̬»ú¸´ÖÆÔÀí£¨State Machine Replication Principle£©£º
Èç¹ûÁ½¸öÈ·¶¨µÄ´¦Àí¹ý³Ì£¬´ÓÏàͬµÄ״̬¿ªÊ¼£¬°´ÕÕÏàͬµÄ˳Ðò£¬½ÓÊÕÏàͬµÄÊäÈ룬ÄÇôËüÃǽ«»á²úÉúÏàͬµÄÊä³ö£¬²¢ÒÔ ÏàͬµÄ״̬½áÊø¡£
Ëùνȷ¶¨µÄ£¨deterministic£©£¬ÊÇÖ¸´¦Àí¹ý³ÌÊÇʱ¼äÎ޹ص쬯䴦Àí½á¹ûÒ಻ÊܶîÍâÊäÈëµÄÓ°Ïì¡£
¿ÉÒÔͨ¹ý·ÇÈ·¶¨µÄÀý×ÓÀ´Àí½â£º
- ¶àÏ̵߳ÄÖ´ÐÐ˳Ðò²»Í¬µ¼Ö²»Í¬µÄ½á¹û
- Ö´ÐÐgetTimeOfDay()·½·¨
- ÆäËüµÄ²»ÄÜÖØ¸´µÄ´¦Àí¹ý³Ì
Ëùν״̬£¬¿ÉÒÔÊÇ»úÆ÷ÉϵÄÈÎÒâÊý¾Ý£¬ÎÞÂÛÔÚ´¦Àí½áÊøºó£¬ÊÇÔÚ»úÆ÷µÄÄÚ´æÖл¹ÊÇ´ÅÅÌÉÏ¡£
ÏàͬµÄÊäÈë°´ÕÕÏàͬµÄ˳Ðò£¬²úÉúÏàͬµÄ½á¹û£¬ÕâÒ»µãÖµµÃÒýÆðÄãµÄ×¢Ò⣬ÕâÒ²ÊÇΪʲôlog»áÈç´ËÖØÒª£¬ÕâÊÇÒ»¸öÖ±¾õÐԵĸÅÄÈç¹ûÄ㽫ͬһ¸ölogÊäÈëÁ½¸öÈ·¶¨ÐԵijÌÐò£¬ËüÃǽ«²úÉúÏàͬµÄÊä³ö¡£
ÔÚ·Ö²¼Ê½ÏµÍ³µÄ¹¹½¨ÖУ¬Òâʶµ½ÕâÒ»µã£¬¿ÉÒÔʹµÃ£º
ÈÃËùÓеĻúÆ÷×öͬÑùµÄÊ£¬¹æÔ¼Îª£º
¹¹½¨·Ö²¼Ê½µÄ¡¢Âú×ãÒ»ÖÂÐÔµÄlogϵͳ£¬ÒÔΪËùÓд¦ÀíϵͳÌṩÊäÈë¡£
LogϵͳµÄ×÷Ó㬾ÍÊǽ«ËùÓеÄÊäÈëÁ÷Ö®ÉϵIJ»È·¶¨ÐÔÇýÉ¢£¬È·±£ËùÓеĴ¦ÀíÏàͬÊäÈëµÄ¸´Öƽڵ㱣³Öͬ²½¡£
ÕâÖÖ·½·¨µÄ×îÃîÖ®´¦ÔÚÓÚ£¬Äã¿ÉÒÔ½«Ë÷ÒýÈÕÖ¾µÄʱ¼ä´Á£¬×÷ΪËùÓи´ÖƽڵãµÄʱÖÓÀ´¶Ô´ý£º
ͨ¹ý½«¸´ÖƽڵãËù´¦Àí¹ýµÄlogÖÐ×î´óµÄʱ¼ä´Á£¬×÷Ϊ¸´ÖƽڵãµÄΨһID£¬ÕâÑù£¬Ê±¼ä´Á½áºÏlog£¬¾Í¿ÉÒÔΨһµØ±í´ï´Ë½ÚµãµÄÕû¸ö״̬¡£
Ó¦ÓÃÕâÖÖ·½·¨µÄ·½Ê½Ò²ºÜ¶à£º
- ÔÚlogÖмǼ¶ÔÒ»¸ö·þÎñµÄÇëÇó
- Ôڻظ´ÇëÇóµÄǰºó£¬¼Ç¼·þÎñ״̬µÄ±ä»¯
- »òÕߣ¬·þÎñËùÖ´ÐеÄһϵÁÐת»»ÃüÁµÈµÈ¡£
ÀíÂÛÉÏÀ´½²£¬ÎÒÃÇ¿ÉÒԼǼһϵÁеĻúÆ÷Ö¸Á»òÕßËùµ÷Ó÷½·¨µÄÃû³Æ¼°²ÎÊý£¬Ö»ÒªÊý¾Ý´¦Àí½ø³ÌµÄÐÐΪÏàͬ£¬ÕâЩ½ø³Ì¾Í¿ÉÒÔ±£Ö¤¿ç½ÚµãµÄÒ»ÖÂÐÔ¡£
³£Íæ¶ùÊý¾Ý¿âµÄÈË£¬»á½«Âß¼ÈÕÖ¾ºÍÎïÀíÈÕÖ¾Çø·Ö¶Ô´ý£º
- ÎïÀíÈÕÖ¾£º¼Ç¼ÁËËùÓеÄÐÐÄÚÈݵı仯¡£
- Âß¼ÈÕÖ¾£º²»ÊǼǼÄÚÈݵı仯£¬¶øÊÇInsert , update , deleteµÈµ¼ÖÂÐÐÄÚÈݱ仯µÄSQLÓï¾ä¡£
¶Ô·Ö²¼Ê½ÏµÍ³£¬Í¨³£ÓÐÁ½ÖÖ·½Ê½À´´¦Àí¸´ÖÆºÍÊý¾Ý´¦Àí£º
1£© State machine model£¨active ¨C active£©
2£© Primary-back model (active ¨C passive)
ÈçÏÂͼËùʾ£º

ΪÁËÀí½âÉÏÊöÁ½ÖÖ·½Ê½µÄ²»Í¬£¬À´¿´¸ö¼òµ¥µÄÀý×Ó£º
ÏÖÔÚ£¬¼¯ÈºÐèÒªÌṩһ¸ö¼òµ¥µÄ·þÎñ£¬À´×ö¼Ó·¨¡¢³Ë·¨µÈËãÊõÔËËã¡£³õʼ£¬Î¬»¤Ò»¸öÊý×Ö£¬±ÈÈç0¡£
- Active ¨C active £ºÔÚÈÕÖ¾¼Ç¼ÕâÑùµÄһЩ²Ù×÷£¬Èç¡°+1¡±¡¢¡°*2¡±µÈ£¬ÕâÑù£¬Ã¿¸ö¸´ÖƽڵãÐèÒªÖ´ÐÐÕâЩ²Ù×÷£¬ÒÔ±£Ö¤×îºóµÄÊý¾Ý״̬ÊÇÒ»Öµġ£
- Active ¨C passive£ºÒ»¸öµ¥¶ÀµÄmaster½Úµã£¬Ö´ÐС°+1¡±¡¢¡°*2¡±µÈ²Ù×÷£¬²¢ÇÒÔÚÈÕÖ¾ÖмǼ²Ù×÷µÄ½á¹û£¬Èç¡°1¡±¡¢¡°3¡±¡¢¡°6¡±µÈ¡£
ÉÏÃæµÄÀý×ÓÒ²½ÒʾÁË£¬ÎªÊ²Ã´Ë³ÐòÊǸ´ÖƽڵãÖ®¼ä±£³ÖÒ»ÖÂÐԵĹؼüÒòËØ£¬Èç¹û´òÂÒÁËÕâЩ²Ù×÷µÄ˳Ðò£¬¾Í»áµÃµ½²»Í¬µÄÔËËã½á¹û¡£
·Ö²¼Ê½log£¬¿ÉÒÔµ±×öijЩһÖÂÐÔËã·¨µÄÊý¾Ý½á¹¹£º
- Paxos
- ZAB
- RAFT
- Viewstamped Replication
Ò»Ìõlog£¬±íÕ÷ÁËһϵÁеĹØÓÚÏÂÒ»¸öÖµÊÇʲôµÄ¾ö¶¨¡£
2.2.4 Changelog
´ÓÊý¾Ý¿âµÄ½Ç¶ÈÀ´¿´£¬Ò»×é¼Ç¼Êý¾Ý±ä»¯µÄchangelogºÍ±í£¬ÊǶÔżºÍ»¥Í¨µÄ¡£
1£© ÒÀ¾Ý¼Ç¼ÁËÊý¾Ý±ä»¯µÄlog£¬¿ÉÒÔÖØ¹¹Ä³Ò»×´Ì¬µÄ±í£¨Ò²¿ÉÒÔÊǷǹØÏµÐʹ洢ϵͳÖÐÓÐkeyµÄ¼Ç¼£©
2£© Ïà·´£¬±íÈç¹û·¢ÉúÁ˱仯£¬¿ÉÒÔ½«±ä»¯¼ÆÈëlog¡£
ÕâÕýÊÇÄãÏëÒªµÄ׼ʵʱ¸´ÖƵÄÃØ¼®ËùÔÚ£¡
ÕâÒ»µãºÍ°æ±¾¿ØÖÆËù×öµÄÊÂÇ鼫ΪÀàËÆ£º¹ÜÀí·Ö²¼Ê½µÄ¡¢²¢·¢µÄ¡¢¶Ô״̬½øÐеÄÐ޸ġ£
°æ±¾¿ØÖƹ¤¾ß£¬Î¬»¤ÁË·´Ó³Ð޸ĵIJ¹¶¡£¬ÕâÆäʵ¾ÍÊÇlog£¬ÄãºÍÒ»¸ö±»Ç©³ö£¨checked out£©µÄ·ÖÖ§¿ìÕÕ½øÐн»»¥£¬Õâ·Ý¿ìÕÕ¾ÍÏ൱ÓÚÊý¾Ý¿âÖÐµÄ±í¡£Äã»á·¢ÏÖ£¬°æ±¾¿ØÖÆÓë·Ö²¼Ê½ÏµÍ³ÖУ¬¸´Öƶ¼ÊÇ»ùÓÚlogµÄ£ºµ±Äã¸üа汾ʱ£¬ÄãÖ»ÊÇÀÈ¡ÁË·´ Ó³Á˰汾±ä»¯µÄ²¹¶¡£¬²¢Ó¦ÓÃÓÚµ±Ç°µÄ·ÖÖ§¿ìÕÕ¡£
2.3 Êý¾Ý¼¯³É£¨Data integration£©
2.3.1 Êý¾Ý¼¯³ÉµÄº¬Òå
ËùνÊý¾Ý¼¯³É£¬¾ÍÊǽ«Ò»¸ö×éÖ¯ÖеÄËùÓзþÎñºÍϵͳµÄÊý¾Ý£¬±äµÃ¿ÉÓá£
ʵ¼ÊÉÏ£¬¶ÔÊý¾Ý½øÐÐÓÐЧÀûÓ㬺ܷûºÏÂí˹ÂåµÄ²ã´ÎÐèÇóÀíÂÛ¡£
½ð×ÖËþµÄ×îµ×²ã£¬ÊÇÊÕ¼¯Êý¾Ý£¬½«ÆäÕûºÏ½øÓ¦ÓÃϵͳÖУ¨ÎÞÂÛÊÇʵʱ¼ÆËãÒýÇæ£¬»¹ÊÇÎı¾Îļþ£¬»¹ÊÇpython½Å±¾£©¡£
¶øÕâЩÊý¾Ý£¬ÐèÒª¾¹ýת»»£¬±£³ÖÒ»¸öͳһ¡¢¹æ·¶¡¢Õû½àµÄ¸ñʽ£¬ÒÔÒ×ÓÚ±»¶ÁÈ¡ºÍ´¦Àí¡£
µ±ÉÏÃæµÄÒªÇó±»Âú×ãºó£¬¾Í¿ÉÒÔ¿ªÊ¼¿¼ÂǶàÖÖ¶àÑùµÄÊý¾Ý´¦Àí·½Ê½£¬±ÈÈçmap ¨C reduce »òÕßʵʱ²éѯϵͳ¡£
ºÜÏÔÈ»£¬Èç¹ûûÓÐÒ»¸ö¿É¿¿µÄ¡¢Í걸µÄÊý¾ÝÁ÷£¬Hadoop¾Í½ö½öÊÇÒ»¸ö°º¹óµÄ¡¢ÄÑÒÔÕûºÏµÄ¼ÓÈÈÆ÷£¨¼¯ÈººÜ·Ñµçô£¿£©¡£
Ïà·´£¬Èç¹ûÄܱ£Ö¤Êý¾ÝÁ÷¿É¿¿¡¢¿ÉÓÃÇÒÍ걸£¬¾Í¿ÉÒÔ¿¼ÂǸü¸ß¼¶µÄÍæ·¨¡¢¸üºÃµÄÊý¾ÝÄ£ÐͺÍÒ»Öµġ¢¸üÒ×±»Àí½âµÄÓïÒå¡£
½Ó×Å£¬×¢ÒâÁ¦¾Í¿ÉÒÔ×ªÒÆµ½¿ÉÊÓ»¯¡¢±¨±í¡¢Ëã·¨ºÍÔ¤²âÉÏÀ´£¨ÍÚ°¡»ú°¡Éî¶È°¡£©¡£
2.3.2 Êý¾Ý¼¯³ÉµÄÁ½¸ö¸´ÔÓÐÔ
ʼþ
ʼþÊý¾Ý£¬¼Ç¼ÁËʼþÊÇÔõô·¢ÉúµÄ£¬¶ø²»½ö½öÊÇ·¢ÉúÁËʲô£¬ÕâÒ»Ààlogͨ³£±»µ±×öÓ¦ÓÃÈÕÖ¾£¬ÒòΪһ°ãÊÇÓÉÓ¦ÓÃϵͳдÈëµÄ¡£µ«ÕâÒ»µã£¬Æäʵ»ìÏýÁËlogµÄ¹¦ÄÜ¡£
GoogleµÄ²Æ¸»£¬Æäʵ£¬ÊÇÓÉÒ»¸ö½¨Á¢ÔÚ£¨Óû§£©µã»÷Á÷ºÍºÃ¶ñÓ¡Ïó£¨ÌåÑ飩֮ÉϵÄÏà¹ØÐÔpipeline²úÉúµÄ£¬¶øµã»÷Á÷ºÍÓ¡Ï󣬾ÍÊÇʼþ¡£
¸÷ÖÖ¸÷ÑùµÄרҵÊý¾ÝϵͳµÄ±¬·¢
ÕâЩϵͳ´æÔÚµÄÔÒò£º
- Áª»ú·ÖÎö£¨OLAP£©
- ËÑË÷
- ¼òµ¥µÄÔÚÏß´æ´¢
- Åú´¦Àí
- ͼÆ×·ÖÎö
- µÈµÈ£¨Èçspark£©
ÏÔÈ»£¬Òª½«Êý¾ÝÕûºÏ½øÕâÑùµÄϵͳÖУ¬¶ÔÓÚÊý¾Ý¼¯³ÉÀ´½²£¬¼«ÎªÀ§ÄÑ¡£
2.3.3 »ùÓÚÈÕÖ¾½á¹¹µÄÊý¾ÝÁ÷
ÿÖÖÂß¼ÒâÒåÉϵÄÊý¾ÝÔ´£¬¶¼¿ÉÒÔÒÀ¾Ýlog½øÐн¨Ä£¡£
Êý¾ÝÔ´¿ÉÒÔÊǼǼÁËʼþ£¨µã»÷ºÍPV£©µÄÓ¦ÓóÌÐò£¬¿ÉÒÔÊǽÓÊܸü¸ÄµÄÊý¾Ý¿â±í¡£
ÿ¸ö¶©ÔÄÕߣ¬¶¼¾¡¿ÉÄÜ¿ìµØ´ÓÕâЩÊý¾ÝÔ´²úÉúµÄlogÖлñȡеļǼ£¬Ó¦ÓÃÓÚ±¾µØµÄ´æ´¢ÏµÍ³£¬²¢ÇÒÌáÉýÆäÔÚlogÖеĶÁÈ¡Æ«ÒÆ£¨offset£©¡£¶©ÔÄÕß¿ÉÒÔÊÇÈκÎÊý¾Ýϵͳ£¬±ÈÈ绺´æ¡¢Hadoop¡¢ÁíÒ»¸öÕ¾µãµÄÊý¾Ý¿â£¬»òÕßËÑË÷ÒýÇæ¡£
Log£¬Êµ¼ÊÉÏÌṩÁËÒ»ÖÖÂ߼ʱÖÓ£¬Õë¶ÔÊý¾Ý±ä»¯£¬¿ÉÒÔ²âÁ¿²»Í¬µÄ¶©ÔÄÕßËù´¦µÄ״̬£¬ÒòΪÕâЩ¶©ÔÄÕßÔÚlogÖеĶÁÈ¡Æ«ÒÆ²»Í¬ÇÒÏ໥¶ÀÁ¢£¬ÕâÖÖÆ«ÒƾÍÏñÒ»¸öʱ¼äÒâÒåÉϵġ°Ê±¿Ì¡±Ò»Ñù¡£

¿¼ÂÇÕâÑùÒ»¸öÀý×Ó£¬Ò»¸öÊý¾Ý¿â£¬ºÍһЩ»º´æ·þÎñÆ÷£º
LogÌṩÁËÕâÑùÒ»ÖÖÄÜÁ¦£¬¿ÉÒÔʹµÃËùÓеĻº´æ·þÎñÆ÷µÃµ½Í¬²½£¬²¢ÍƳöËüÃÇËù´¦µÄ¡°Ê±¿Ì¡±¡£
¼ÙÉèÎÒÃÇдÈëÁËÒ»¸ö±àºÅΪXµÄlog£¬Òª´Óij¸ö»º´æ·þÎñÆ÷¶ÁÈ¡Êý¾Ý£¬ÎªÁ˲»¶Áµ½ÀÏÊý¾Ý£¬Ö»ÐèÒª±£Ö¤£ºÔÚ»º´æ·þÎñÆ÷½«Êý¾Ý£¨Í¬²½£©¸´ÖƵ½XÕâ¸öλÖÃǰ£¬ÎÒÃDz»´ÓÕâ¸ö»º´æÖжÁÈ¡Èκζ«Î÷¼´¿É¡£
´ËÍ⣬log»¹ÌṩÁË×÷Ϊ»º³åÇøµÄÄÜÁ¦£¬ÒÔÖ§³ÖÉú²úÕߺÍÏû·ÑÕßµÄÐÐΪÒÔÒì²½µÄ·½Ê½½øÐС£
×î¹Ø¼üµÄÒ»¸öÖ§³ÖÒì²½µÄÔÒò£¬ÊǶ©ÔÄϵͳ¿ÉÄܻᷢÉú±ÀÀ£¡¢Òòά»¤¶øÏÂÏߣ¬½Óׯָ´ÉÏÏߣ¬¶øÔÚÕâÖÖÇé¿öÏ£¬Ã¿¸ö¶©ÔÄÕß¶¼ÒÔ×Ô¼ºµÄ²½µ÷Ïû·ÑÊý¾Ý¡£
Ò»¸öÅú´¦Àíϵͳ£¬±ÈÈçHadoop£¬»òÕßÒ»¸öÊý¾Ý²Ö¿â£¬ÊÇÒÔСʱ»òÌìΪµ¥Î»Ïû·ÑÊý¾Ý£¬¶øÒ»¸öʵʱϵͳ£¬Í¨³£ÔÚÃë¼¶Ïû·ÑÊý¾Ý¡£
¶øÊý¾ÝÔ´»òÕßlog£¬¶ÔÏû·ÑÊý¾ÝµÄ¶©ÔÄÕßÒ»ÎÞËùÖª£¬ËùÒÔ£¬ÐèÒªÔÚpipelineÖÐ×öµ½ÎÞ·ìµÄÌí¼Ó¶©ÔÄÕߺÍÒÆ³ý¶©ÔÄÕß¡£
¸üÖØÒªµÄÊÇ£¬¶©ÔÄÕߣ¬Ö»ÐèÒªÖªµÀlog£¬¶ø²»ÐèÒª¶ÔÆäËùÏû·ÑµÄÊý¾ÝµÄÀ´Ô´ÓÐÈκÎÁ˽⣬ÎÞÂÛÕâ¸öÊý¾ÝÔ´ÊÇRDBMS¡¢Hadoop£¬»¹ÊÇÒ»¸ö×îÐÂÁ÷ÐеÄK-VÊý¾Ý¿â£¬µÈµÈ¡£
Ö®ËùÒÔÌÖÂÛlog£¬¶ø²»ÊÇÏûϢϵͳ£¬ÊÇÒòΪ²»Í¬µÄÏûϢϵͳËù±£Ö¤µÄÌØÐÔ²»Í¬£¬²¢ÇÒÓÃÏûϢϵͳÕâ¸ö´Ê£¬ÄÑÒÔÈ«ÃæºÍ¾«È·±í´ïijÖÖÓïÒ壬ÒòΪÏûϢϵͳ£¬¸üÖØÒªµÄÔÚÓÚÖØ¶¨ÏòÏûÏ¢¡£
µ«ÊÇ£¬¿ÉÒÔ½«logÀí½âΪÕâÑùÒ»ÖÖÏûϢϵͳ£¬ÆäÌṩÁ˳־ÃÐÔ±£Ö¤¼°Ç¿ÓÐÐòµÄÓïÒ壬ÔÚͨѶϵͳÖУ¬Õâ³Æ×÷Ô×ӹ㲥¡£
2.4 ÔÚLinkedin
LinkedinĿǰµÄÖ÷Ҫϵͳ°üÀ¨£¨×¢£º2013Ä꣩£º
- Search
- Social Graph
- Voldemort (K-V´æ´¢)
- Espresso (Îĵµ´æ´¢)
- Recommendation engine
- OLAP query engine
- Hadoop
- Terradata
- Ingraphs (¼à¿ØÍ¼Æ×¼°metrics·þÎñ)
ÿ¸öϵͳ£¬¶¼ÔÚÆäרҵµÄÁìÓòÌṩרÃŵĸ߼¶¹¦ÄÜ¡£
£¨ÕâÒ»¶ÎÌ«³¤Ì«³¤ÁË£¬JayÐÖÊ®·ÖÄÜÙ©°¡£¬ËùÒÔÌôÖØµãµÄÀ´¼Ç°É£¡£©
1£© Ö®ËùÒÔÒýÈëÊý¾ÝÁ÷Õâ¸ö¸ÅÄÊÇÒòΪҪÔÚoracleÊý¾Ý¿âµÄ±íÖ®ÉÏ£¬½¨Á¢Ò»¸ö³éÏóµÄ»º´æ²ã£¬ÎªËÑË÷ÒýÇæµÄË÷Òý¹¹½¨ºÍÉ罻ͼÆ×¸üУ¬Ìá¹©ÍØÕ¹ÄÜÁ¦¡£
2£© ΪÁ˸üºÃµÄ´¦ÀílinkedinµÄÒ»Ð©ÍÆ¼öËã·¨£¬¿ªÊ¼´îHadoop¼¯Èº£¬µ«ÍŶÓÔÚ´Ë¿éµÄ¾ÑéÉÐdz£¬ËùÒÔ×ßÁ˺ܶàÍä·¡£
3£© ¿ªÊ¼Ê±£¬¼òµ¥´Ö±©µØÈÏΪֻҪ½«Êý¾Ý´ÓoracleÊý¾Ý²Ö¿âÖÐÀ³öÀ´£¬¶ª½øhadoop¾Í¿ÉÒÔÁË¡£½á¹û·¢ÏÖ£ºµÚÒ»£¬½«Êý¾Ý´ÓoracleÊý¾Ý²Ö¿â¿ìËÙµ¼³öÊÇ ¸öجÃΣ»µÚ¶þ£¬Ò²ÊǸüÔã¸âµÄÒ»µã£¬Êý¾Ý²Ö¿âÖÐijЩÊý¾ÝµÄ´¦Àí²»¶Ô£¬µ¼ÖÂÁËhadoopµÄÅú´¦ÀíÈÎÎñ²»Äܰ´Ô¤ÆÚÊä³ö½á¹û£¬ÇÒͨ¹ýhadoopÅú´¦ÀíÖ´ÐÐÈÎ Îñ£¬Í¨³£²»¿ÉÄæ£¬ÌرðÊÇÔÚ³öÁ˱¨±íÖ®ºó¡£
4£© ×îºó£¬ÍŶÓÅׯúÁË´ÓÊý¾Ý²Ö¿âÖгöÊý¾ÝµÄ·½Ê½£¬Ö±½ÓÒÔÊý¾Ý¿âºÍlogsΪÊý¾ÝÔ´¡£½Ó×Å£¬Ôì³öÁËÒ»¸öÂÖ×Ó£ºK-V ´æ´¢£¨Voldemort£©¡£
5£© ¼´Ê¹ÊÇÊý¾Ý¿½±´ÕâÑù²»¸ß´óÉϵĻî¶ù£¬Ò²Õ¼¾ÝÁËÍŶӴóÁ¿µÄʱ¼äÈ¥´¦Àí£¬¸üÔãµÄÊÇ£¬Ò»µ©Êý¾Ý´¦ÀíµÄpipelineÖÐÓиöµã³ö´í£¬hadoopÁ¢Âí±äµÃ·Ï²ñ£¬ÒòΪÔÙÅ£±ÆµÄËã·¨ÅÜÔÚ´íÎóµÄÊý¾ÝÉÏ£¬Ö»ÓÐÒ»¸öºó¹û£¬¾ÍÊDzúÉú¸ü¶àµÄ´íÎóÊý¾Ý¡£
6£© ¼´Ê¹ÍŶӹ¹½¨µÄ¶«Î÷³éÏó²ã´ÎºÜ¸ß£¬Õë¶ÔÿÖÖÊý¾ÝÔ´»¹ÊÇÐèÒªÌØ¶¨µÄÅäÖ㬶øÕâÒ²ÊǺܶà´íÎóºÍʧ°ÜµÄ¸ùÔ´¡£
7£© Ò»´óÅú³ÌÐòÔ±Ïë¸ú½ø£¬Ã¿¸ö³ÌÐòÔ±¶¼ÓÐÒ»´óÅúµÄÏë·¨£¬¼¯³ÉÕâ¸öϵͳ£¬Ìí¼ÓÕâ¸ö¹¦ÄÜ£¬ÕûºÏÕâ¸öÌØÉ«£¬»òÕßÏëÒª×Ô¶¨ÒåµÄÊý¾ÝÔ´¡£
8£© Jay¸ç¿ªÊ¼Òâʶµ½£º
µÚÒ»£¬ ËäÈ»ËûÃǹ¹½¨µÄpipelines»¹ºÜ²Ú£¬µ«ÊÇÈ´¼«ÆäÓмÛÖµ¡£¼´Ê¹Êǽâ¾öÁËÊý¾ÝÔÚеÄϵͳ£¨Èçhadoop£©ÖпÉÓõÄÎÊÌ⣬Ҳ½âËøÁËÒ»´óÅú¿ÉÄÜÐÔ¡£ÒÔǰÄÑ×öµÄ¼ÆË㿪ʼ±äΪ¿ÉÄÜ¡£ÐµIJúÆ·ºÍ·ÖÎö£¬½öÐèÒª½âËøÆäËüϵͳÖеÄÊý¾Ý£¬²¢ÇÒ½øÐÐÕûºÏ£¬¾Í¿ÉÒÔÈÝÒ×µØ×ö³öÀ´¡£
µÚ¶þ£¬ ºÜÃ÷ÏÔ£¬¿É¿¿µØÊý¾Ý×°ÔØÐèÒª¸ü¼áʵµÄÖ§³Å£¬Èç¹ûÄܹ»²¶»ñËùÓеĽṹ£¬¾Í¿ÉÒÔÈÃhadoopÊý¾Ý×°ÔØÍêÈ«×Ô¶¯»¯£¬²»ÐèÒª¼ÓÈëеÄÊý¾ÝÔ´»òÈ˹¤ÐÞ¸ÄÊý¾ÝµÄģʽ¡£Êý¾Ý»áÉñÆæµØ³öÏÖÔÚHDFSÖУ¬¶øÐµÄÊý¾ÝÔ´¼ÓÈëºó£¬HiveµÄ±í»áÓúÏÊʵÄÁÐ×Ô¶¯»¯µØ¡¢×ÔÊÊÓ¦µØÉú³É¡£
µÚÈý£¬Êý¾Ý¸²¸Ç¶ÈÔ¶Ô¶²»×ã¡£ÒòΪҪ´¦ÀíºÜ¶àеÄÊý¾ÝÔ´£¬ºÜÄÑ¡£
9£© ΪÁ˽â¾öÐÂÊý¾ÝÔ´¼ÓÈëºóµÄÊý¾Ý×°ÔØÎÊÌ⣬ÍŶӿªÊ¼ÁËÕâÑùµÄ³¢ÊÔ£º

ºÜ¿ì£¬ËûÃÇ·¢ÏÖÕâÑù¸ãÐв»Í¨£¬ÒòΪ·¢²¼ºÍ¶©ÔÄ¡¢Éú²úºÍÏû·Ñ£¬Êý¾ÝÁ÷ͨ³£»¹ÊÇË«ÏòµÄ£¬Õâ³ÉÁËÒ»¸öO(n^2)µÄÎÊÌâ¡£
ËùÒÔ£¬ËûÃÇÐèÒªµÄÊÇÕâÑùµÄÄ£ÐÍ£º

ÐèÒª½«Ã¿¸öÏû·ÑÕß´ÓÊý¾ÝÔ´¸ôÀ룬ÀíÏëµÄÇé¿öÏ£¬ÕâЩÏû·ÑÕßÖ»ºÍÒ»¸ödata repository½øÐн»»¥£¬¶øÕâ¸örepository¿ÉÒÔÌṩËüÃÇ·ÃÎÊÈÎÒâÊý¾ÝµÄÄÜÁ¦¡£
10£©ÏûϢϵͳ + log = Kafka£¬kafkaºá¿Õ³öÊÀ¡£
2.5 LogºÍETL¡¢Êý¾Ý²Ö¿âµÄ¹ØÏµ
2.5.1 Êý¾Ý²Ö¿â
1) Ò»¸ö×°Óиɾ»µÄ¡¢½á¹¹»¯µÄ¡¢¼¯³ÉµÄÊý¾Ýrepository£¬ÓÃÓÚ·ÖÎö¡£
2) ËäÈ»Ïë·¨ºÜÃÀºÃ£¬µ«ÊÇ»ñÈ¡Êý¾ÝµÄ·½Ê½Óеã¹ýʱÁË£ºÖÜÆÚÐԵشÓÊý¾Ý¿â»ñÈ¡Êý¾Ý£¬½«Æäת»»ÎªÄ³ÖֿɶÁÐÔ¸ü¼ÑµÄ¸ñʽ¡£
3) ֮ǰµÄÊý¾Ý²Ö¿âÎÊÌâÔÚÓÚ£º½«¸É¾»µÄÊý¾ÝºÍÊý¾Ý²Ö¿â¸ß¶ÈñîºÏ¡£
Êý¾Ý²Ö¿â£¬Ó¦¸ÃÊÇÒ»×é²éѯ¹¦Äܵļ¯ºÏ£¬ÕâЩ¹¦ÄÜ·þÎñÓÚ±¨±í¡¢ËÑË÷¡¢ad hot ·ÖÎö£¬°üº¬Á˼ÆÊý£¨counting£©¡¢¾ÛºÏ£¨aggregation£©¡¢¹ýÂË£¨filtering£©µÈ²Ù×÷£¬ËùÒÔ¸üÓ¦¸ÃÊÇÒ»¸öÅú´¦Àíϵͳ¡£
µ«Êǽ«¸É¾»µÄÊý¾ÝºÍÕâÑùµÄÒ»ÖÖÅú´¦Àíϵͳ¸ß¶ÈñîºÏÔÚÒ»Æð£¬Òâζ×ÅÕâЩÊý¾Ý²»Äܱ»ÊµÊ±ÏµÍ³Ïû·Ñ£¬±ÈÈçËÑË÷ÒýÇæµÄË÷Òý¹¹½¨¡¢ÊµÊ±¼ÆËãºÍʵʱ¼à¿ØÏµÍ³£¬µÈµÈ¡£
2.5.2 ETL
Jay¸çÈÏΪ£¬ETLÎÞ·Ç×öÁ½¼þÊ£º
1£© ¶ÔÊý¾Ý½øÐгéÈ¡ºÍÇåÏ´£¬½«Êý¾Ý´ÓÌØ¶¨µÄϵͳÖнâËø
2£© ÖØ¹¹Êý¾Ý£¬Ê¹ÆäÄÜͨ¹ýÊý¾Ý²Ö¿â½øÐвéѯ¡£±ÈÈ罫Êý¾ÝÀàÐͱäΪÊÊÅäij¸ö¹ØÏµÐÍÊý¾Ý¿âµÄÀàÐÍ£¬½«Ä£Ê½×ª»»ÎªÐÇÐÍ»òÕßÑ©»¨Ä£Ê½£¬»òÕß½«Æä·Ö½âΪijÖÖÃæÏòÁеĴ洢¸ñʽ¡£
µ«ÊÇ£¬½«ÕâÁ½¼þÊÂñîºÏÔÚÒ»Æð£¬ÎÊÌâºÜ´ó£¬ÒòΪ¼¯³ÉºóµÄ¡¢¸É¾»µÄÊý¾Ý£¬±¾Ó¦Äܱ»ÆäËüʵʱϵͳ¡¢Ë÷Òý¹¹½¨ÏµÍ³¡¢µÍÑÓʱµÄ´¦ÀíϵͳÏû·Ñ¡£
Êý¾Ý²Ö¿âÍŶӣ¬¸ºÔðÊÕ¼¯ºÍÇåÏ´Êý¾Ý£¬µ«ÊÇ£¬ÕâЩÊý¾ÝµÄÉú²úÕßÍùÍùÒòΪ²»Ã÷È·Êý¾Ý²Ö¿âÍŶӵÄÊý¾Ý´¦ÀíÐèÇ󣬵¼ÖÂÊä³öºÜÄѱ»³éÈ¡ºÍÇåÏ´µÄÊý¾Ý¡£
ͬʱ£¬ÒòΪºËÐÄÒµÎñÍŶӶԺ͹«Ë¾µÄÆäËüÍŶӱ£³Ö²½µ÷Ò»ÖÂÕâ¼þʶù²»Ãô¸Ð£¬ËùÒÔÕæÕýÄÜ´¦ÀíµÄÊý¾Ý¸²¸Ç¶ÈºÜµÍ£¬Êý¾ÝÁ÷ºÜ´àÈõ£¬ºÜÄÑ¿ìËÙÓ¦¶Ô±ä»¯¡£
ËùÒÔ£¬¸üºÃµÄ·½Ê½ÊÇ£º

Èç¹ûÏëÔÚÒ»¸ö¸É¾»µÄÊý¾Ý¼¯ÉÏ×öµãËÑË÷¡¢ÊµÊ±¼à¿ØÇ÷ÊÆÍ¼¡¢ÊµÊ±±¨¾¯µÄʶù£¬ÒÔÔÓеÄÊý¾Ý²Ö¿â»òÕßhadoop¼¯ÈºÀ´×÷Ϊ»ù´¡ÉèÊ©£¬¶¼ÊDz»ºÏÊʵġ£¸üÔãµÄÊÇ£¬ETLËù¹¹½¨µÄÕë¶ÔÊý¾Ý²Ö¿âµÄÊý¾Ý¼ÓÔØÏµÍ³£¬¶ÔÆäËü£¨ÊµÊ±£©ÏµÍ³µã¶ùÓÃûÓС£
×îºÃµÄÄ£ÐÍ£¬¾ÍÊÇÔÚÊý¾Ý·¢²¼Õß·¢²¼Êý¾Ý֮ǰ£¬¾ÍÒѾÍê³ÉÁËÊý¾ÝµÄÇåÏ´¹ý³Ì£¬ÒòΪֻÓз¢²¼Õß×îÇå³þËüÃǵÄÊý¾ÝÊÇʲôÑùµÄ¡£¶øËùÓÐÔÚÕâ¸ö½×¶ÎËù×öµÄ²Ù×÷£¬¶¼Ó¦¸ÃÂú×ãÎÞËðºÍ¿ÉÄæ¡£
ËùÓзḻÓïÒå¡¢»òÌí¼ÓÖµµÄʵʱת»»£¬¶¼Ó¦ÔÚÔʼµÄlog·¢²¼ºó´¦Àí£¨post-processing£©£¬°üÀ¨ÎªÊ¼þÊý¾Ý½¨Á¢»á»°£¬»òÕßÌí¼ÓijЩ¸ÐÐËȤµÄ×ֶΡ£ÔʼµÄlogÒÀ¾É¿É±»µ¥¶ÀʹÓ㬵«ÊÇ´ËÀàʵʱӦÓÃÒ²ÅÉÉúÁËеIJÎÊý»¯µÄlog¡£
×îºó£¬Ö»ÓжÔÓ¦ÓÚ¾ßÌåµÄÄ¿±êϵͳµÄÊý¾Ý¾ÛºÏ²Ù×÷£¬Ó¦×÷ΪÊý¾Ý×°ÔØµÄÒ»²¿·Ö£¬±ÈÈçת»»ÎªÐÇÐÍ»òÑ©»¨ÐÍģʽ£¬ÒÔÔÚÊý¾Ý²Ö¿âÖнøÐзÖÎöºÍ³ö±¨±í¡£ÒòΪÕâ¸ö½×¶Î£¬¾ÍÏñ´«Í³µÄETLËù×öµÄÄÇÑù£¬ÒòΪÓÐÁ˷dz£¸É¾»ºÍ¹æ·¶µÄÊý¾ÝÁ÷£¬£¨ÓÐÁËlogºó£©ÏÖÔÚ±äµÃ·Ç³£¼òµ¥¡£
2.6 LogÎļþºÍʼþ
ÒÔlogΪºËÐĵļܹ¹£¬»¹Óиö¶îÍâµÄºÃ´¦£¬¾ÍÊÇÒ×ÓÚʵÏÖÎÞñîºÏµÄ¡¢Ê¼þÇý¶¯µÄϵͳ¡£
´«Í³µÄ ²¶»ñÓû§»î¶¯ºÍϵͳ±ä»¯µÄ·½Ê½£¬Êǽ«´ËÀàÐÅϢдÈëÎı¾ÈÕÖ¾£¬È»ºó³éÈ¡µ½Êý¾Ý²Ö¿â»òÕßhadoop¼¯ÈºÖнøÐоۺϺʹ¦Àí£¬Õâ¸öÎÊÌâºÍÇ°ÃæËùÊöµÄÊý¾Ý²Ö¿âºÍETLÎÊÌâÀàËÆ£ºÊý¾ÝÓëÊý¾Ý²Ö¿âµÄ¸ß¶ÈñîºÏ¡£
ÔÚLinkedin£¬Æä»ùÓÚkafka¹¹½¨ÁËʼþÊý¾Ý´¦Àíϵͳ¡£Îª¸÷ÖÖ¸÷ÑùµÄaction¶¨ÒåÁ˳ɰÙÉÏǧÖÖʼþÀàÐÍ£¬´ÓPV¡¢Óû§¶ÔÓÚ¹ã¸æµÄ¸Ï½Å£¨ad impressions£©¡¢ËÑË÷£¬µ½·þÎñµÄµ÷ÓúÍÓ¦ÓõÄÒì³££¬µÈµÈ¡£
ΪÁËÌå»áÉÏÊöʼþÇý¶¯ÏµÍ³µÄºÃ´¦£¬¿´Ò»¸ö¼òµ¥µÄ¹ØÓÚʼþµÄÀý×Ó£º
ÔÚ¹¤×÷»ú»áÒ³ÃæÉÏ£¬Ìṩһ¸ö»ú»á¡£Õâ¸öÒ³ÃæÓ¦¸ÃÖ»¸ºÔðÈçºÎչʾ»ú»á£¬¶ø²»Ó¦¸Ã¹ý¶àµØ°üº¬ÆäËüÂß¼¡£µ«ÊÇ£¬Äã»á·¢ÏÖ£¬ÔÚÒ»¸ö¾ßÓÐÏ൱¹æÄ£µÄÍøÕ¾ÖУ¬×öÕâ¼þÊ£¬ºÜÈÝÒ׾ͻáÈÃÔ½À´Ô½¶àµÄÓëչʾ»ú»áÎ޹صÄÂ߼ǣ³¶½øÀ´¡£
±ÈÈ磬ÎÒÃÇÏ£Íû¼¯³ÉÒÔÏÂϵͳ¹¦ÄÜ£º
1£© ÎÒÃÇÐèÒª½«Êý¾Ý·¢Ë͵½hadoopºÍÊý¾Ý²Ö¿â×öÀëÏß´¦Àí¡£
2£© ÎÒÃÇÐèҪͳ¼ÆÒ³Ãæä¯ÀÀ´ÎÊý£¬ÒÔÈ·±£Ä³Ð©ä¯ÀÀ²»ÊÇΪÁË×¥È¡ÍøÒ³ÄÚÈÝʲôµÄ¡£
3£© ÎÒÃÇÐèÒª¾ÛºÏ¶Ô´ËÒ³ÃæµÄä¯ÀÀÐÅÏ¢£¬ÔÚ»ú»á·¢²¼ÕߵķÖÎöÒ³ÃæÉϳÊÏÖ¡£
4£© ÎÒÃÇÐèÒª¼Ç¼ijÓû§¶Ô´ËÒ³ÃæµÄä¯ÀÀ¼Ç¼£¬ÒÔÈ·±£ÎÒÃǶԴËÓû§ÌṩÁËÓмÛÖµµÄ¡¢ÌåÑéÁ¼ºÃµÄÈκÎÊÊÒË´ËÓû§µÄ¹¤×÷»ú»á£¬¶ø²»ÊǶԴËÓû§Ò»±éÓÖÒ»±éµØÖظ´Õ¹Ê¾Ä³ ¸ö»ú»á£¨ÏëÏëÀÏÆÅ²»ÔÚ¼Ò²ÅÄÜÍæµÄÓÎÏ·°É£¬ÄǺìÂÌÀ¶ÉÁ˸µÄÌØÐ§£¬ÅäºÏÄǾ¢±¬µÄDJ·çÎèÇú£¬»òÕßÄÇÒ¡°Ú¾Û½¹µÄÊÂÒµ·åºÍÆëXС¶ÌȹµÄgirls£¬È»ºóµã½øÈ¥²Å·¢ ÏÖÊDZêÌâµ³µÄad°É£¡£©¡£
5£© ÎÒÃǵÄÍÆ¼öϵͳÐèÒª¼Ç¼¶Ô´ËÒ³ÃæµÄä¯ÀÀ¼Ç¼£¬ÒÔÕýÈ·µØ×·×ٴ˹¤×÷»ú»áµÄÁ÷Ðжȡ£
ºÜ¿ì£¬½ö½öչʾ»ú»áµÄÒ³ÃæÂß¼£¬¾Í»á±äµÃ¸´ÔÓ¡£µ±ÎÒÃÇÔÚÒÆ¶¯¶ËÒ²Ôö¼ÓÁË´Ë»ú»áµÄչʾʱ£¬²»µÃ²»°ÑÂß¼Ò²Ç¨ÒÆ¹ýÈ¥£¬ÕâÓÖ¼Ó¾çÁ˸´Ôӳ̶ȡ£»¹Ã»Í꣬¾À½áµÄ¶«Î÷ÊÇ£¬¸ºÔð´¦Àí´ËÒ³ÃæµÄ¹¤³Ìʦ£¬ÐèÒªÓÐÆäËüϵͳµÄ֪ʶ£¬ÒÔÈ·±£ÉÏÊöµÄÄÇЩ¹¦ÄÜÄÜÕýÈ·µÄ¼¯³ÉÔÚÒ»Æð¡£
ÕâÖ»ÊǸö¼«Æä¼òµ¥µÄÀý×Ó£¬ÔÚʵ¼ùÖУ¬Çé¿öÖ»»á¸ü¼Ó¸´ÔÓ¡£
ʼþÇý¶¯¿ÉÒÔÈÃÕâ¼þʱäµÃ¼òµ¥¡£
¸ºÔð³ÊÏÖ»ú»áµÄÒ³Ãæ£¬Ö»ÐèÒª³ÊÏÖ»ú»á²¢¼Ç¼һЩºÍ³ÊÏÖÏà¹ØµÄÒòËØ£¬±ÈÈ繤×÷»ú»áµÄÏà¹ØÊôÐÔ£¬Ëä¯ÀÀÁËÕâ¸öÒ³Ãæ£¬ÒÔ¼°ÆäËüµÄÓÐÓõÄÓë³ÊÏÖÏà¹ØµÄÐÅÏ¢¡£ Ò³Ãæ²»ÐèÒª±£³Ö¶ÔÆäËüϵͳµÄ֪ʶºÍÁ˽⣬±ÈÈçÍÆ¼öϵͳ¡¢°²È«ÏµÍ³¡¢»ú»á·¢²¼ÕߵķÖÎöϵͳ£¬»¹ÓÐÊý¾Ý²Ö¿â£¬ËùÓеÄÕâЩϵͳֻÐèÒª×÷Ϊ¶©ÔÄÕߣ¬¶©ÔÄÕâ¸öʼþ£¬ È»ºó¶ÀÁ¢µØ½øÐÐËüÃǸ÷×ԵĴ¦Àí¼´¿É£¬¶ø³ÊÏÖ»ú»áµÄÒ³Ãæ²»ÐèÒªÒòΪÐµĶ©ÔÄÕß»òÏû·ÑÕߵļÓÈë¶ø×ö³öÐ޸ġ£
2.7 ¹¹½¨¿ÉÀ©Õ¹µÄlog
·ÖÀë·¢²¼ÕߺͶ©ÔÄÕß²»ÐÂÏÊ£¬µ«ÊÇÒª±£Ö¤¶à¸ö¶©ÔÄÕßÄܹ»ÊµÊ±´¦ÀíÏûÏ¢£¬²¢ÇÒͬʱ±£Ö¤À©Õ¹ÄÜÁ¦£¬¶ÔÓÚlogϵͳÀ´Ëµ£¬ÊÇÒ»¼þ±È½ÏÀ§ÄѵÄÊ¡£
Èç¹ûlogµÄ¹¹½¨²»¾ß±¸¿ìËÙ¡¢µÍ¿ªÏúºÍ¿ÉÀ©Õ¹ÄÜÁ¦£¬ÄÇô½¨Á¢ÔÚ´Ëlogϵͳ֮ÉϵÄÒ»ÇÐÃÀºÃ¶¼Ãâ̸¡£
ºÜ¶àÈË¿ÉÄÜÈÏΪlogϵͳÔÚ·Ö²¼Ê½ÏµÍ³ÖÐÊǸöºÜÂý¡¢ÖØÐÍ¿ªÏúµÄ»î¶ù£¬²¢ÇÒ½öÓÃÀ´´¦ÀíһЩÀàËÆÓÚZooKeeper¸üÊʺϴ¦ÀíµÄÔªÊý¾ÝµÈÐÅÏ¢¡£
µ«ÊÇLinkedinÏÖÔÚ£¨×¢£º2013Ä꣩£¬ÔÚkafkaÖÐÿÌì´¦Àí600ÒÚÌõ²»Í¬µÄÏûϢдÈ루Èç¹ûËãÊý¾ÝÖÐÐĵľµÏñµÄ»°£¬ÄǾÍÊǼ¸Ç§ÒÚÌõдÈ룩¡£
Jay¸çËûÃÇÔõô×öµ½µÄÄØ£¿
1) ¶Ôlog½øÐзָpartitioning the log£©
2) ͨ¹ýÅúÁ¿¶ÁдÓÅ»¯ÍÌÍÂÁ¿
3) ±ÜÃâ²»±ØÒªµÄÊý¾Ý¿½±´
ͨ¹ý½«logÇÐΪ¶à¸öpartitionÀ´ÌṩÀ©Õ¹ÄÜÁ¦£º

1) ÿ¸öpartition¶¼ÊÇÓÐÐòµÄlog£¬µ«ÊÇpartitionsÖ®¼äûÓÐÈ«¾ÖµÄ˳Ðò¡£
2) ½«ÏûϢдÈëÄĸöpartitionÍêÈ«ÓÉдÈëÕß¿ØÖÆ£¬Í¨¹ýÒÀÕÕijÖÖÀàÐ͵Äkey£¨Èçuser_id£©½øÐзָ
3) ·Ö¸îʹµÃlogµÄ¸½¼Ó²Ù×÷£¬¿ÉÒÔ²»ÓÃÔÚ·ÖÆ¬£¨sharding£©Ö®¼ä½øÐÐе÷¾Í½øÐУ¬Í¬Ê±£¬±£Ö¤ÏµÍ³µÄÍÌÍÂÁ¿ºÍkafka¼¯ÈºµÄ¹æÄ£³ÊÏßÐÔ¹ØÏµ¡£
4) ËäȻûÓÐÌṩȫ¾Ö˳Ðò£¨Êµ¼ÊÉÏÏû·ÑÕß»òÕß¶©ÔÄÕß³ÉǧÉÏÍò£¬ÌÖÂÛËüÃǵÄÈ«¾Ö˳ÐòÒ»°ãûÓÐɶ¼ÛÖµ£©£¬µ«ÊÇkafkaÌṩÁËÕâÑùÒ»ÖÖ±£Ö¤£º·¢ËÍÕß°´ÕÕʲô˳Ðò½« ÏûÏ¢·¢¸øÄ³¸öpartition£¬´ÓÕâ¸öpartitionµÝ½»³öÈ¥µÄÏûÏ¢¾ÍÊÇʲô˳Ðò£¨Ê²Ã´Ë³Ðò½ø£¬Ê²Ã´Ë³Ðò³ö£©¡£
5) ÿ¸öpartition¶¼°´ÕÕÅäÖúõÄÊýÄ¿½øÐи´ÖÆ£¬Èç¹ûÒ»¸öleader½Úµã¹ÒÁË£¬ÆäËüµÄ½Úµã»á³ÉΪеÄleader¡£
6) Ò»Ìõlog£¬Í¬ÎļþϵͳһÑù£¬ÏßÐԵĶÁдģʽ¿É±»ÓÅ»¯£¬½«Ð¡µÄ¶Áдlog¿ÉÒÔ×é³É¸ü´óµÄ¡¢¸ßÍÌÍÂÁ¿µÄ²Ù×÷¡£KafkaÔÚÕâ¼þÊÂÉÏ×öµÄºÜÃÍ¡£Åú´¦ÀíÓÃÔÚÁ˸÷ ÖÖ³¡¾°Ö®Ï£¬±ÈÈç¿Í»§¶Ë½«Êý¾Ý·¢Ë͵½·þÎñ¶Ë¡¢½«Êý¾ÝдÈë´ÅÅÌ¡¢·þÎñÆ÷Ö®¼äµÄÊý¾Ý¸´ÖÆ¡¢½«Êý¾Ý´«Ë͸øÏû·ÑÕߣ¬ÒÔ¼°È·ÈÏÌá½»Êý¾ÝµÈ³¡¾°¡£
7) ×îºó£¬kafkaÔÚÄÚ´ælog¡¢´ÅÅÌlog¡¢ÍøÂçÖз¢Ë͵ÄlogÉÏ£¬²ÉÓÃÁ˺ܼòµ¥µÄ¶þ½øÖƸñʽ£¬ÒÔÀûÓÚÀûÓø÷ÖÖÓÅ»¯¼¼Êõ£¬±ÈÈçÁ㿽±´Êý¾Ý´«Êä¼¼Êõ£¨zero-copy data transfer£©¡£
Öî¶àµÄÓÅ»¯¼¼Êõ£¬»ã¾ÛÆðÀ´£¬¿ÉÒÔÈÃÄ㼴ʹÔÚÄڴ汬ÂúµÄÇéÐÎÏ£¬Ò²Äܰ´ÕÕ´ÅÅÌ»òÍøÂçÄÜÌṩµÄ×î´óÄÜÁ¦½øÐÐÊý¾Ý¶Áд¡£
2.8 LogsºÍʵʱ´¦Àí
ÄãÒÔΪJay¸çÌṩÁËÕâô¸öÃÀÀöµÄ·½·¨°ÑÊý¾Ý¸´ÖÆÀ´¸´ÖÆÈ¥¾ÍÍêÁË£¿
Ä㣡´í£¡ÁË£¡
LogÊÇÁ÷µÄÁíÒ»ÖÖ˵·¨£¬logsÊÇÁ÷´¦ÀíµÄºËÐÄ¡£
2.8.1 ʲôÊÇÁ÷´¦Àí
Jay¸çÈÏΪ£º
1£©Á÷´¦ÀíÊÇÁ¬ÐøÊý¾Ý´¦ÀíµÄ»ù´¡ÉèÊ©¡£
2£©Á÷´¦ÀíµÄ¼ÆËãÄ£ÐÍ£¬¾ÍÈçͬMapReduce»òÆäËü·Ö²¼Ê½´¦Àí¿ò¼ÜÒ»Ñù£¬Ö»ÊÇÐèÒª±£Ö¤µÍÑÓ³Ù¡£
3£©Åú´¦ÀíʽµÄÊÕ¼¯Êý¾Ýģʽ£¬µ¼ÖÂÁËÅú´¦ÀíʽµÄÊý¾Ý´¦Àíģʽ¡£
4£©Á¬ÐøµÄÊÕ¼¯Êý¾Ýģʽ£¬µ¼ÖÂÁËÁ¬ÐøµÄÊý¾Ý´¦Àíģʽ¡£
5£©Jay¸ç½²Á˸öÃÀ¹úÈË¿ÚÆÕ²éµÄ·½Ê½À´½âÊÍÅú´¦Àí¡£
ÔÚlinkedin£¬ÎÞÂÛÊǻÊý¾Ý»¹ÊÇÊý¾Ý¿âµÄ±ä»¯£¬¶¼ÊÇÁ¬ÐøµÄ¡£
Åú´¦Àí°´Ìì´¦ÀíÊý¾Ý£¬ºÍÁ¬Ðø¼ÆË㽫´°¿ÚÉèΪһÌìÀ×ͬ¡£
ËùÒÔ£¬Á÷´¦ÀíÊÇÕâÑùÒ»ÖÖ¹ý³Ì£º
6£©ÔÚ´¦ÀíÊý¾Ýʱ£¬´øÁËÒ»¸öʱ¼äµÄ¸ÅÄ²»ÐèÒª¶ÔÊý¾Ý±£³ÖÒ»¸ö¾²Ì¬µÄ¿ìÕÕ£¬ËùÒÔ¿ÉÒÔÔÚÓû§×Ô¶¨ÒåµÄƵÂÊ֮ϣ¬Êä³ö½á¹û£¬¶ø²»±ØµÈÊý¾Ý¼¯µ½´ïijÖÖ¡°½áÊø¡±µÄ״̬¡£
7£©´ÓÕâ¸öÒâÒåÉϽ²£¬Á÷´¦ÀíÊÇÅú´¦ÀíµÄÒ»ÖÖ·º»¯£¬²¢ÇÒ¿¼Âǵ½ÊµÊ±Êý¾ÝµÄÁ÷Ðг̶ȣ¬ÕâÊÇÒ»ÖÖ¼«ÆäÖØÒªµÄ·º»¯¡£
8£©Ðí¶àÉÌÒµ¹«Ë¾ÎÞ·¨½¨Á¢Á÷´¦ÀíÒýÇæ£¬ÍùÍùÒòΪÎÞ·¨½¨Á¢Á÷Êý¾ÝÊÕ¼¯ÒýÇæ¡£
9£©Á÷´¦Àí¿çÔ½ÁËʵʱÏìӦʽ·þÎñºÍÀëÏßÅú´¦ÀíµÄ»ù´¡Éèʩ֮¼äµÄºè¹µ¡£
10£©Logϵͳ£¬½â¾öÁ˺ܶàÁ÷´¦ÀíģʽÖеĹؼüÎÊÌ⣬ÆäÖÐ×î´óµÄÒ»¸öÎÊÌâ¾ÍÊÇÈçºÎÔÚʵʱµÄ¶à¸ö¶©ÔÄÕßģʽÏ£¬Ìṩ¿ÉÓÃÊý¾ÝµÄÎÊÌ⣨Á÷Êý¾ÝÊÕ¼¯£©¡£
2.9 Êý¾ÝÁ÷ͼÆ×
Á÷´¦ÀíÖÐ×îÓÐȤµÄµØ·½ÔÚÓÚ£¬ÆäÍØÕ¹ÁËʲôÊÇÊý¾ÝÔ´£¨feeds£©ÕâÒ»¸ÅÄî¡£
ÎÞÂÛÊÇÔʼÊý¾ÝµÄlogs¡¢feeds£¬»¹ÊÇʼþ¡¢Ò»ÐÐÒ»ÐеÄÊý¾Ý¼Ç¼£¬¶¼À´×ÔÓ¦ÓóÌÐòµÄ»î¶¯¡£
µ«ÊÇ£¬Á÷´¦Àí»¹¿ÉÒÔÈÃÎÒÃÇ´¦ÀíÀ´×ÔÆäËüfeedsµÄÊý¾Ý£¬ÕâЩÊý¾ÝºÍÔʼÊý¾Ý£¬ÔÚÏû·ÑÕß¿´À´£¬²¢ÎÞ¶þÖ£¬¶øÕâЩÅÉÉúµÄfeeds¿ÉÒÔ°üº¬ÈÎÒâ³Ì¶ÈµÄ¸´ÔÓÐÔ¡£

Ò»¸öÁ÷´¦ÀíÈÎÎñ£¬Ó¦¸ÃÊÇÕâÑùµÄ£º´Ólogs¶ÁÈ¡Êý¾Ý£¬½«Êä³öдÈëlogs»òÕ߯äËüϵͳ¡£
×÷ΪÊäÈëºÍÊä³öµÄlogs£¬Á¬Í¨ÕâЩ´¦Àí±¾Éí£¬ºÍÆäËüµÄ´¦Àí¹ý³Ì£¬¹¹³ÉÁËÒ»¸öͼ¡£
ÊÂʵÉÏ£¬ÒÔlogΪºËÐĵÄϵͳ£¬ÔÊÐíÄ㽫¹«Ë¾»ò»ú¹¹ÖеÄÊý¾Ý²¶»ñ¡¢×ª»»ÒÔ¼°Êý¾ÝÁ÷£¬¿´×÷ÊÇһϵÁеÄlogs¼°ÔÚÆäÉϽøÐÐдÈëµÄ´¦Àí¹ý³ÌµÄ½áºÏ¡£
Ò»¸öÁ÷´¦Àí³ÌÐò£¬Æäʵ²»±ØºÜ¸ß´óÉÏ£º¿ÉÒÔÊÇÒ»¸ö´¦Àí¹ý³Ì»òÕßÒ»×é´¦Àí¹ý³Ì£¬µ«ÊÇ£¬ÎªÁ˱ãÓÚ¹ÜÀí´¦ÀíËùÓõĴúÂ룬¿ÉÒÔÌṩһЩ¶îÍâµÄ»ù´¡ÉèÊ©ºÍÖ§³Ö¡£
ÒýÈëlogsÓÐÁ½¸öÄ¿µÄ£º
1£© ±£Ö¤ÁËÊý¾Ý¼¯¿ÉÒÔÖ§³Ö¶à¸ö¶©ÔÄÕßģʽ£¬¼°ÓÐÐò¡£
2£© ¿ÉÒÔ×÷ΪӦÓõĻº³åÇø¡£ÕâµãºÜÖØÒª£¬ÔÚ·Çͬ²½µÄÊý¾Ý´¦Àí½ø³ÌÖУ¬Èç¹ûÉÏÓεÄÉú²úÕß³öÊý¾ÝµÄËٶȸü¿ì£¬Ïû·ÑÕßµÄËٶȸú²»ÉÏ£¬ÕâÖÖÇé¿öÏ£¬ÒªÃ´Ê¹´¦Àí½ø³Ì×èÈû£¬ÒªÃ´ÒýÈ뻺³åÇø£¬ÒªÃ´¶ªÆúÊý¾Ý¡£
¶ªÆúÊý¾ÝËÆºõ²»ÊǸöºÃµÄÑ¡Ôñ£¬¶ø×èÈû´¦Àí½ø³Ì£¬»áʹµÃËùÓеÄÊý¾ÝÁ÷µÄ´¦ÀíͼÆ×ÖеĴ¦Àí½ø³Ì¿¨×¡¡£¶ølog£¬ÊÇÒ»Öֺܴó£¬Ìش󣬷dz£´óµÄ»º³åÇø£¬ËüÔÊÐí´¦Àí ½ø³ÌµÄÖØÆô£¬Ê¹µÃij¸ö½ø³Ìʧ°Üºó£¬²»Ó°ÏìÁ÷´¦ÀíͼÆ×ÖÐµÄÆäËü½ø³Ì¡£Õâ¶ÔÓÚÒ»¸öÅÓ´óµÄ»ú¹¹È¥À©Õ¹Êý¾ÝÁ÷ÊǷdz£¹Ø¼üµÄ£¬ÒòΪ²»Í¬µÄÍŶÓÓв»Í¬µÄ´¦ÀíÈÎÎñ£¬ÏÔÈ» ²»ÄÜÒòΪij¸öÈÎÎñ·¢Éú´íÎó£¬Õû¸öÁ÷´¦Àí½ø³Ì¶¼±»¿¨×¡¡£
StormºÍSamza¾ÍÊÇÕâÑùµÄÁ÷´¦ÀíÒýÇæ£¬²¢ÇÒ¶¼ÄÜÓÃkafka»òÆäËüÀàËÆµÄϵͳ×÷ΪËüÃǵÄlogϵͳ¡£
£¨×¢£ºJay¸çÏ൱ÃÍ£¬Ç°ÓÐkafka£¬ºóÓÐsamza¡££©
2.10 ÓÐ״̬µÄʵʱ´¦Àí
ºÜ¶àÁ÷´¦ÀíÒýÇæÊÇÎÞ״̬µÄ¡¢Ò»´ÎÒ»¼Ç¼µÄÐÎʽ£¬µ«ºÜ¶àÓÃÀý¶¼ÐèÒªÔÚÁ÷´¦ÀíµÄij¸ö´óСµÄʱ¼ä´°¿ÚÄÚ½øÐи´ÔÓµÄcounts , aggregationsºÍjoins²Ù×÷¡£
±ÈÈ磬µã»÷Á÷ÖУ¬joinÓû§ÐÅÏ¢¡£
ÄÇô£¬ÕâÖÖÓÃÀý£¬¾ÍÐèҪ״̬µÄÖ§³Ö¡£ÔÚ´¦ÀíÊý¾ÝµÄµØ·½£¬ÐèҪά»¤Ä³¸öÊý¾ÝµÄ״̬¡£
ÎÊÌâÔÚÓÚ£¬ÈçºÎÔÚ´¦ÀíÕß¿ÉÄܹҵôµÄÇé¿öϱ£³ÖÕýÈ·µÄ״̬£¿
½«×´Ì¬Î¬»¤ÔÚÄÚ´æÖпÉÄÜÊÇ×î¼òµ¥µÄ£¬µ«µÖ²»×¡crash¡£
Èç¹û½öÔÚij¸öʱ¼ä´°¿ÚÄÚά»¤×´Ì¬£¬µ±¹Òµô»òÕßʧ°Ü·¢Éú£¬ÄÇô´¦Àí¿ÉÒÔÖ±½Ó»ØÍ˵½´°¿ÚµÄÆðµãÀ´ÖØ·Å£¬µ«ÊÇ£¬Èç¹ûÕâ¸ö´°¿ÚÓÐ1СʱÄÇô³¤£¬Õâ¿ÉÄÜÐв»Í¨¡£
»¹Óиö¼òµ¥µÄ°ì·¨£¬¾ÍÊǰÑ״̬´æÔÚij¸öÔ¶³ÌµÄ´æ´¢ÏµÍ³»òÊý¾Ý¿âÖУ¬µ«ÊÇÕâ»áËðʧÊý¾ÝµÄ¾Ö²¿ÐÔ²¢²úÉúºÜ¶àµÄÍøÂç¼äÊý¾ÝÍù·µ£¨network round-trip£©¡£
»ØÒäÏ£¬ÉÏÎÄÖÐÔøÌáµ½µÄÊý¾Ý¿âÖеıíºÍlogµÄ¶ÔżÐÔ¡£
Ò»¸öÁ÷´¦Àí×é¼þ£¬¿ÉÒÔʹÓñ¾µØµÄ´æ´¢»òË÷ÒýÀ´Î¬»¤×´Ì¬£º
- Bdb
- Leveldb
- Lucene
- Fastbit
ͨ¹ý¼Ç¼¹ØÓÚ±¾µØË÷ÒýµÄchangelog£¬ÓÃÓÚÔÚcrashºó»Ö¸´×´Ì¬¡£ÕâÖÖ»úÖÆ£¬ÆäʵҲ½ÒʾÁËÒ»ÖÖÒ»°ã»¯µÄ£¬¿ÉÒԴ洢ΪÈÎÒâË÷ÒýÀàÐ͵ģ¬ÓëÊäÈëÁ÷ͬʱ±»·Ö¸î£¨co-partitioned£©µÄ״̬¡£
µ±´¦Àí½ø³Ì±ÀÀ££¬Æä¿ÉÒÔ´ÓchangelogÖлָ´Ë÷Òý£¬log³äµ±Á˽«±¾µØ×´Ì¬×ª»¯ÎªÄ³ÖÖ»ùÓÚʱ¼ä±¸·ÝµÄÔöÁ¿¼Ç¼µÄ½ÇÉ«¡£
ÕâÖÖ»úÖÆ»¹ÌṩÁËÒ»ÖÖºÜÓÅÑŵÄÄÜÁ¦£º´¦Àí¹ý³Ì±¾ÉíµÄ״̬Ҳ¿ÉÒÔ×÷Ϊlog±»¼Ç¼ÏÂÀ´£¬ÏÔÈ»£¬ÆäËüµÄ´¦Àí¹ý³Ì¿ÉÒÔ¶©ÔÄÕâ¸ö״̬¡£
½áºÏÊý¾Ý¿âÖеÄlog¼¼Êõ£¬Õë¶ÔÊý¾Ý¼¯³ÉÕâÒ»³¡¾°£¬ÍùÍù¿ÉÒÔ×ö³öºÜÇ¿´óµÄÊ£º
½«log´ÓÊý¾Ý¿âÖгéÈ¡³öÀ´£¬²¢ÔÚ¸÷ÖÖ¸÷ÑùµÄÁ÷´¦ÀíϵͳÖнøÐÐË÷Òý£¬ÄÇô£¬Ó벻ͬµÄʼþÁ÷½øÐÐjoin¾Í³ÉΪ¿ÉÄÜ¡£
2.11 Log ºÏ²¢
ÏÔÈ»£¬ÓÃlog¼Ç¼ȫʱȫÁ¿µÄ״̬±ä¸üÐÅÏ¢£¬²»Ì«¿ÉÄÜ¡£
KafkaʹÓÃÁËlogºÏ²¢»òÕßlogÀ¬»ø»ØÊÕ¼¼Êõ£º
1£© ¶ÔÓÚʼþÊý¾Ý£¬kafkaÖ»±£ÁôÒ»¸öʱ¼ä´°¿Ú£¨¿ÉÔÚʱ¼äÉÏÅäÖÃΪ¼¸Ì죬»òÕß°´¿Õ¼äÀ´ÅäÖã©
2£© ¶ÔÓÚkeyed update£¬kafka²ÉÓÃѹËõ¼¼Êõ¡£´ËÀàlog£¬¿ÉÒÔÓÃÀ´ÔÚÁíÍâµÄϵͳÖÐͨ¹ýÖØ·Å¼¼ÊõÀ´Öؽ¨Ô´ÏµÍ³µÄ״̬¡£
Èç¹û±£³ÖȫʱȫÁ¿µÄlogs£¬Ëæ×Åʱ¼äÔö³¤£¬Êý¾Ý½«»á±äµÃÔ½À´Ô½´ó£¬ÖطŵĹý³ÌÒ²»áÔ½À´Ô½³¤¡£
Kafka²»ÊǼòµ¥µØ¶ªÆúÀϵÄÈÕÖ¾ÐÅÏ¢£¬¶øÊDzÉÓúϲ¢µÄ·½Ê½£¬¶ªÆú·ÏÆúµÄ¼Ç¼£¬±ÈÈ磬ij¸öÏûÏ¢µÄÖ÷¼ü×î½ü±»¸üÐÂÁË¡£

2.12 ϵͳ¹¹½¨
2.12.1 ·Ö²¼Ê½ÏµÍ³
Log£¬ÔÚ·Ö²¼Ê½Êý¾Ý¿âµÄÊý¾ÝÁ÷ϵͳºÍÊý¾Ý¼¯³ÉÖÐËù°çÑݵĽÇÉ«ÊÇÒ»Öµģº
- ³éÏóÊý¾ÝÁ÷
- ±£³ÖÊý¾ÝÒ»ÖÂÐÔ
- ÌṩÊý¾Ý»Ö¸´ÄÜÁ¦
Äã¿ÉÒÔ½«Õû¸ö»ú¹¹ÖеÄÓ¦ÓÃϵͳºÍÊý¾ÝÁ÷£¬¿´×÷ÊÇÒ»¸öµ¥¶ÀµÄ·Ö²¼Ê½Êý¾Ý¿â¡£
½«ÃæÏò²éѯµÄ¶ÀÁ¢ÏµÍ³£¬±ÈÈçRedis , SOLR , Hive tables µÈµÈ£¬¿´×÷ÊÇÒ»ÖÖÌØ±ðµÄ¡¢Êý¾ÝÖ®ÉϵÄË÷Òý¡£
½«Storm¡¢SamzaµÈÁ÷´¦Àíϵͳ£¬¿´×öÒ»ÖÖ¾«ÐÄÉè¼Æ¹ýµÄ´¥·¢Æ÷»òÕßÎﻯÊÓͼ»úÖÆ¡£
¸÷ʽ¸÷ÑùµÄÊý¾Ýϵͳ£¬±¬·¢ÐԵijöÏÖ£¬Æäʵ£¬ÕâÖÖ¸´ÔÓÐÔÔçÒÑ´æÔÚ¡£
ÔÚ¹ØÏµÐÍÊý¾Ý¿âµÄ»Ô»ÍʱÆÚ£¨heyday£©£¬Ä³¸ö¹«Ë¾»òÕß»ú¹¹¹â¹ØÏµÐÍÊý¾Ý¿â¾ÍÓкܶàÖÖ¡£
ÏÔÈ»£¬²»¿ÉÄܽ«ËùÓеĶ«Î÷¶¼¶ª½øÒ»¸öHadoop¼¯ÈºÖУ¬ÆÚÍûÆä½â¾öËùÓеÄÎÊÌâ¡£ËùÒÔ£¬ÈçºÎ¹¹½¨Ò»¸öºÃµÄϵͳ£¬¿ÉÄÜ»áÏñÏÂÃæÕâÑù£º
¹¹½¨Ò»¸ö·Ö²¼Ê½ÏµÍ³£¬Ã¿¸ö×é¼þ¶¼ÊÇһЩºÜСµÄ¼¯Èº£¬Ã¿¸ö¼¯Èº²»Ò»¶¨ÄÜÍêÕûÌṩ°²È«ÐÔ¡¢ÐÔÄܸôÀë¡¢»òÕßÁ¼ºÃµÄÀ©Õ¹ÐÔ£¬µ«ÊÇ£¬Ã¿¸öÎÊÌâ¶¼Äܵõ½£¨×¨ÒµµØ£©½â¾ö¡£
Jay¸ç¾õµÃ£¬Ö®ËùÒÔ¸÷ʽ¸÷ÑùµÄϵͳ±¬·¢ÐԵسöÏÖ£¬¾ÍÊÇÒòΪҪ¹¹½¨Ò»¸öÇ¿´óµÄ·Ö²¼Ê½ÏµÍ³Ê®·ÖÀ§ÄÑ¡£¶øÈç¹û½«ÓÃÀýÏÞÖÆµ½Ò»Ð©¼òµ¥µÄ£¬±ÈÈç²éѯÕâÑùµÄ³¡¾°Ï£¬Ã¿¸öϵͳ¶¼ÓÐ×ã¹»µÄÄÜÁ¦È¥½â¾öÎÊÌ⣬µ«ÊÇÒª°ÑÕâЩϵͳÕûºÏÆðÀ´£¬ºÜÄÑ¡£
Jay¸ç¾õµÃÔÚδÀ´¹¹½¨ÏµÍ³ÕâʶùÓÐÈýÖÖ¿ÉÄÜ£º
1£© ±£³ÖÏÖ×´¡£ÕâÖÖÇé¿öÏ£¬Êý¾Ý¼¯³ÉÒÀÈ»ÊÇ×îÍ·´óµÄÎÊÌ⣬ËùÒÔÒ»¸öÍⲿµÄlogϵͳ¾ÍºÜÖØÒª£¨kafka£¡£©
2£© ³öÏÖÒ»¸öÇ¿´óµÄ£¨Èçͬ»Ô»ÍʱÆÚµÄ¹ØÏµÐÍÊý¾Ý¿â£©Äܽâ¾öËùÓÐÎÊÌâµÄϵͳ£¬ÕâËÆºõÓе㲻¿ÉÄÜ·¢Éú¡£
3£© ÐÂÉú´úµÄϵͳ´ó²¿·Ö¶¼¿ªÔ´£¬Õâ½ÒʾÁ˵ÚÈýÖÖ¿ÉÄÜ£ºÊý¾Ý»ù´¡ÉèÊ©¿É±»ÀëɢΪһ×é·þÎñ¡¢ÒÔ¼°ÃæÏòÓ¦ÓõÄϵͳAPI,¸÷Àà·þÎñ¸÷˾ÆäÊ£¬Ã¿¸ö¶¼²»ÍêÕû£¬È´ÄÜרҵµÎ½â¾öרÃŵÄÎÊÌ⣬Æäʵͨ¹ýÏÖ´æµÄjava¼¼ÊõÕ»¾ÍÄÜ¿´³ö¶ËÄߣº
- ZooKeeper£º½â¾ö·Ö²¼Ê½ÏµÍ³µÄͬ²½¡¢Ð×÷ÎÊÌ⣨Ҳ¿ÉÄÜÊÜÒæÓÚ¸ü¸ß³éÏó²ã´ÎµÄ×é¼þÈçhelix¡¢curator£©.
- Mesos¡¢YARN£º½â¾öÐéÄ⻯ºÍ×ÊÔ´¹ÜÀíÎÊÌâ¡£
- ǶÈëʽµÄ×é¼þLucene¡¢LevelDB£º½â¾öË÷ÒýÎÊÌâ¡£
- Netty¡¢Jetty¼°¸ü¸ß³éÏó²ã´ÎµÄFinagle¡¢rest.li½â¾öÔ¶³ÌͨѶÎÊÌâ¡£
- Avro¡¢Protocol Buffers¡¢Thrift¼°umpteen zlin£º½â¾öÐòÁл¯ÎÊÌâ¡£
- Kafka¡¢bookeeper£ºÌṩbacking logÄÜÁ¦¡£
´ÓijÖֽǶÈÀ´¿´£¬¹¹½¨ÕâÑùµÄ·Ö²¼Ê½ÏµÍ³£¬¾ÍÏñij¸ö°æ±¾µÄÀָ߻ýľһÑù¡£ÕâÏÔÈ»¸ú¸ü¹ØÐÄAPIµÄÖÕ¶ËÓû§Ã»ÓÐÌ«´ó¹ØÏµ£¬µ«ÊÇÕâ½ÒʾÁ˹¹½¨Ò»¸öÇ¿´óϵͳ²¢±£³Ö¼òµ¥ÐÔµÄÒ»ÌõµÀ·£º
ÏÔÈ»£¬Èç¹û¹¹½¨Ò»¸ö·Ö²¼Ê½ÏµÍ³µÄʱ¼ä´Ó¼¸Äê½µµ½¼¸ÖÜ£¬ÄÇô¹¹½¨Ò»¸ö¶ÀÁ¢µÄÅÓ´óϵͳµÄ¸´ÔÓÐԾͻáÏûʧ£¬¶øÕâÖÖÇé¿öµÄ³öÏÖ£¬Ò»¶¨ÊÇÒòΪ³öÏÖÁ˸ü¿É¿¿¡¢¸üÁé»îµÄ¡°»ýľ¡±¡£
2.12.2 LogÔÚϵͳ¹¹½¨ÖеĵØÎ»
Èç¹ûÒ»¸öϵͳ£¬ÓÐÁËÍⲿlogϵͳµÄÖ§³Ö£¬ÄÇôÿ¸ö¶ÀÁ¢µÄϵͳ¾Í¿ÉÒÔͨ¹ý¹²ÏílogÀ´½µµÍÆä×ÔÉíµÄ¸´ÔÓÐÔ£¬Jay¸çÈÏΪlogµÄ×÷ÓÃÊÇ£º
1) ´¦ÀíÊý¾ÝÒ»ÖÂÐÔÎÊÌâ¡£ÎÞÂÛÊÇÁ¢¼´Ò»ÖÂÐÔ»¹ÊÇ×îÖÕÒ»ÖÂÐÔ£¬¶¼¿ÉÒÔͨ¹ýÐòÁл¯¶ÔÓÚ½ÚµãµÄ²¢·¢²Ù×÷À´´ïµ½¡£
2) ÔÚ½Úµã¼äÌṩÊý¾Ý¸´ÖÆ¡£
3) Ìṩ¡°Ìá½»¡±µÄÓïÒå¡£±ÈÈ磬ÔÚÄãÈÏΪÄãµÄд²Ù×÷²»»á¶ªÊ§µÄÇé¿öϽøÐвÙ×÷È·ÈÏ¡£
4) ÌṩÍⲿϵͳ¿É¶©ÔĵÄÊý¾ÝÔ´£¨feeds£©¡£
5) µ±½ÚµãÒòʧ°Ü¶ø¶ªÊ§Êý¾Ýʱ£¬Ìṩ»Ö¸´µÄÄÜÁ¦£¬»òÕßÖØÐ¹¹½¨Ðµĸ´Öƽڵ㡣
6) ´¦Àí½Úµã¼äµÄ¸ºÔؾùºâ¡£
ÒÔÉÏ£¬´ó¸ÅÊÇÒ»¸öÍêÕûµÄ·Ö²¼Ê½ÏµÍ³ÖÐÓ¦ÌṩµÄ´ó²¿·Ö¹¦ÄÜÁË£¨Jay¸çȷʵ°®Log£¡£©£¬Ê£ÏµľÍÊǿͻ§¶ËµÄAPIºÍÖîÈçһЩ¹¹½¨Ë÷ÒýµÄÊÂÁË£¬±ÈÈçÈ«ÎÄË÷ÒýÐèÒª»ñÈ¡ËùÓеÄpartitions£¬¶øÕë¶ÔÖ÷¼üµÄ²éѯ£¬Ö»ÐèÒªÔÚij¸öpartitionÖлñÈ¡Êý¾Ý¡£
£¨ÄǰÑʣϵÄÊÂÇéÒ²½»´úϰɣ¬Jay¸çÍþÎ䣡£©
ϵͳ¿É±»·ÖΪÁ½¸öÂß¼×é¼þ£¨ÕâÇ¿´óµÄÀí½âºÍ¹¦Á¦£©£º
1£© Log²ã
2£© ·þÎñ²ã
Log²ã£¬ÒÔÐòÁл¯µÄ¡¢ÓÐÐòµÄ·½Ê½²¶»ñ״̬µÄ±ä»¯£¬¶ø·þÎñ²ã£¬Ôò´æ´¢Íⲿ²éѯÐèÒªµÄË÷Òý£¬±ÈÈçÒ»¸öK-V´æ´¢¿ÉÄÜÐèÒªB-tree¡¢sstableË÷Òý£¬¶øÒ»¸öËÑË÷·þÎñÐèÒªµ¹ÅÅË÷Òý¡£
д²Ù×÷¼È¿ÉÒÔÖ±½ÓÈëlog²ã£¬Ò²¿ÉÒÔͨ¹ý·þÎñ²ã×ö´úÀí¡£Ð´Èëlog»á²úÉúÒ»¸öÂß¼ÉϵÄʱ¼ä´Á£¨logµÄË÷Òý£©£¬±ÈÈçÒ»¸öÊý×ÖID£¬Èç¹ûϵͳpartition»¯ÁË£¬ÄÇô£¬·þÎñ²ãºÍlog²ã»áÓµÓÐÏàͬµÄpartitions£¨µ«Æä¸÷×ԵĻúÆ÷Êý¿ÉÄܲ»Í¬£©¡£

·þÎñ²ã¶©Ôĵ½log²ã£¬²¢ÇÒÒÔ×î¿ìµÄËÙ¶È¡¢°´log´æ´¢µÄ˳Ðò×·log£¬½«Êý¾ÝºÍ״̬±ä»¯Í¬²½½ø×Ô¼ºµÄ±¾µØË÷ÒýÖС£
¿Í»§¶Ë½«»áµÃµ½read-your-writeµÄÓïÒ壺
ͨ¹ý¶ÔÈÎÒ»Ò»¸ö½Úµã£¬ÔÚ²éѯʱЯ´øÆäдÈëʱµÄʱ¼ä´Á£¬·þÎñ²ãµÄ½ÚµãÊÕµ½´Ë²éѯ£¬Í¨¹ýºÍÆä±¾µØË÷Òý±È½Ïʱ¼ä´Á£¬Èç¹û±ØÒª£¬ÎªÁË·ÀÖ¹·µ»Ø¹ýÆÚµÄÀÏÊý¾Ý£¬ÍƳÙÇëÇóµÄÖ´ÐУ¬Ö±µ½´Ë·þÎñ½ÚµãµÄË÷Òýͬ²½¸úÉÏÁËʱ¼ä´Á¡£
·þÎñ²ãµÄ½Úµã£¬Ò²ÐíÐèÒª¡¢Ò²Ðí²»ÐèÒªÖªµÀleaderµÄ¸ÅÄî¡£Ôںܶà¼òµ¥µÄÓÃÀýÖУ¬·þÎñ²ã¿É²»¹¹½¨leader½Úµã£¬ÒòΪlog¾ÍÊÇÊÂʵµÄÀ´Ô´¡£
»¹ÓÐÒ»¸öÎÊÌ⣬ÈçºÎ´¦Àí½Úµãʧ°ÜºóµÄ»Ö¸´ÎÊÌâ¡£¿ÉÒÔÕâÑù×ö£¬ÔÚlogÖб£ÁôÒ»¸ö¹Ì¶¨´óСµÄʱ¼ä´°¿Ú£¬Í¬Ê±¶ÔÊý¾Ýά»¤¿ìÕÕ¡£Ò²¿ÉÒÔÈÃlog±£ÁôÊý¾ÝµÄ È«Á¿±¸·Ý²¢Ê¹ÓÃlogºÏ²¢¼¼ÊõÍê³Élog×ÔÉíµÄÀ¬»ø»ØÊÕ¡£ÕâÖÖ·½·¨£¬½«·þÎñ²ãµÄÖڶิÔÓÐÔÒÆÖÁlog²ã£¬ÒòΪ·þÎñ²ãÊÇϵͳÏà¹Ø£¨system- specific£©µÄ£¬¶ølog²ãÈ·¿ÉÒÔͨÓá£
»ùÓÚlogϵͳ£¬¿ÉÒÔÌṩһ×éÍ걸µÄ¡¢¹©¿ª·¢Ê¹Óõġ¢¿É×÷ΪÆäËüϵͳµÄETLÊý¾ÝÔ´¡¢²¢¹©ÆäËüϵͳ¶©ÔĵÄAPI¡£
Full Stack £¡£º

ÏÔÈ»£¬Ò»¸öÒÔlogΪºËÐĵķֲ¼Ê½ÏµÍ³£¬Æä±¾ÉíÁ¢¼´³ÉΪÁË¿É¶ÔÆäËüϵͳÌṩÊý¾Ý×°ÔØÖ§³Ö¼°Êý¾ÝÁ÷´¦ÀíµÄ½ÇÉ«¡£Í¬ÑùµÄ£¬Ò»¸öÁ÷´¦Àíϵͳ£¬Ò²¿ÉÒÔͬʱÏû·Ñ¶à¸öÊý¾ÝÁ÷£¬²¢Í¨¹ý¶ÔÕâЩÊý¾ÝÁ÷½øÐÐË÷ÒýÈ»ºóÊä³öµÄÁíÒ»¸öϵͳ£¬À´¶ÔÍâÌṩ·þÎñ¡£
»ùÓÚlog²ãºÍ·þÎñ²ãÀ´¹¹½¨ÏµÍ³£¬Ê¹µÃ²éѯÏà¹ØµÄÒòËØÓëϵͳµÄ¿ÉÓÃÐÔ¡¢Ò»ÖÂÐÔµÈÒòËØ½âñî¡£
Ò²ÐíºÜ¶àÈËÈÏΪÔÚlogÖÐά»¤Êý¾ÝµÄµ¥¶À±¸·Ý£¬ÌرðÊÇ×öÈ«Á¿Êý¾Ý¿½±´Ì«ÀË·Ñ¡¢Ì«Éݳޣ¬µ«ÊÂʵ²¢·ÇÈç´Ë£º
1£© linkedin£¨×¢£º2013Ä꣩µÄkafkaÉú²ú¼¯ÈºÎ¬»¤ÁËÿÊý¾ÝÖÐÐÄ75TBµÄÊý¾Ý£¬¶øÓ¦Óü¯ÈºÐèÒªµÄ´æ´¢¿Õ¼äºÍ´æ´¢Ìõ¼þ£¨SSD+¸ü¶àµÄÄڴ棩±Èkafka¼¯ÈºÒª¸ß¡£
2£© È«ÎÄËÑË÷µÄË÷Òý£¬×îºÃÈ«²¿×°ÈëÄڴ棬¶ølogsÒòΪ¶¼ÊÇÏßÐÔ¶Áд£¬ËùÒÔ¿ÉÒÔÀûÓÃÁ®¼ÛµÄ´óÈÝÁ¿´ÅÅÌ¡£
3£© ÒòΪkafka¼¯ÈºÊµ¼ÊÔË×÷ÔÚ¶à¸ö¶©ÔÄÕßµÄģʽ֮Ï£¬¶à¸öϵͳÏû·ÑÊý¾Ý£¬ËùÒÔlog¼¯ÈºµÄ¿ªÏú±»Ì¯»¹ÁË¡£
4£© ËùÓÐÒÔÉÏÔÒò£¬µ¼Ö»ùÓÚÍⲿlogϵͳ£¨kafka»òÕßÀàËÆÏµÍ³£©µÄ¿ªÏú±äµÃ·Ç³£Ð¡¡£
2.13 ½áÓï
Jay¸çÔÚ×îºó£¬²»½öºñµÀµØÁôÏÂÁ˺ܶàѧÊõ¡¢¹¤³ÌÉϵÄÓмÛÖµµÄÂÛÎĺͲο¼Á´½Ó£¬»¹ºÜǫѷµØÁôÏÂÁËÕâ¾ä»°£º
If you made it this far you know most of what I know about logs.
ÖÕ¡£
|