ã¡ãã»ãŒãžãã¥ãŒã®ä»çµã¿ â éåæåŠçãæ¯ãããäŒèšæ¿ã
ã¡ãã»ãŒãžãã¥ãŒã£ãŠããèããã©ãçµå±ãªã«ãããŠãã®ïŒ
ã²ãšèšã§ãããšãäŒèšæ¿ãã ããã·ã¹ãã Aãããã®ä»äºãã£ãšããŠããšã¡ãã»ãŒãžãæžã蟌ãã§ãã·ã¹ãã Bããããèªãã§åŠçãããAãšBãçŽæ¥ããåãããªããŠããã®ããã€ã³ãã ãã
çŽæ¥ããåãããªããšäœãããããã®ïŒ
ããšãã°ECãµã€ãã§æ³šæãå ¥ã£ããšããåšåº«ã®åŒãåœãŠã»æ±ºæžã»ã¡ãŒã«éä¿¡ãå šéšåæçã«ãããšãã©ãã1ã€ãé ãã ãã§ç»é¢ãåºãŸãããããã¥ãŒã«ã泚æãå ¥ã£ããããšæžããŠããã°ãåã·ã¹ãã ãèªåã®ããŒã¹ã§åŠçã§ããããããççµåã»éåæåŠçãšåŒã¶ãã ã
ãªãã»ã©ïŒãã¥ãŒã®äžã£ãŠã©ããªã£ãŠãã®ïŒ
åºæ¬ã¯ ProducerïŒéãåŽïŒâ Queue â ConsumerïŒåãåãåŽïŒã®FIFOãã€ãŸãå å ¥ãå åºãã ããéµäŸ¿ãã¹ãã«æçŽãå ¥ããé çªã«å±ãã€ã¡ãŒãžã ããé ä¿¡ã¢ãã«ã«ã¯å€§ãã2çš®é¡ãã£ãŠã1察1ã®ãPoint-to-Pointããšã1察å€ã®ãPub/SubãããããPub/Subã¯ãããã¯ã«è³Œèªç»é²ããå šå¡ã«ã¡ãã»ãŒãžãå±ãä»çµã¿ã ãã
RabbitMQã£ãŠããååãèŠããã©ãã©ãããä»çµã¿ãªã®ïŒ
RabbitMQã¯AMQPãããã³ã«ããŒã¹ã®ã¡ãã»ãŒãžãããŒã«ãŒã ããç¹åŸŽçãªã®ã¯ExchangeïŒäº€æå±ïŒãšããä»çµã¿ã§ãProducerã¯ãã¥ãŒã«çŽæ¥éãããããªããŠExchangeã«éããExchangeãã«ãŒãã£ã³ã°ããŒãšãã€ã³ãã£ã³ã°ã®ã«ãŒã«ã«åŸã£ãŠãé©åãªãã¥ãŒã«æ¯ãåãããã ããã€ã¬ã¯ãã»ãããã¯ã»ãã¡ã³ã¢ãŠããªã©æ¯ãåããã¿ãŒã³ãéžã¹ãã®ã匷ã¿ã ãã
ConsumerãåŠçã«å€±æãããã©ããªãã®ïŒ
RabbitMQã«ã¯AckïŒç¢ºèªå¿çïŒã®ä»çµã¿ãããããConsumerããåŠçå®äºããšAckãè¿ããŸã§ã¡ãã»ãŒãžã¯ãã¥ãŒã«æ®ãã倱æãããåé ä¿¡ããããã ãããã§ãäœåºŠã倱æããã¡ãã»ãŒãžã¯ãããã¬ã¿ãŒãã¥ãŒïŒDLQïŒã«ç§»ããDLQã«æºãŸã£ãã¡ãã»ãŒãžãåŸãã調æ»ã»ååŠçã§ãããããããŒã¿ã倱ããã«é害察å¿ã§ãããã ãã
ãããApache Kafkaã¯ã©ãéãã®ïŒ
Kafkaã¯ã¡ãã»ãŒãžãããããã¯ãã«æžã蟌ãã§ããããã¯ããããŒãã£ã·ã§ã³ãã«åå²ããã®ã倧ããªç¹åŸŽã ããããŒãã£ã·ã§ã³ããšã«é åºãä¿èšŒãããããã倧éããŒã¿ã䞊ååŠçãã€ã€é çªãå®ãããããã«Consumer Groupãšããä»çµã¿ã§ãã°ã«ãŒãå ã®åConsumerãå¥ã ã®ããŒãã£ã·ã§ã³ãæ åœãããããConsumerãå¢ããã ãã§ã¹ã±ãŒã«ã¢ãŠãã§ãããã ã
Kafkaã®ãªãã»ããã£ãŠãªã«ïŒ
ãªãã»ããã¯ããŒãã£ã·ã§ã³å ã®ã¡ãã»ãŒãžã®éãçªå·ã ããConsumerã¯ãèªåãã©ããŸã§èªãã ããããªãã»ããã§ç®¡çãããRabbitMQã¯èªãã ãæ¶ãããã©ãKafkaã¯ã¡ãã»ãŒãžãä¿ææéäžãã£ãšæ®ãããããªãã»ãããå·»ãæ»ãã°éå»ã®ããŒã¿ãååŠçã§ãããããããã°éçŽãã€ãã³ããœãŒã·ã³ã°ã«åŒ·ãçç±ã ãã
å®éã©ããªå Žé¢ã§äœ¿ãããŠãã®ïŒ
代衚çãªã®ã¯æ³šæåŠçïŒæ±ºæžâåšåº«âé éãéåæã«é£æºïŒãã¡ãŒã«éä¿¡ïŒå€§ééä¿¡ããã¥ãŒã§å¶åŸ¡ïŒããã°éçŽïŒåãµãŒããŒã®ãã°ãKafkaã«éããŠåæåºç€ãžæµãïŒã ãããã€ã¯ããµãŒãã¹éã®é£æºã«ãæ¬ ãããªããã
ã¡ãã»ãŒãžã£ãŠçµ¶å¯Ÿã«1åã ãå±ãããã«ã§ããã®ïŒ
å®ã¯ããã忣ã·ã¹ãã æå€§ã®é£åã®1ã€ãªãã ãé ä¿¡ä¿èšŒã«ã¯3çš®é¡ãã£ãŠãAt-most-onceïŒæå€§1åãå±ããªãããšãããïŒãAt-least-onceïŒæäœ1åãéè€ããããšãããïŒãExactly-onceïŒã¡ããã©1åïŒããããã¯ãŒã¯é害ãConsumeråèµ·åãèãããšãçŽç²ãªExactly-onceã¯ã»ãŒäžå¯èœãšèšãããŠãããã
ãã£ããããã¿ããªã©ãããŠãã®ïŒ
Kafkaã®å Žåã0.11以éã§ãåªçãããã¥ãŒãµãŒããå°å ¥ãããŠãProducerâBrokeréã®éè€ãé²ããããã«ãªã£ãããConsumeråŽã¯ãã©ã³ã¶ã¯ã·ã§ã³APIãšçµã¿åãããããšã§ãExactly-once semanticsããå®çŸããŠãããã©ãå³å¯ã«ã¯BrokerãšConsumerã®éã§At-least-onceãåªçåŠçã§è£ã£ãŠãã圢ãªãã ãã¡ãªã¿ã«LinkedInã§ã¯Kafkaã§1æ¥ãããæ°å ä»¶ã®ã¡ãã»ãŒãžãåŠçããŠããããèŠæš¡ãæ¡éãã ããã