ããã«ã¡ã¯ïŒç§ã®ååã¯DmitryShelamovã§ãVivid.Moneyã§ã«ã¹ã¿ããŒã±ã¢éšéã®ããã¯ãšã³ãéçºè ãšããŠåããŠããŸããåœç€Ÿã¯ããšãŒããã諞åœåãã®ã€ã³ã¿ãŒããããã³ãã³ã°ãµãŒãã¹ãäœæããã³éçºãããšãŒãããã®æ°èäŒæ¥ã§ããããã¯éå¿çãªã¿ã¹ã¯ã§ããã€ãŸãããã®æè¡çãªå®è£ ã«ã¯ãé«è² è·ã«èããããžãã¹èŠä»¶ã«å¿ããŠæ¡åŒµã§ãããããèããããã€ã³ãã©ã¹ãã©ã¯ãã£ãå¿ èŠã§ãã
ãã®ãããžã§ã¯ãã¯ãããŸããŸãªèšèªã®æ°åã®ãµãŒãã¹ãå«ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«åºã¥ããŠããŸãããããã«ã¯ãScalaãJavaãKotlinãPythonãããã³Goãå«ãŸããŸããåŸè ã¯ç§ãã³ãŒããæžãå Žæãªã®ã§ããã®ã·ãªãŒãºã®å®éã®äŸã§ã¯äž»ã«GoïŒããã³ããã€ãã®docker-composeïŒã䜿çšããŸãã
ãã€ã¯ããµãŒãã¹ã®æäœã«ã¯ç¬èªã®ç¹åŸŽãããããã®1ã€ããµãŒãã¹éã®éä¿¡ã®ç·šæã§ãããããã®éä¿¡ã®çžäºäœçšã¢ãã«ã¯ åæãŸã㯠éåæã§ãããã·ã¹ãã å šäœã®ããã©ãŒãã³ã¹ãšéå®³èæ§ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãã
éåæéä¿¡
ãããã£ãŠã2ã€ã®ãã€ã¯ããµãŒãã¹ïŒAãšBïŒããããšæ³åããŠã¿ãŸãããããããã®éã®éä¿¡ã¯APIãä»ããŠå®è¡ããããã€ã¯ããµãŒãã¹ã¢ãããŒãã§èŠå®ãããŠããããã«ãçžäºã®å éšå®è£ ã«ã€ããŠã¯äœãç¥ããªããšæ³å®ããŸãããããã®éã§éä¿¡ãããããŒã¿ã®åœ¢åŒã¯äºåã«åæãããŠããŸãã
ç§ãã¡ã®åã®ã¿ã¹ã¯ã¯æ¬¡ã®ãšããã§ããããã¢ããªã±ãŒã·ã§ã³ããå¥ã®ã¢ããªã±ãŒã·ã§ã³ãžã®ããŒã¿ã®è»¢éããã§ããã°æå°éã®é å»¶ã§æŽçããå¿ èŠããããŸãã
æãåçŽãªã±ãŒã¹ã§ã¯ãã¿ã¹ã¯ã¯åæå¯Ÿè©±ã«ãã£ãŠå®çŸãããŸã ãAãã¢ããªã±ãŒã·ã§ã³Bã«èŠæ±ãéä¿¡ããåŸããµãŒãã¹BããããåŠçããèŠæ±ãæ£åžžã«åŠçããããã©ããã«å¿ããŠãå¿çãéä¿¡ããŸãã ãã®å¿çãæåŸ ãããµãŒãã¹Aã
èŠæ±ã«å¯Ÿããå¿çãåä¿¡ãããŠããªãå ŽåããµãŒãã¹AãBã«ãã®èŠæ±ãç¹°ãè¿ãããšãã§ããïŒäŸãã°ãBæ¹å¿çãéä¿¡ããåã«æ¥ç¶ããŸãã¯Aãã¿ã€ã ã¢ãŠãã«ããè±èœïŒ
äžæ¹ã§ããã®ãããªçžäºäœçšã¢ãã«ã¯ãèŠæ±ããšã«ããŒã¿é ä¿¡ç¶æ ã®ç¢ºå®æ§ãäžããŸãéä¿¡è ããããŒã¿ãåä¿¡è ã«ãã£ãŠåä¿¡ããããã©ãããããã³å¿çã«å¿ããŠããã«ã©ã®ãããªã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããã確å®ã«ç¥ã£ãŠããå Žåã
äžæ¹ã§ãæ¯æã代åã¯åŸ ã£ãŠããŸããèŠæ±ãéä¿¡ããåŸããµãŒãã¹AïŒãŸãã¯èŠæ±ãå®è¡ãããã¹ã¬ããïŒã¯ãå¿çãåä¿¡ããããå éšããžãã¯ã«åŸã£ãŠèŠæ±ã倱æãããšèŠãªããŸã§ãããã¯ããããã®åŸãããã«ã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã
åé¡ã¯ãåŸ æ©ãšããŠã³ã¿ã€ã ãçºçããã ãã§ãªãããããã¯ãŒã¯éä¿¡ã®é å»¶ãé¿ããããªãããšã§ããäž»ãªåé¡ã¯ããã®é å»¶ã®äºæž¬äžå¯èœæ§ã§ãããã€ã¯ããµãŒãã¹ã¢ãããŒãã®éä¿¡ã®åå è ã¯ãäºãã®å®è£ ã®è©³çްãç¥ããªããããèŠæ±ã宿çã«åŠçãããŠããã®ããããŒã¿ãåéä¿¡ããå¿ èŠãããã®ãââããèŠæ±åŽã«åžžã«æããã§ãããšã¯éããŸããã
ãã®çžäºäœçšã®ã¢ãã«ã«æ®ã£ãŠããã®ã¯ãåã«åŸ ã€ããšã ãã§ããå€åããç§ãå€å1æéããããŠããã®æ°åã¯ãããŒã¿åŠçã®éçšã§BããããªåŠçãªã©ã®éãæäœãå®è¡ããå Žåãéåžžã«çŸå®çã§ãã
ãããããåé¡ã¯ããªãã«ãšã£ãŠéèŠã§ã¯ãªãããã«æãããŸãã-äžæ¹ã®éçãããäžæ¹ã®éçãçããã®ãåŸ ã£ãŠããŸããæå€±ã¯å€§ããã§ããïŒ
ãã®åé¡ãããå人çãªãã®ã«ããããã«ããµãŒãã¹Aãé»è©±ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ã§ãããBããã®å¿çãåŸ ã£ãŠããéãç»é¢ã«èªã¿èŸŒã¿äžã®ã¢ãã¡ãŒã·ã§ã³ã衚瀺ãããŠãããšããŸãããµãŒãã¹Bãå¿çãããŸã§ã¢ããªã±ãŒã·ã§ã³ã䜿ãç¶ããããšã¯ã§ãããåŸ ã€å¿ èŠããããŸããäžæãªæéãããªãã®æéã¯ãã³ãŒãã®å®è¡æéãããã¯ããã«äŸ¡å€ãããããšãèãããšã
ãã®ãããªç²ãã¯æ¬¡ã®ããã«è§£æ±ºãããŸããã€ã³ã¿ã©ã¯ã·ã§ã³ã®åå è ã2ã€ã®ããã£ã³ããã«åå²ããŸããæé©åããŠãé«éã«åäœã§ããªããã®ïŒãããªåŠçïŒãšãäžå®æé以äžåŸ æ©ã§ããªããã®ïŒé»è©±ã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ïŒããããŸãã
次ã«ãåæã眮ãæããŸã ãããã®éã®çžäºäœçšã«ïŒäžéšã¯ãããŒã¿ãé ä¿¡ãããåä¿¡è ãµãŒãã¹ã«ãã£ãŠåŠçãããŠããããšã確èªããããã«ãä»ã®ãåŸ ã€ããšãäœåãªããããŠããå ŽåïŒ ã¯éåæã§ããããšãä»äºã®ã¢ãã«ããã㊠éä¿¡ãããå¿ãããã-ããã®å¿çãåŸ ããã«ããã®å Žåã«ã¯ããµãŒãã¹Aãäœæ¥ãç¶ããŸãB.
ãããããã®å Žåã転éãæåããããšãã©ã®ããã«ç¢ºèªã§ããŸããïŒããšãã°ããããªããããªãã¹ãã£ã³ã°ãµãŒãã¹ã«ã¢ããããŒãããåŸããããªãããŠã³ããŒããããµãŒãã¹ããµãŒãã¹ããã»ããµãããããªãå°éãããšãã確èªãåä¿¡ããªãã£ãããããŠãŒã¶ãŒã«ããããªã¯åŠçãããå¯èœæ§ããããŸãããåŠçãããªãå¯èœæ§ããããŸãããšããã¡ãã»ãŒãžã衚瀺ããããšã¯ã§ããŸãããäœäºããªã圌ã
ãã®åé¡ã®è§£æ±ºçã®1ã€ãšããŠããµãŒãã¹AãšãµãŒãã¹Bã®éã«ã¬ã€ã€ãŒã远å ã§ããŸããããã¯ãéä¿¡è ãšåä¿¡è ã«ãšã£ãŠéœåã®ããã¬ãŒãã§ã®ããŒã¿é ä¿¡ã®äžæçãªã¹ãã¬ãŒãžããã³ä¿èšŒãšããŠæ©èœããŸãããããã£ãŠããµãŒãã¹ãåé¢ããããšãã§ã ãŸããããã®åæçžäºäœçšã¯æœåšçã«åé¡ã«ãªãå¯èœæ§ããããŸãã
- åä¿¡ãµãŒãã¹ãç°åžžçµäºãããšãã«å€±ãããããŒã¿ã¯ãéä¿¡ãµãŒãã¹ãäœæ¥ãç¶ç¶ããŠããéã«ãã¹ããŒãžã³ã°ã¹ãã¢ããå床ååŸã§ããããã«ãªããŸããããããã£ãŠãé ä¿¡ä¿èšŒã¡ã«ããºã ãååŸããŸãã
- ãã®ã¬ã€ã€ãŒã¯ãåä¿¡è ãå°çãããšãã§ã¯ãªããåŠçããããšãã«ããŒã¿ãæäŸããããããåä¿¡è ãè² è·ãµãŒãžããä¿è·ããŸãã
- ãããŒãã¥ãŒãã£ãŒãªã¯ãšã¹ãïŒãããªã¬ã³ããªã³ã°ãªã©ïŒããã®ã¬ã€ã€ãŒã«æž¡ãããšãã§ããããã«ãªããã¢ããªã±ãŒã·ã§ã³ã®é«ééšåãšäœééšåã®éã®æ¥ç¶æ§ãäœäžããŸãã
éåžžã®DBMSã¯ãäžèšã®èŠä»¶ã«éåžžã«é©ããŠããŸãããã®äžã®ããŒã¿ã¯ãæ å ±ã®æå€±ãå¿é ããããšãªãé·æéä¿åããããšãã§ããŸããåä¿¡è ã®éè² è·ãé€å€ãããŸããããã¯ãåä¿¡è ãæå³ããã¬ã³ãŒããèªã¿åãããŒã¹ãšéãèªç±ã«éžæã§ããããã§ããåŠçã®ç¢ºèªã¯ã察å¿ããããŒãã«ã®èªã¿åãã¬ã³ãŒãã«ããŒã¯ãä»ããããšã§å®çŸã§ããŸãã
ãã ããããŒã¿äº€æããŒã«ãšããŠDBMSãéžæãããšãè² è·ãå¢å ããã«ã€ããŠããã©ãŒãã³ã¹ã®åé¡ãçºçããå¯èœæ§ããããŸããããã¯ãã»ãšãã©ã®ããŒã¿ããŒã¹ããã®ãŠãŒã¹ã±ãŒã¹åãã«èšèšãããŠããªãããã§ãããŸããå€ãã®DBMSã«ã¯ãæ¥ç¶ãããã¯ã©ã€ã¢ã³ããåä¿¡è ãšéä¿¡è ïŒPub / SubïŒã«åé¢ããæ©èœããããŸããããã®å ŽåãããŒã¿é ä¿¡ããžãã¯ãã¯ã©ã€ã¢ã³ãåŽã§å®è£ ããå¿ èŠããããŸãã
ãããããããŒã¿ããŒã¹ãããå°éçãªãã®ãå¿ èŠã§ãã
ã¡ãã»ãŒãžãããŒã«ãŒ
ã¡ãã»ãŒãžãããŒã«ãŒïŒã¡ãã»ãŒãžãã¥ãŒïŒã¯ããã/ãµãã¢ãã«ã䜿çšããŠéä¿¡è ãµãŒãã¹ããåä¿¡è ãµãŒãã¹ã«ããŒã¿ãä¿åããã³é ä¿¡ãã圹å²ãæ ãå¥åã®ãµãŒãã¹ã§ãã
ãã®ã¢ãã«ã¯ãéåæéä¿¡ã2ã€ã®åœ¹å²ã®æ¬¡ã®ããžãã¯ã«åŸãããšãåæãšããŠããŸãã
- åºç瀟ã¯ãããã€ãã®å±æ§ã«ãã£ãŠã°ã«ãŒãåãããã¡ãã»ãŒãžãšããŠæ°ããæ å ±ãå ¬éããŸãã
- ãµãã¹ã¯ã©ã€ããŒã¯ãç¹å®ã®å±æ§ãæã€ã¡ãã»ãŒãžã¹ããªãŒã ããµãã¹ã¯ã©ã€ãããããããåŠçããŸãã
ã¡ãã»ãŒãžã°ã«ãŒãå屿§ã¯ ãã¥ãŒã§ããããã¯ãããŒã¿ã¹ããªãŒã ãåé¢ããããã«å¿ èŠã§ããããã«ãããåä¿¡è ã¯ãé¢å¿ã®ããã¡ãã»ãŒãžã°ã«ãŒãã«ã®ã¿ãµãã¹ã¯ã©ã€ãã§ããŸãã
ããŸããŸãªã³ã³ãã³ããã©ãããã©ãŒã ã§ã®ãµãã¹ã¯ãªãã·ã§ã³ãšåæ§ã«ãç¹å®ã®äœæè ã«ãµãã¹ã¯ã©ã€ãããããšã§ãèå³ã®ãããã®ã ããèŠèŽããããã«éžæããŠã³ã³ãã³ãããã£ã«ã¿ãªã³ã°ã§ããŸãã
ãã¥ãŒã¯ãã©ã€ã¿ãŒãšãªãŒããŒã®éã«åºããéä¿¡ãã£ãã«ãšèããããšãã§ããŸããã©ã€ã¿ãŒã¯ã¡ãã»ãŒãžããã¥ãŒã«å ¥ãããã®åŸããã®ãã¥ãŒã«ãµãã¹ã¯ã©ã€ãããŠãããªãŒããŒã«ã¡ãã»ãŒãžããããã·ã¥ãããŸãã 1人ã®ãªãŒããŒãäžåºŠã«1ã€ã®ã¡ãã»ãŒãžãåä¿¡ãããšãä»ã®ãªãŒããŒã¯ãã®ã¡ãã»ãŒãžã«ã¢ã¯ã»ã¹ã§ããªããªããŸãã
äžæ¹ãã¡ãã»ãŒãžã¯ããŒã¿ã®åäœã§ãããéåžžã¯ã¡ãã»ãŒãžæ¬æãšãããŒã«ãŒã®ã¡ã¿ããŒã¿ã§æ§æãããŸãã
äžè¬ã«ãæ¬æã¯ç¹å®ã®åœ¢åŒã®ãã€ãã®ã³ã¬ã¯ã·ã§ã³ã§ãã
åä¿¡è ã¯ãã¡ãã»ãŒãžã®åä¿¡åŸã«ããã«åŠçããããã«æ¬äœãéã·ãªã¢ã«åã§ããããã«ããããã«ããã®åœ¢åŒãç¥ã£ãŠããå¿ èŠããããŸãã
ä»»æã®äŸ¿å©ãªåœ¢åŒã䜿çšã§ããŸãããåŸæ¹äºææ§ã«ã€ããŠèŠããŠããããšãéèŠã§ããããã¯ãããšãã°ããã€ããªProtobufããã³ApacheAvroãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠãµããŒããããŠããŸãã
AMQPïŒAdvanced Message Queuing ProtocolïŒã«åºã¥ãã»ãšãã©ã®ã¡ãã»ãŒãžãããŒã«ãŒã¯ããã®ååã«åŸã£ãŠåäœããŸãããã®ååã¯ããã¥ãŒãä»ãããã©ãŒã«ããã¬ã©ã³ãã¡ãã»ãŒãžã³ã°ã®æšæºã説æãããããã³ã«ã§ãã
ãã®ã¢ãããŒãã«ã¯ãããã€ãã®éèŠãªå©ç¹ããããŸãã
- åéåã匱ããããã¯ãéåæã¡ãã»ãŒãžéä¿¡ã«ãã£ãŠå®çŸãããŸããã€ãŸããéä¿¡è ã¯ããŒã¿ãããããããåä¿¡è ããã®å¿çãåŸ ããã«äœæ¥ãç¶ããŸããåä¿¡è ã¯ãéä¿¡ããããšãã§ã¯ãªããéœåã®ãããšãã«ã¡ãã»ãŒãžãèªã¿åã£ãŠåŠçããŸãããã®å Žåããã¥ãŒã¯éµäŸ¿é éå¡ãããªãã®æçŽã眮ãã¡ãŒã«ããã¯ã¹ãšæ¯èŒããããšãã§ããããªãã¯ãããããªãã«åããšãã«ããããæŸããŸãã
- . , ( , ), - .
, . - . - . , , : , , , -, .
- . âat least onceâ âat most onceâ.
ããããäžåºŠã¯ã¡ãã»ãŒãžã®ååŠçãæé€ããŸããããããã倱ãããããšãèš±ããŸãããã®å ŽåããããŒã«ãŒã¯ãéä¿¡ããŠå¿ãããããŒã¹ã§åä¿¡è ã«ã¡ãã»ãŒãžãé ä¿¡ããŸããåä¿¡è ãäœããã®çç±ã§æåã®è©Šè¡ã§ã¡ãã»ãŒãžãåŠçã§ããªãã£ãå ŽåããããŒã«ãŒã¯ã¡ãã»ãŒãžãåéä¿¡ããŸããã äžæ¹ã
å°ãªããšã1åã¯ãåä¿¡è ãã¡ãã»ãŒãžãåä¿¡ããããšãä¿èšŒããŸãããåãã¡ãã»ãŒãžãå床åŠçãããå¯èœæ§ããããŸãã
å€ãã®å Žåããã®ä¿èšŒã¯ãåä¿¡è ãäœããã®çç±ã§ã¡ãã»ãŒãžãåŠçã§ããªãã£ãå Žåã«ã¡ãã»ãŒãžãåéä¿¡ããããã«èŠå®ããAck / NackïŒç¢ºèªå¿ç/åŠå®ç¢ºèªå¿çïŒã¡ã«ããºã ã䜿çšããŠå®çŸ ãããŸãã
ãããã£ãŠããããŒã«ãŒã«ãã£ãŠéä¿¡ãããïŒãã ããŸã åŠçãããŠããªãïŒãã¹ãŠã®ã¡ãã»ãŒãžã«ã¯ã3ã€ã®æçµç¶æ ããããŸããåä¿¡è ãAckãè¿ãã ïŒåŠçãæåããïŒãNackãè¿ãã ïŒåŠçã倱æããïŒããŸãã¯æ¥ç¶ãåæãããæåŸã®2ã€ã®ã·ããªãªã§ã¯ãã¡ãã»ãŒãžã®åéä¿¡ãšååŠçãè¡ãããŸãã
ãã ããåä¿¡è ãã¡ãã»ãŒãžãæ£åžžã«åŠçããå Žåã§ãããããŒã«ãŒã¯ã¡ãã»ãŒãžãåéä¿¡ã§ããŸããããšãã°ãåä¿¡è ãã¡ãã»ãŒãžãåŠçããããAckä¿¡å·ããããŒã«ãŒã«éä¿¡ããã«çµäºããå Žå ã§ãã
ãã®å ŽåããããŒã«ãŒã¯ã¡ãã»ãŒãžããã¥ãŒã«æ»ãããã®åŸåã³åŠçãããŸããéçºè ãåä¿¡è åŽã§éè€ãæé€ããã¡ã«ããºã ãæäŸããŠããªãå Žåããšã©ãŒãããŒã¿ã®ç Žæã«ã€ãªããå¯èœæ§ããããŸãã ãexactlyonceã
ãšåŒã°ããå¥ã®é ä¿¡ä¿èšŒãããããšã¯æ³šç®ã«å€ã ãŸãã忣ã·ã¹ãã ã§å®çŸããããšã¯å°é£ã§ããããããæãæãŸããããšã§ãã ãã®ç¹ã§ãåŸã§èª¬æããApache Kafkaã¯ãåžå Žã§å ¥æå¯èœãªå€ãã®ãœãªã¥ãŒã·ã§ã³ã®èæ¯ã«å¯ŸããŠæå©ã«éç«ã£ãŠããŸããããŒãžã§ã³0.11以éãKafkaã¯1åéãã®é ä¿¡ä¿èšŒãæäŸããŸã
ã¯ã©ã¹ã¿ããã³ãã©ã³ã¶ã¯ã·ã§ã³å ã§ã¯ãAMQPãããŒã«ãŒã¯ãã®ãããªä¿èšŒãæäŸã§ããŸãããKafkaã§ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¯å¥ã®æçš¿ã®ãããã¯ã§ãã仿¥ã¯ãApacheKafkaã«ã€ããŠçè§£ããããšããå§ããŸãã
Apache Kafka
ã¯ã©ã¹ã¿ãŒããã€ã¹ã®æŠç¥å³ããã«ãã«ã«ã€ããŠã®è©±ãå§ããããšã¯ãçè§£ããã®ã«åœ¹ç«ã€ããã«æãããŸãã
å¥ã®KafkaãµãŒããŒã¯ãããŒã«ãŒãšåŒã°ããŸã ããããŒã«ãŒã¯ã¯ã©ã¹ã¿ãŒã圢æãããããã®ãããŒã«ãŒã®1ã€ãã管çæäœã®äžéšãåŒãç¶ãã³ã³ãããŒã©ãŒãšããŠæ©èœããŸãïŒçŽ«è²ã§ããŒã¯ãããŠããŸãïŒã
ãããŒã«ãŒã³ã³ãããŒã©ãŒã®éžæã¯ãå¥ã®ãµãŒãã¹ã®è²¬ä»»ã§ããZooKeeperã¯ããããŒã«ãŒã®ãµãŒãã¹æ€åºãå®è¡ããæ§æãä¿åãããããŒã«ãŒéã§æ°ãããªãŒããŒã®é åžã«åå ããã»ãšãã©ã®å ŽåãåãªãŒããŒã®æåŸã«èªã¿åãããã¡ãã»ãŒãžã«é¢ããæ å ±ãä¿åããŸããããã¯éèŠãªãã€ã³ãã§ããããã®èª¿æ»ã§ã¯ã1ã€ã®ã¬ãã«ãäžããŠãåã ã®ãããŒã«ãŒãå éšã§ã©ã®ããã«æ©èœããããæ€èšããå¿ èŠããããŸãã
ã³ããããã°
Kafkaã®åºç€ãšãªãããŒã¿æ§é ã¯ãã³ããããã°ãŸãã¯ã³ããããã°ãšåŒã°ããŸãã
ã³ããããã°ã«è¿œå ãããæ°ããã¢ã€ãã ã¯å³å¯ã«æåŸã«é 眮ããããã®åŸã®é åºã¯å€æŽãããªããããåã ã®ãã°ã¢ã€ãã ã«ã¯åžžã«è¿œå ãããé åºã§ãªã¹ããããŸãã
ã³ããããã°ã®é åºä»ãããããã£ã䜿çšãããšãããšãã°ãããŒã¿ããŒã¹ã¬ããªã«éã®æçµçãªæŽåæ§ã®ååã«åŸã£ãŠã¬ããªã±ãŒã·ã§ã³ã«äœ¿çšã§ããŸãããã¹ã¿ãŒããŒãã®ããŒã¿ã«å ãããã倿Žã®ãã°ãä¿åãããã¹ã¬ãŒãããŒãã§é 次é©çšããããšã§ããã¹ã¿ãŒãšåæãããã®ã«ããŒã¿ãç§»åã§ããŸãããã€ã³ãã
Kafkaã§ã¯ããããã®ãã°ã¯ããŒãã£ã·ã§ã³ãšåŒã°ãããã°ã« ä¿åãããŠããããŒã¿ã¯ ã¡ãã»ãŒãžã
ã¡ãã»ãŒãžãšã¯äœã§ããïŒããã¯Kafkaã®ããŒã¿ã®åºæ¬åäœã§ãããä»»æã®æ å ±ãæž¡ãããšãã§ããåãªããã€ãã®ã³ã¬ã¯ã·ã§ã³ã§ãããã®å å®¹ãšæ§é ã¯Kafkaãšã¯ç¡é¢ä¿ã§ããã¡ãã»ãŒãžã«ã¯ããã€ãã®ã»ããã§ãããããŒãå«ããããšãã§ããŸãããã®ããŒã䜿çšãããšãã¡ãã»ãŒãžãããŒãã£ã·ã§ã³ã«é åžããããã®ã¡ã«ããºã ããã现ããå¶åŸ¡ã§ããŸãã
ããŒãã£ã·ã§ã³ãšãããã¯
ãªããããéèŠãªã®ã§ããããïŒäžèŠãããšãããŒãã£ã·ã§ã³ã¯Kafkaã®ãã¥ãŒã«é¡äŒŒããŠããªãã®ãäºå®ã§ããæè¡çã«ã¯ãã¡ãã»ãŒãžãã¥ãŒã¯ã¡ãã»ãŒãžãããŒãã°ã«ãŒãåããã³ç®¡çããææ®µã§ãããç¹å®ã®ãªãŒããŒãç¹å®ã®ããŒã¿ã¹ããªãŒã ã®ã¿ããµãã¹ã¯ã©ã€ãã§ããããã«ããããšãæãåºããŠãã ããã
ãããã£ãŠãKafkaã§ã¯ããã¥ãŒã®æ©èœã¯ããŒãã£ã·ã§ã³ã§ã¯ãªãããããã¯ã«ãã£ãŠå®è¡ãã ãŸããè€æ°ã®ããŒãã£ã·ã§ã³ã1ã€ã®å ±éã®ã¹ããªãŒã ã«çµåããå¿ èŠããããŸããåã«è¿°ã¹ãããã«ãããŒãã£ã·ã§ã³èªäœã¯ãã³ããããã°ããŒã¿æ§é ã«åŸã£ãŠé åºä»ãããã圢åŒã§ã¡ãã»ãŒãžãæ ŒçŽããŸãããããã£ãŠã1ã€ã®ãããã¯ã«é¢é£ããã¡ãã»ãŒãžã¯ã2ã€ã®ç°ãªãããŒãã£ã·ã§ã³ã«æ ŒçŽã§ãããªãŒããŒã¯èŠæ±ã«å¿ããŠããããããããåŒãåºãããšãã§ããŸãã
ãããã£ãŠãKafkaã®äžŠååŠçã®åäœã¯ãããã¯ïŒãŸãã¯AMQPãããŒã«ãŒã®ãã¥ãŒïŒã§ã¯ãªããããŒãã£ã·ã§ã³ã§ãããã®ãããKafkaã¯ãè€æ°ã®ãããŒã«ãŒã§åããããã¯ã«é¢é£ããããŸããŸãªã¡ãã»ãŒãžãåæã«åŠçã§ãããããã¯å šäœã§ã¯ãªãåã ã®ããŒãã£ã·ã§ã³ã®ã¿ãè€è£œã§ãããããAMQPãããŒã«ãŒãšæ¯èŒããŠæè»æ§ãšã¹ã±ãŒã©ããªãã£ãåäžããŸãã
ãã«ã¢ã³ãããã·ã¥
èªè ã«é¢é£ããŠã誀ã£ãŠããã«ã¢ãŠãããšããèšèã䜿çšããªãã£ãããšã«æ³šæããŠãã ããã
åè¿°ã®ãããŒã«ãŒã§ã¯ãã¡ãã»ãŒãžã¯ããã¥ãŒã®åœ¢åŒã®æ¡ä»¶ä»ããã€ããä»ããŠåä¿¡è ã«ããã·ã¥ïŒpushïŒããããšã§é ä¿¡ãã ãŸãã
Kafkaã§ã¯ãé ä¿¡ããã»ã¹èªäœã¯ããã§ã¯ãããŸãããåãªãŒããŒèªèº«ããèªåãèªã¿åãããŒãã£ã·ã§ã³ããã¡ãã»ãŒãžããã«ïŒãã«ïŒãã責任ã ãããŸãã
è£œé æ¥è ã¯ãã¡ãã»ãŒãžãäœæããããã«ããŒãšããŒãã£ã·ã§ã³çªå·ãæ·»ä»ããŸããã¡ãã»ãŒãžã«ããŒããªãå Žåã¯ãããŒãã£ã·ã§ã³çªå·ãã©ã³ãã ã«éžæã§ããŸãïŒã©ãŠã³ãããã³ïŒã
ããã«å¶åŸ¡ãå¿ èŠãªå Žåã¯ãã¡ãã»ãŒãžã«ããŒãæ·»ä»ããŠãããããã·ã¥é¢æ°ã䜿çšããããã¡ãã»ãŒãžã®ããŒãã£ã·ã§ã³ãéžæããããã®ç¬èªã®ã¢ã«ãŽãªãºã ãäœæã§ããŸãã圢æåŸããããã¥ãŒãµãŒã¯Kafkaã«ã¡ãã»ãŒãžãéä¿¡ããKafkaã¯ããããã£ã¹ã¯ã«ä¿åããŠãã©ã®ããŒãã£ã·ã§ã³ã«å±ããŠããããèšé²ããŸãã
ååä¿¡è ã¯ãé¢å¿ã®ãããããã¯ã®ç¹å®ã®ããŒãã£ã·ã§ã³ïŒãŸãã¯è€æ°ã®ããŒãã£ã·ã§ã³ïŒã«å²ãåœãŠãããæ°ããã¡ãã»ãŒãžã衚瀺ããããšãæåŸã«èªãã ã¡ãã»ãŒãžã«æ³šæããªãããã³ããããã°ã®æ¬¡ã®é ç®ãèªã¿åãä¿¡å·ãåãåããŸãããããã£ãŠã忥ç¶ãããšã次ã«èªãã¡ãã»ãŒãžãããããŸãã
ãã®ã¢ãããŒãã®å©ç¹ã¯äœã§ããïŒ
- . , , . , ( Retention Policy, ), .
- Message Replay. , . , , .
- . , ( ) â , .
- . (batch) , , . : (1 ), .
ãã®ã¢ãããŒãã®æ¬ ç¹ã«ã¯ãåé¡ã®ããã¡ãã»ãŒãžãåŠçããããšãå«ãŸããŸããåŸæ¥ã®ãããŒã«ãŒãšã¯ç°ãªããå£ããã¡ãã»ãŒãžïŒåä¿¡è ã®æ¢åã®ããžãã¯ãèæ ®ããŠããŸãã¯éã·ãªã¢ã«åã®åé¡ã®ããã«åŠçã§ããªãïŒã¯ãåä¿¡è ãã¡ãã»ãŒãžãæ£ããåŠçããããšãåŠç¿ãããŸã§ãç¡æéã«åãã¥ãŒã€ã³ã°ã§ããŸããã
Kafkaã§ã¯ãããã©ã«ãã§ã¯ãåä¿¡è ãå£ããã¡ãã»ãŒãžã«å°éãããšããŒãã£ã·ã§ã³ããã®ã¡ãã»ãŒãžã®èªã¿åãã忢ããã¹ããããããŠããã«åŠçããããã«ãéé¢ããã¥ãŒïŒããããã¬ã¿ãŒãã¥ãŒããšãåŒã°ããŸãïŒã«ã¹ããŒããããŸã§ ãããŒãã£ã·ã§ã³ã®èªã¿åããç¶è¡ããŸããåäœããªãã§ãããã
ãŸããKafkaã§ã¯ãïŒAMQPãããŒã«ãŒãšæ¯èŒããŠïŒã¡ãã»ãŒãžã®åªå é äœãå®è£ ããã®ãããå°é£ã§ããããã¯ãããŒãã£ã·ã§ã³å ã®ã¡ãã»ãŒãžã远å ãããé åºã§å³å¯ã«ä¿åããã³èªã¿åããããšããäºå®ã«çŽæ¥èµ·å ããŠããŸãã Kafkaã§ãã®å¶éãåé¿ããæ¹æ³ã®1ã€ã¯ãevents_lowãevents_mediumãevents_highãªã©ãåªå 床ã®ç°ãªãã¡ãã»ãŒãžã«å¯ŸããŠããã€ãã®ãããã¯ãäœæãïŒãããã¯ã¯ååã®ã¿ãç°ãªããŸãïŒã ã³ã³ã·ã¥ãŒããŒã¢ããªã±ãŒã·ã§ã³åŽã§ãªã¹ãããããããã¯ã®åªå 床èªã¿åãã®ããžãã¯ãå®è£ ããããšã§ãã
ãã®ã¢ãããŒãã®ãã1ã€ã®æ¬ ç¹ã¯ãåãªãŒããŒãæåŸã«èªã¿åã£ãã¡ãã»ãŒãžã®èšé²ãããŒãã£ã·ã§ã³ã«ä¿æããå¿ èŠããããšããäºå®ã«é¢é£ããŠããŸããããŒãã£ã·ã§ã³ã®æ§é ãåçŽã§ããããããã®æ å ±ã¯ãšåŒã°ããæŽæ°å€ã®åœ¢åŒã§è¡šç€ºãããŸãã ãªãã»ããïŒãªãã»ããïŒããªãã»ããã䜿çšãããšãåãªãŒããŒãçŸåšèªãã§ããæçš¿ãå€å¥ã§ããŸãããªãã»ããã«æãè¿ãé¡äŒŒç¹ã¯ãé åå ã®èŠçŽ ã®ã€ã³ããã¯ã¹ã§ãããèªã¿åãããã»ã¹ã¯ãèŠçŽ ã®ã€ã³ããã¯ã¹ãšããŠã€ãã¬ãŒã¿ãŒã䜿çšããŠã«ãŒãå ã®é åããŠã©ãŒã¯ã¹ã«ãŒããã®ãšäŒŒãŠããŸãã
ãã ãããã®æ¬ ç¹ã¯ãããŒãžã§ã³0.9以éã®KafkaãåãŠãŒã¶ãŒã®ãªãã»ãããç¹å¥ãªãããã¯__consumer_offsetsã«æ ŒçŽãããšããäºå®ã«ãã£ãŠçžæ®ºãããŸã ïŒããŒãžã§ã³0.9ãŸã§ã¯ããªãã»ããã¯ZooKeeperã«æ ŒçŽãããŠããŸããïŒã
ããã«ãåä¿¡è åŽã§çŽæ¥ãªãã»ããã远跡ã§ããŸãã
ã¹ã±ãŒãªã³ã°ãããè€éã«ãªããŸããAMQPãããŒã«ãŒã§ã¯ãã¡ãã»ãŒãžãããŒã®åŠçãé«éåããããã«ããªãŒããŒãµãŒãã¹ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ã远å ãããããã1ã€ã®ãã¥ãŒã«ãµãã¹ã¯ã©ã€ãããã ãã§ããããŒã«ãŒèªäœã®æ§æã倿Žããå¿ èŠããªãããšãæãåºããŠãã ããã
ãã ããKafkaã§ã¯AMQPãããŒã«ãŒãããã¹ã±ãŒãªã³ã°ãããå°é£ã§ããããšãã°ããªãŒããŒã®å¥ã®ã€ã³ã¹ã¿ã³ã¹ã远å ããŠåãããŒãã£ã·ã§ã³ã«èšå®ãããšãäž¡æ¹ã®ã€ã³ã¹ã¿ã³ã¹ãåãããŒã¿ã»ãããèªã¿åããããå¹çããŒãã«ãªããŸãã
ãããã£ãŠãKafkaã¹ã±ãŒãªã³ã°ã®åºæ¬çãªã«ãŒã«ã¯ããããã¯ã®ç«¶åãããªãŒããŒïŒã€ãŸããåãåŠçããžãã¯ïŒã¬ããªã«ïŒãå®è£ ãããµãŒãã¹ã®ã°ã«ãŒãïŒã®æ°ããã®ãããã¯ã®ããŒãã£ã·ã§ã³ã®æ°ãè¶ ããŠã¯ãªããªããšããããšã§ããè¶ ããªãå ŽåããªãŒããŒã®ãã¢ãåãããŒã¿ã®ã»ãããåŠçããŸãã
æ¶è²»è ã°ã«ãŒã
ç«¶åãããªãŒããŒã1ã€ã®ããŒãã£ã·ã§ã³ãèªã¿åãç¶æ³ãåé¿ããããã«ãKafkaã§ã¯ãã³ã³ã·ã¥ãŒããŒã°ã«ãŒãå ã®1ã€ã®ãµãŒãã¹ã®è€æ°ã®ã¬ããªã«ãçµã¿åãããŠãZookeeperã1ã€ã®ããŒãã£ã·ã§ã³ã«1ã€ã®ãªãŒããŒã®ã¿ãå²ãåœãŠãã®ãéäŸ ã§ãã
ãªãŒããŒã¯ããŒãã£ã·ã§ã³ã«çŽæ¥ãã€ã³ããããŠããããïŒéåžžããªãŒããŒã¯ãããã¯å ã®ããŒãã£ã·ã§ã³ã®æ°ã«ã€ããŠäœãç¥ããŸããïŒãZooKeeperã¯ãæ°ãããªãŒããŒãæ¥ç¶ããããšãã³ã³ã·ã¥ãŒããŒã°ã«ãŒãã®åå è ãåé åžããŠãåããŒãã£ã·ã§ã³ã«ãªãŒããŒã1ã€ã ãã«ãªãããã«ããŸãã
èªè ã¯ãKafkaã«æ¥ç¶ãããšãã«æ¶è²»è ã°ã«ãŒããæå®ããŸãã
åæã«ã1ã€ã®ããŒãã£ã·ã§ã³ã«ç°ãªãåŠçããžãã¯ãæã€è€æ°ã®ãªãŒããŒãã¶ãäžããããšã劚ãããã®ã¯äœããããŸãããããšãã°ããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ããšã®ã€ãã³ãã®ãªã¹ãããããã¯ã«ä¿åãããããã®ã€ãã³ãã䜿çšããŠåãããŒã¿ã®è€æ°ã®ãã¥ãŒãçæãïŒããšãã°ãããžãã¹ã¢ããªã¹ãã補åã¢ããªã¹ããã·ã¹ãã ã¢ããªã¹ããããã³Yarovayaããã±ãŒãžã®å ŽåïŒãããããé©åãªãªããžããªã«éä¿¡ãããšããŸãã
ããããããã§ãKafkaããããã¯ãšããŒãã£ã·ã§ã³ã®æ§é ã䜿çšããŠãããšããäºå®ã«ãã£ãŠåŒãèµ·ããããå¥ã®åé¡ã«çŽé¢ããå¯èœæ§ããããŸãã Kafkaã¯ããããã¯å ã®ã¡ãã»ãŒãžã®é åºãä¿èšŒããã®ã§ã¯ãªããããŒãã£ã·ã§ã³å ã§ã®ã¿ä¿èšŒããŸããããã¯ãããšãã°ããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«é¢ããã¬ããŒããçæããããããçŸç¶ã®ã¹ãã¬ãŒãžã«éä¿¡ããå Žåã«éèŠã«ãªãå¯èœæ§ããããŸãã
ãã®åé¡ã解決ããã«ã¯ãéã®æ¹æ³ããšãããšãã§ããŸãã1ã€ã®ãšã³ãã£ãã£ã«é¢é£ãããã¹ãŠã®ã€ãã³ãïŒããšãã°ãåãuser_idã«é¢é£ãããã¹ãŠã®ã¢ã¯ã·ã§ã³ïŒãåžžã«åãããŒãã£ã·ã§ã³ã«è¿œå ãããå Žåããããã¯ãããã¯å ã§é åºä»ããããŸããåãããŒãã£ã·ã§ã³å ã«ããããã®é åºã¯Kafkaã«ãã£ãŠä¿èšŒãããŠããŸãã
ãããè¡ãã«ã¯ãã¡ãã»ãŒãžã®ããŒãå¿ èŠã§ããããšãã°ãããŒããããã·ã¥ãèšç®ããŠã¡ãã»ãŒãžã远å ããããŒãã£ã·ã§ã³ãéžæããã¢ã«ãŽãªãºã ã䜿çšããå ŽåãåãããŒãæã€ã¡ãã»ãŒãžã¯1ã€ã®ããŒãã£ã·ã§ã³ã«åé¡ãããããšãä¿èšŒããããããã¡ãã»ãŒãžã®åä¿¡è ãåŒãåºãããŸãããããã¯ã«è¿œå ãããé åºã§åãããŒã䜿çšããŸãã
ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«é¢ããäžé£ã®ã€ãã³ããããå ŽåãããŒãã£ã·ã§ãã³ã°ããŒã¯user_idã«ããããšãã§ããŸãã
ä¿æããªã·ãŒ
次ã«ãä¿æããªã·ãŒã«ã€ããŠèª¬æããŸãã
ããã¯ãè¿œå æ¥ã®ãããå€ïŒæéããŒã¹ã®ä¿æããªã·ãŒïŒãŸãã¯ãã£ã¹ã¯ã®å æã¹ããŒã¹ïŒ ãµã€ãºããŒã¹ã®ä¿æããªã·ãŒïŒãè¶ ãããšãã«ãã£ã¹ã¯ããã¡ãã»ãŒãžãåé€ããããã®èšå®ã§ã ã
- TBRPã7æ¥éæ§æãããšã7æ¥ããå€ããã¹ãŠã®ã¡ãã»ãŒãžã«åŸã§åé€ããããã®ãã©ã°ãä»ããããŸããã€ãŸãããã®èšå®ã«ããã幎霢ã®ãããå€ãäžåãã¡ãã»ãŒãžããã€ã§ãèªã¿åãããšãã§ããããã«ãªããŸããæéãåãããªç§ã§èšå®ã§ããŸãã
- SBRPãåæ§ã«æ©èœããŸãããã£ã¹ã¯å®¹éã®ãããå€ãè¶ ãããšãã¡ãã»ãŒãžã¯æåŸããåé€ããããã«ããŒã¯ãããŸãïŒå€ãïŒãã¡ãã»ãŒãžã®åé€ã¯ç¬æã«è¡ãããªããããå æãããŠãããã£ã¹ã¯é åã¯åžžã«èšå®ã§æå®ãããŠããããããããã«å€§ãããªãããšã«æ³šæããŠãã ããããã€ãåäœã§èšå®ããŸãã
ä¿æããªã·ãŒã¯ãã¯ã©ã¹ã¿ãŒå šäœãšåã ã®ãããã¯ã®äž¡æ¹ã«å¯ŸããŠæ§æã§ããŸããããšãã°ããŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã远跡ãããããã¯å ã®ã¡ãã»ãŒãžã¯æ°æ¥éä¿åã§ããããã·ã¥éç¥ã¯æ°æéä¿åã§ããŸããé¢é£æ§ã«å¿ããŠããŒã¿ãåé€ããããšã§ããã£ã¹ã¯é åãç¯çŽããŸããããã¯ãã¡ã€ã³ãã£ã¹ã¯ã¹ãã¬ãŒãžãšããŠSSDãéžæãããšãã«éèŠã«ãªãå¯èœæ§ããããŸãã
å§çž®ããªã·ãŒ
ãã£ã¹ã¯å®¹éãæé©åãããã1ã€ã®æ¹æ³ã¯ãå§çž®ããªã·ãŒã䜿çšããããšã§ãããã®èšå®ã§ã¯ãåããŒã®æåŸã®ã¡ãã»ãŒãžã®ã¿ãä¿åããåã®ã¡ãã»ãŒãžããã¹ãŠåé€ã§ããŸããããã¯ãææ°ã®å€æŽã®ã¿ã«é¢å¿ãããå Žåã«åœ¹ç«ã¡ãŸãã
Kafkaã®äœ¿çšäŸ
- . : . , , , (Clickhouse !) . 
Customer Care Vivid.Money CRM. - . , . , - ( ) , , .
, ( ) . , , , , . - . , .
- (commit log). , - / .
, , «» .
Customer Care CRM- .
Kafka
- â , ;
- â (pull) , .  (, ) Consumer Group, ZooKeeper, , , , ;
- . , , , . , () ;
- , , AMQP , â . , ;
- . , , --, â .