Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¡¸Ê¼þÇý¶¯¼Ü¹¹¡¹Ê¼þËÝÔ´£¬CQRS£¬Á÷´¦ÀíºÍKafkaÖ®¼äµÄ¸´ÔÓ¹ØÏµ
 
×÷Õߣº Äϼ«Õæ¾ý
  1182  次浏览      29
 2021-12-2
 
±à¼­ÍƼö:
ÔÚ±¾ÎÄÖУ¬ÎÒ½«½øÒ»²½Ì½ÌÖÕâЩÏë·¨£¬²¢Õ¹Ê¾Á÷´¦Àí£¨ÓÈÆäÊÇKafka Streams£©ÈçºÎ°ïÖú½«Ê¼þÔ´ºÍCQRS¸¶Öîʵ¼ù¡£
À´×ÔÓÚ³¬¼¶¼Ü¹¹Ê¦ ,ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

ʼþËÝÔ´×÷ΪһÖÖÓ¦ÓóÌÐò¼Ü¹¹Ä£Ê½Ô½À´Ô½Á÷ÐС£Ê¼þÔ´Éæ¼°½«Ó¦ÓóÌÐò½øÐеÄ״̬¸ü¸Ä½¨Ä£ÎªÊ¼þµÄ²»¿É±äÐòÁлò¡°ÈÕÖ¾¡±¡£Ê¼þÔ´²»ÊÇÔÚÏÖ³¡ÐÞ¸ÄÓ¦ÓóÌÐòµÄ״̬£¬¶øÊǽ«´¥·¢×´Ì¬¸ü¸ÄµÄʼþ´æ´¢ÔÚ²»¿É±äµÄÈÕÖ¾ÖУ¬²¢½«×´Ì¬¸ü¸Ä½¨Ä£Îª¶ÔÈÕÖ¾ÖÐʼþµÄÏìÓ¦¡£ÎÒÃÇÖ®Ç°ÔøÐ´¹ýÓйØÊ¼þÔ´£¬Apache Kafka¼°ÆäÏà¹ØÐÔµÄÎÄÕ¡£ÔÚ±¾ÎÄÖУ¬ÎÒ½«½øÒ»²½Ì½ÌÖÕâЩÏë·¨£¬²¢Õ¹Ê¾Á÷´¦Àí£¨ÓÈÆäÊÇKafka Streams£©ÈçºÎ°ïÖú½«Ê¼þÔ´ºÍCQRS¸¶Öîʵ¼ù¡£

ÈÃÎÒÃǾٸöÀý×Ó¡£¿¼ÂÇÒ»¸öÀàËÆÓÚFacebookµÄÉç½»ÍøÂçÓ¦ÓóÌÐò£¨¾¡¹ÜÍêÈ«ÊǼÙÉèµÄ£©£¬µ±Óû§¸üÐÂÆäFacebook¸öÈË×ÊÁÏʱ»á¸üиöÈË×ÊÁÏÊý¾Ý¿â¡£µ±Óû§¸üÐÂÆä¸öÈË×ÊÁÏʱ£¬ÐèҪ֪ͨ¶à¸öÓ¦ÓóÌÐò-ËÑË÷Ó¦ÓóÌÐò£¬ÒÔ±ã¿ÉÒÔ½«Óû§µÄ¸öÈË×ÊÁÏÖØÐ±àÖÆË÷ÒýÒÔ±ã¿ÉÒÔÔÚ¸ü¸ÄµÄÊôÐÔÉϽøÐÐËÑË÷£»ÐÂÎŶ©ÔÄÔ´Ó¦ÓóÌÐò£¬ÒÔ±ãÓû§µÄÁªÏµ¿ÉÒÔÕÒµ½ÓйظöÈË×ÊÁϸüеÄÐÅÏ¢£»Êý¾Ý²Ö¿âETLÓ¦ÓóÌÐò½«×îеĸÅÒªÎļþÊý¾Ý¼ÓÔØµ½Ö§³Ö¸÷ÖÖ·ÖÎö²éѯµÈµÄÖÐÑëÊý¾Ý²Ö¿âÖС£

»ùÓÚʼþÔ´µÄ¼Ü¹¹

ʼþÀ´Ô´Éæ¼°¸ü¸ÄÅäÖÃÎļþWebÓ¦ÓóÌÐò£¬ÒÔ½«ÅäÖÃÎļþ¸üн¨Ä£ÎªÊ¼þ£¨·¢ÉúµÄÖØÒªÊ¼þ£©£¬²¢½«ÆäдÈëÖÐÑëÈÕÖ¾£¨ÀýÈçKafkaÖ÷Ì⣩¡£ÔÚÕâÖÖÇé¿öÏ£¬ËùÓÐÐèÒªÏìÓ¦ÅäÖÃÎļþ¸üÐÂʼþµÄÓ¦ÓóÌÐò£¬Ö»Ðè¶©ÔÄKafkaÖ÷Ìâ²¢´´½¨¸÷×ÔµÄÎﻯÊÓͼ-¿ÉÒÔд»º´æ£¬ÔÚElasticsearchÖÐΪʼþ½¨Á¢Ë÷Òý»ò¼òµ¥µØ¼ÆËãin -ÄÚ´æ¾ÛºÏ¡£¸öÈ˵µ°¸WebÓ¦ÓóÌÐò±¾ÉíÒ²¶©ÔÄÁËÏàͬµÄKafkaÖ÷Ì⣬²¢½«¸üÐÂÄÚÈÝдÈë¸öÈ˵µ°¸Êý¾Ý¿â¡£

ʼþËÝÔ´£ºÒ»Ð©È¨ºâ

ʹÓÃʼþÔ´¶ÔÓ¦ÓóÌÐò½øÐн¨Ä£ÓÐÐí¶àÓŵã-ËüÌṩÁ˶ԶÔÏó½øÐеÄÿ¸ö״̬¸ü¸ÄµÄÍêÕûÈÕÖ¾£»Òò´Ë¹ÊÕÏÅųý¸ü¼ÓÈÝÒס£Í¨¹ý½«Óû§Òâͼ±íʾΪ²»¿É±äʼþµÄÓÐÐòÈÕÖ¾£¬Ê¼þԴΪÆóÒµÌṩÁËÉóºËºÍºÏ¹æÐÔÈÕÖ¾£¬Õ⻹¾ßÓÐÌṩÊý¾ÝÔ´µÄ¶îÍâºÃ´¦¡£ËüÖ§³Öµ¯ÐÔÓ¦ÓóÌÐò£»»Ø¹öÓ¦ÓóÌÐòµÈÓÚµ¹ÍËʼþÈÕÖ¾ºÍÖØÐ´¦ÀíÊý¾Ý¡£¾ßÓнϺõÄÐÔÄÜÌØµã£»Ð´ÈëºÍ¶ÁÈ¡¿ÉÒÔ¶ÀÁ¢Ëõ·Å¡£ËüʵÏÖÁËËÉÉ¢ñîºÏµÄÓ¦ÓóÌÐò ¼Ü¹¹ ¡£ËüʹÏò»ùÓÚ΢·þÎñµÄ ¼Ü¹¹ ¹ý¶É±äµÃ¸üÈÝÒס£µ«×îÖØÒªµÄÊÇ£º

ʼþÔ´Ö§³Ö¹¹½¨Ç°Ïò¼æÈݵÄÓ¦ÓóÌÐò ¼Ü¹¹ £¬¼´½«À´¿ÉÒÔÌí¼Ó¸ü¶àÐèÒª´¦Àíͬһʼþµ«´´½¨²»Í¬ÊµÀý»¯ÊÓͼµÄÓ¦ÓóÌÐòµÄÄÜÁ¦¡£

¶ÔÓÚÉÏÊöÓŵ㣬ҲÓÐһЩȱµã¡£Ê¼þÔ´¾ßÓиü¸ßµÄѧϰÇúÏߣ»ÕâÊÇÒ»¸öİÉúµÄбà³ÌÄ£ÐÍ¡£Ê¼þÈÕÖ¾¿ÉÄÜÉæ¼°¸ü¶àµÄ²éѯ¹¤×÷£¬ÒòΪËüÐèÒª½«Ê¼þת»»ÎªÊʺϲéѯµÄËùÐèÎﻯ״̬¡£

ÄÇÊǶÔʼþÔ´ºÍһЩȨºâµÄ¿ìËÙ½éÉÜ¡£±¾ÎÄÎÞÒâ̽ÌÖʼþÔ´µÄϸ½Ú»òÌᳫÆäÓÃ;¡£Äú¿ÉÒÔÔÚ´Ë´¦ÔĶÁÓйØÊ¼þÀ´Ô´ºÍ¸÷ÖÖÕÛÖÔ·½·¨µÄ¸ü¶àÐÅÏ¢¡£

Kafka×÷ΪʼþËÝÔ´µÄÖ§Öù

ʼþÔ´ÓëApache KafkaÏà¹Ø¡£ÕâÊÇÈçºÎ½øÐеÄ-ʼþÀ´Ô´É漰ά»¤¶à¸öÓ¦ÓóÌÐò¿ÉÒÔ¶©ÔĵIJ»¿É±äʼþÐòÁС£KafkaÊÇÒ»ÖÖ¸ßÐÔÄÜ£¬µÍÑÓ³Ù£¬¿ÉÀ©Õ¹ºÍ³Ö¾ÃµÄÈÕÖ¾£¬Òѱ»È«ÇòÊýǧ¼Ò¹«Ë¾Ê¹Ó㬲¢¾­¹ýÁË´ó¹æÄ£µÄʵս²âÊÔ¡£Òò´Ë£¬KafkaÊǴ洢ʼþµÄ×ÔȻ֧Öù£¬Í¬Ê±Ïò»ùÓÚʼþÔ´µÄÓ¦ÓóÌÐò ¼Ü¹¹ ·¢Õ¹¡£

ʼþËÝÔ´ºÍCQRS

´ËÍ⣬ʼþÔ´ºÍCQRSÓ¦ÓóÌÐò ¼Ü¹¹ ģʽҲÏà¹Ø¡£ÃüÁî²éѯÔðÈθôÀ루CQRS£©ÊÇ×î³£ÓÃÓÚʼþÔ´µÄÓ¦ÓóÌÐò ¼Ü¹¹ ģʽ¡£CQRSÉæ¼°ÔÚÄÚ²¿½«Ó¦ÓóÌÐò·ÖΪÁ½²¿·Ö-ÃüÁî¶ËÃüÁîϵͳ¸üÐÂ״̬£¬¶ø²éѯ¶ËÔòÔÚ²»¸ü¸Ä״̬µÄÇé¿öÏ»ñÈ¡ÐÅÏ¢¡£CQRSÌṩÁ˹Ø×¢µã·ÖÀë¨CÃüÁî»òд¶ËÓëÒµÎñÓйأ»Ëü²»¹ØÐIJéѯ£¬Êý¾ÝÉϵIJ»Í¬ÊµÀý»¯ÊÓͼ£¬Õë¶ÔÐÔÄܵÄʵÀý»¯ÊÓͼµÄ×î¼Ñ´æ´¢µÈ¡£ÁíÒ»·½Ã棬²éѯ»ò¶ÁÈ¡¶ËÈ«²¿Óë¶ÁÈ¡·ÃÎÊȨÏÞÓйء£ÆäÖ÷ҪĿµÄÊÇʹ²éѯ¿ìËÙ¸ßЧ¡£

ʹÓÃʼþÔ´ºÍCQRÖØ¹¹Ó¦ÓóÌÐò

ʼþÔ´ÓëCQRSÒ»Æð¹¤×÷µÄ·½Ê½ÊÇʹӦÓóÌÐòµÄÒ»²¿·ÖÔÚ¶ÔʼþÈÕÖ¾»òKafkaÖ÷ÌâµÄдÈë¹ý³ÌÖжԸüнøÐн¨Ä£¡£ÕâÓëʼþ´¦Àí³ÌÐòÅä¶Ô£¬¸Ãʼþ´¦Àí³ÌÐò¶©ÔÄKafkaÖ÷Ì⣬¸ù¾ÝÐèҪת»»Ê¼þ£¬²¢½«ÊµÀý»¯ÊÓͼдÈë¶ÁÈ¡´æ´¢¡£×îºó£¬Ó¦ÓóÌÐòµÄ¶ÁÈ¡²¿·ÖÕë¶Ô¶ÁÈ¡´æ´¢·¢³ö²éѯ¡£

CQRS¾ßÓÐһЩÓŵã-Ëüʹ¸ºÔØÓëдÈëºÍ¶ÁÈ¡·ÖÀ룬´Ó¶ø¿ÉÒÔ·Ö±ðËõ·Å¡£¸÷ÖÖ¶Áȡ·¾¶±¾Éí¿ÉÒÔ¶ÀÁ¢Ëõ·Å¡£´ËÍ⣬¿ÉÒÔÕë¶ÔÓ¦ÓóÌÐòµÄ²éѯģʽÓÅ»¯¶ÁÈ¡´æ´¢£»Í¼ÐÎÓ¦ÓóÌÐò¿ÉÒÔ½«Neo4jÓÃ×÷Æä¶ÁÈ¡´æ´¢£¬ËÑË÷Ó¦ÓóÌÐò¿ÉÒÔʹÓÃLuceneË÷Òý£¬¶ø¼òµ¥µÄÄÚÈÝ·þÎñWebÓ¦ÓóÌÐò¿ÉÒÔʹÓÃǶÈëʽ»º´æ¡£³ýÁ˼¼ÊõÓÅÊÆÖ®Í⣬CQRS»¹¾ßÓÐ×éÖ¯ÉϵÄÓÅÊÆ-ͨ¹ý½«Ð´ÈëºÍ¶Áȡ·¾¶·ÖÀ룬Äú¿ÉÒÔʹ¸ºÔðдÈëºÍ¶Áȡ·¾¶µÄÒµÎñÂß¼­µÄÍŶÓÍѹ³¡£

±¾ÎĽöÉæ¼°CQRSϸ΢²î±ðµÄ±íÃæ¡£Èç¹ûÄúÏëÁ˽â¸ü¶àÐÅÏ¢£¬½¨ÒéÔĶÁMartin FowlerºÍUdi Dahan¹ØÓÚ¸ÃÖ÷ÌâµÄÎÄÕ¡£

µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÒѾ­¶ÔʼþÔ´ºÍCQRS½øÐÐÁ˽éÉÜ£¬²¢ÃèÊöÁËKafkaÈçºÎ×ÔÈ»µØ½«ÕâЩӦÓóÌÐò¼Ü¹¹Ä£Ê½¸¶Öîʵ¼ù¡£µ«ÊÇ£¬Á÷´¦ÀíÔںδ¦ÒÔ¼°ÈçºÎ½øÈë»­Ãæ£¿

CQRSºÍKafkaµÄStreams API

ÕâÊÇÁ÷´¦Àí£¬ÓÈÆäÊÇKafka StreamsÈçºÎÆôÓÃCQRSµÄ·½·¨¡£Ê¼þ´¦Àí³ÌÐò¶©ÔÄʼþÈÕÖ¾£¨KafkaÖ÷Ì⣩£¬Ê¹ÓÃʼþ£¬´¦ÀíÕâЩʼþ£¬²¢½«½á¹û¸üÐÂÓ¦ÓÃÓÚ¶ÁÈ¡´æ´¢¡£¶ÔʼþÁ÷½øÐеÍÑÓ³Ùת»»µÄ¹ý³Ì³ÆÎªÁ÷´¦Àí¡£ÔÚApache KafkaµÄ0.10°æ±¾ÖУ¬ÉçÇø·¢²¼ÁËKafka Streams¡£Ò»¸öÇ¿´óµÄÁ÷´¦ÀíÒýÇæ£¬ÓÃÓÚ¶ÔKafkaÖ÷ÌâÉϵÄת»»½øÐн¨Ä£¡£

Kafka Streams·Ç³£ÊʺÏÔÚÓ¦ÓóÌÐòÄÚ²¿¹¹½¨Ê¼þ´¦Àí³ÌÐò×é¼þ£¬¸ÃÓ¦ÓóÌÐòÖ¼ÔÚʹÓÃCQRS½øÐÐʼþÀ´Ô´¡£ËüÊÇÒ»¸ö¿â£¬Òò´Ë¿ÉÒÔ½«ÆäǶÈëÈκαê×¼JavaÓ¦ÓóÌÐòÖУ¬ÒÔ¶ÔʼþÁ÷½øÐÐת»»½¨Ä£¡£ÀýÈ磬ÕâÊÇÒ»¸öʹÓÃKafka Streams½øÐÐ×ÖÊýͳ¼ÆµÄ´úÂëÆ¬¶Î£»Äú¿ÉÒÔÔÚConfluentʾÀýgithub´æ´¢¿âÖзÃÎÊÕû¸ö³ÌÐòµÄ´úÂë¡£

KStreamBuilder builder = new KStreamBuilder();

KStream<String, String> textLines = builder.stream(stringSerde, stringSerde,"TextLinesTopic");

Pattern pattern = Pattern.compile("\\W+", Pattern.UNICODE_CHARACTER_CLASS);

KStream<String, Long> wordCounts = textLines

.flatMapValues(value-> Arrays.asList(pattern.split(value.toLowerCase())))

.map((key, word) -> new KeyValue<>(word, word))

.countByKey("Counts")

.toStream();

wordCounts.to(stringSerde, longSerde, "WordsWithCountsTopic");

KafkaStreams streams = new KafkaStreams(builder, streamsConfiguration);

streams.start();

Òò´Ë£¬¿ÉÒÔÇáËɵؽ«Ó¦ÓóÌÐòÄÚµÄʼþ´¦Àí³ÌÐò±íʾΪKafka StreamsÍØÆË£¬µ«¸ü½øÒ»²½£¬ÓÐÁ½¸ö²»Í¬µÄÑ¡Ïî¿ÉÓÃÓÚ½«Ê¼þ´¦Àí³ÌÐòµÄÊä³ö½¨Ä£Îª¶ÔÓ¦ÓóÌÐò״̬½øÐн¨Ä£µÄÊý¾Ý´æ´¢µÄ¸üС£

²ÉÈ¡1£º½«Ó¦ÓóÌÐò״̬½¨Ä£ÎªÍⲿÊý¾Ý´æ´¢

Kafka StreamsÍØÆËµÄÊä³ö¿ÉÒÔÊÇKafkaÖ÷Ì⣨ÈçÉÏÀýËùʾ£©£¬Ò²¿ÉÒÔдÈëÍⲿÊý¾Ý´æ´¢£¨Èç¹ØÏµÊý¾Ý¿â£©¡£´ÓÊÀ½çµÄ½Ç¶ÈÀ´¿´£¬Ê¼þ´¦Àí³ÌÐò½¨Ä£ÎªKafka StreamsÍØÆË£¬¶øÓ¦ÓóÌÐò״̬½¨Ä£ÎªÓû§ÐÅÈκͲÙ×÷µÄÍⲿÊý¾Ý´æ´¢¡£Ö´ÐÐCQRSµÄ´ËÑ¡ÏîÖ÷ÕÅʹÓÃKafka Streams½ö¶Ôʼþ´¦Àí³ÌÐò½¨Ä££¬¶ø½«Ó¦ÓóÌÐò״̬±£ÁôÔÚÍⲿÊý¾Ý´æ´¢ÖУ¬¸ÃÍⲿÊý¾Ý´æ´¢ÊÇKafka StreamsÍØÆËµÄ×îÖÕÊä³ö¡£

ÒÔ2£ºÔÚKafka StreamsÖн«Ó¦ÓóÌÐò״̬½¨Ä£Îª±¾µØ×´Ì¬

×÷ΪһÖÖÌæ´ú·½·¨£¬³ýÁ˶Ôʼþ´¦Àí³ÌÐò½øÐн¨Ä£Ö®Í⣬Kafka Streams»¹ÌṩÁËÒ»ÖÖ¶ÔÓ¦ÓóÌÐò״̬½øÐн¨Ä£µÄÓÐЧ·½·¨-ËüÖ§³Ö¿ªÏä¼´Óõı¾µØ£¬·ÖÇøºÍ³Ö¾Ã״̬¡£´Ë±¾µØ×´Ì¬¿ÉÒÔÊÇRocksDB´æ´¢£¬Ò²¿ÉÒÔÊÇÄÚ´æÖеĹþÏ£Ó³Éä¡£

ÔË×÷·½Ê½ÊÇ£¬½«Ç¶ÈëKafka Streams¿âÒÔ½øÐÐÓÐ״̬Á÷´¦ÀíµÄÓ¦ÓóÌÐòµÄÿ¸öʵÀý¶¼ÍйÜÓ¦ÓóÌÐò״̬µÄ×Ó¼¯£¬½¨Ä£Îª×´Ì¬´æ´¢µÄË鯬»ò·ÖÇø¡£×´Ì¬´æ´¢ÇøµÄ·ÖÇø·½Ê½ÓëÓ¦ÓóÌÐòµÄÃÜÔ¿¿Õ¼äÏàͬ¡£½á¹û£¬·þÎñÓÚµ½´ïÌØ¶¨Ó¦ÓóÌÐòʵÀýµÄ²éѯËùÐèµÄËùÓÐÊý¾ÝÔÚ״̬´æ´¢Ë鯬Öб¾µØ¿ÉÓá£Kafka Streamsͨ¹ý͸Ã÷µØ½«¶Ô״̬´æ´¢Ëù×öµÄËùÓиüмǼµ½¸ß¶È¿ÉÓÃÇҳ־õÄKafkaÖ÷ÌâÖУ¬À´Ìṩ¶Ô¸Ã±¾µØ×´Ì¬´æ´¢µÄÈÝ´í¹¦ÄÜ¡£Òò´Ë£¬Èç¹ûÓ¦ÓóÌÐòʵÀýËÀÍö£¬²¢ÇÒÍйܵı¾µØ×´Ì¬´æ´¢Ë鯬¶ªÊ§£¬ÔòKafka StreamsÖ»Ðè¶ÁÈ¡¸ß¶È¿ÉÓõÄKafkaÖ÷Ìâ²¢½«×´Ì¬Êý¾ÝÖØÐÂÌî³ä¼´¿ÉÖØÐ´´½¨×´Ì¬´æ´¢Ë鯬¡£

ʵ¼ÊÉÏ£¬Kafka Streams½«KafkaÓÃ×÷Æä±¾µØÇ¶ÈëʽÊý¾Ý¿âµÄÌá½»ÈÕÖ¾¡£ÕâÕýÊÇÔÚ·âÃæÏÂÉè¼Æ´«Í³Êý¾Ý¿âµÄ·½Ê½-ÊÂÎñ»òÖØ×öÈÕÖ¾ÊÇÊÂʵµÄÔ´Í·£¬¶ø±íÖ»ÊǶԴ洢ÔÚÊÂÎñÈÕÖ¾ÖеÄÊý¾ÝµÄÎﻯÊÓͼ¡£

Kafka StreamsÖеı¾µØ£¬·ÖÇø£¬³Ö¾Ã״̬

½«Kafka StreamsÓÃÓÚʹÓÃCQRS¹¹½¨µÄÓÐ״̬ӦÓóÌÐò»¹¾ßÓиü¶àÓÅÊÆ¨C Kafka Streams»¹ÄÚÖÃÁ˸ºÔØÆ½ºâºÍ¹ÊÕÏ×ªÒÆ¹¦ÄÜ¡£Èç¹ûÒ»¸öÓ¦ÓóÌÐòʵÀýʧ°Ü£¬ÔòKafka Streams»á×Ô¶¯ÔÚÆäÓàÓ¦ÓóÌÐòʵÀýÖ®¼äÖØÐ·ÖÅäKafkaÖ÷ÌâµÄ·ÖÇøÒÔ¼°ÄÚ²¿×´Ì¬´æ´¢Ë鯬¡£Í¬Ñù£¬Kafka StreamsÔÊÐíµ¯ÐÔËõ·Å¡£Èç¹ûÆô¶¯ÁËʹÓÃKafka StreamsÖ´ÐÐCQRSµÄÓ¦ÓóÌÐòµÄÐÂʵÀý£¬Ëü½«×Ô¶¯ÔÚÐÂÆô¶¯µÄÓ¦ÓóÌÐòʵÀýÖ®¼äƽ¾ùÒÆ¶¯×´Ì¬´æ´¢µÄÏÖÓÐË鯬ÒÔ¼°KafkaÖ÷ÌâµÄ·ÖÇø¡£ËùÓÐÕâЩ¹¦Äܶ¼ÒÔ͸Ã÷µÄ·½Ê½Ìṩ¸øKafka StreamsÓû§¡£

ÐèҪʹÓÃKafka Streamsת»»Îª»ùÓÚCQRSµÄģʽµÄÓ¦ÓóÌÐò²»±Øµ£ÐÄÓ¦ÓóÌÐò¼°Æä״̬µÄÈÝ´íÐÔ£¬¿ÉÓÃÐԺͿÉÉìËõÐÔ¡£

¸ÃǶÈëʽ£¬·ÖÇøÇҳ־õÄ״̬´æ´¢Í¨¹ýKafka Streams¶ÀÓеÄÒ»Á÷³éÏó-KTableÏòÓû§¹«¿ª¡£

KafkaÁ÷ÖеĽ»»¥Ê½²éѯ

ÔÚ¼´½«·¢²¼µÄApache Kafka°æ±¾ÖУ¬Kafka Streams½«ÔÊÐíÆäǶÈëʽ״̬´æ´¢¿É²éѯ¡£

Kafka StreamsÖеÄÕâÒ»¶ÀÌØ¹¦ÄÜ-½»»¥Ê½²éѯ£¨ÒÔǰ±»KafkaÉçÇø³ÆÎªQueryable State£©-ҲʹÆäÊʺϽ«CQRSÉè¼ÆÄ£Ê½Ó¦ÓÃÓÚÓ¦ÓóÌÐò¡£Ê¼þ´¦Àí³ÌÐò±»½¨Ä£ÎªKafka StreamsÍØÆË£¬¸ÃÍØÆË½«Êý¾ÝÉú³Éµ½¶ÁÈ¡´æ´¢£¬¸Ã´æ´¢²»¹ýÊÇKafka StreamsÄÚ²¿µÄǶÈëʽ״̬´æ´¢¡£Ó¦ÓóÌÐòµÄ¶ÁÈ¡²¿·Ö½«StateStore APIÓÃÓÚ״̬´æ´¢£¬²¢»ùÓÚÆäget£¨£©APIÀ´Ìṩ¶ÁÈ¡·þÎñ¡£

ʹÓÃKafkaºÍKafka StreamsµÄʼþÔ´ºÍ»ùÓÚCQRSµÄÓ¦ÓóÌÐò

Kafka StreamsÖеĽ»»¥Ê½²éѯµÄÇé¿ö

Çë×¢Ò⣬ʹÓý»»¥Ê½²éѯ¹¦ÄÜÔÚKafka StreamsÖÐʹÓÃǶÈëʽ״̬´æ´¢´¿´âÊÇ¿ÉÑ¡µÄ£¬²¢·Ç¶ÔËùÓÐÓ¦ÓóÌÐò¶¼ÓÐÒâÒå¡£ÓÐʱ£¬ÄúÖ»ÏëʹÓÃÄúÖªµÀ²¢ÐÅÈεÄÍⲿÊý¾Ý¿â¡£»òÕߣ¬ÔÚʹÓÃKafka Streamsʱ£¬ÄúÒ²¿ÉÒÔ½«Êý¾Ý·¢Ë͵½ÍⲿÊý¾Ý¿â£¨ÀýÈçCassandra£©£¬²¢ÈÃÓ¦ÓóÌÐòµÄ¶ÁÈ¡²¿·Ö²éѯ¸ÃÊý¾Ý¡£

µ«ÊÇ£¬ºÎʱʹÓÃÏñÕâÑùµÄ±¾µØÇ¶ÈëʽӦÓóÌÐò״̬²ÅÓÐÒâÒ壿ÕâÀïÓÐһЩÀû±×¿¼ÂÇ-

ȱµã

  • ÏÖÔÚÉú³ÉµÄÓ¦ÓóÌÐòÊÇÓÐ״̬µÄ£¬ÐèÒª¶à¼Ó×¢Òâ²ÅÄܽøÐйÜÀí¡£
  • ËüÉæ¼°Ô¶ÀëÄúÖªµÀºÍÐÅÈεÄÊý¾Ý´æ´¢¡£

Óŵã

  • ÒÆ¶¯µÄÁã¼þ¸üÉÙ£»Ö»ÊÇÄúµÄÓ¦ÓóÌÐòºÍKafka¼¯Èº¡£Äú²»±Ø²¿Êð£¬Î¬»¤ºÍ²Ù×÷ÍⲿÊý¾Ý¿â¼´¿É´æ´¢Ó¦ÓóÌÐòËùÐèµÄ״̬¡£
  • Ëü¿ÉÒÔ¸ü¿ì£¬¸üÓÐЧµØÊ¹ÓÃÓ¦ÓóÌÐò״̬¡£Êý¾Ý¶ÔÓÚÄúµÄÓ¦ÓóÌÐòÊDZ¾µØµÄ£¨ÔÚÄÚ´æÖлò¿ÉÄÜÔÚSSDÉÏ£©£»Äú¿ÉÒÔ¿ìËÙ·ÃÎÊËü¡£Õâ¶ÔÓÚÐèÒª·ÃÎÊ´óÁ¿Ó¦ÓóÌÐò״̬µÄÓ¦ÓóÌÐòÌØ±ðÓÐÓ᣶øÇÒ£¬ÔÚ½øÐоۺÏÒÔ½øÐÐÁ÷´¦ÀíµÄÉ̵êºÍÉ̵êÓ¦´ð²éѯ֮¼äûÓÐÊý¾ÝÖØ¸´¡£
  • ËüÌṩÁ˸üºÃµÄ¸ôÀ룻״̬ÔÚÓ¦ÓóÌÐòÄÚ¡£Ò»¸ö¶ñÒâÓ¦ÓóÌÐòÎÞ·¨ÑÍûÆäËûÓÐ״̬ӦÓóÌÐò¹²ÏíµÄÖÐÑëÊý¾Ý´æ´¢¡£
  • Ëü¾ßÓÐÁé»îÐÔ¡£ÄÚ²¿Ó¦ÓóÌÐò״̬¿ÉÒÔÕë¶ÔÓ¦ÓóÌÐòËùÐèµÄ²éѯģʽ½øÐÐÓÅ»¯¡£

ʹÓÃKafka×öʼþËÝÔ´ºÍCQRS£º´óÓ®¼Ò

ÎÒÉÏÃæÁгöµÄÀû±×ÌåÏÖÁËËùÉæ¼°µÄ¸÷ÖÖÕÛÖÔ£¬µ«ÊÇ£¬ÎÒÈÏΪ£¬³¯×Å´ËÓ¦ÓóÌÐò ¼Ü¹¹ Âõ½øµÄ×îÖØÒªµÄʤÀû¾ÍÊÇÓ¦ÓóÌÐòÉý¼¶±äµÃ¸ü¼Ó¼òµ¥¡£´¦ÀíÓ¦ÓóÌÐòµÄ·ÇÍ£»úÉý¼¶µÄ´«Í³Ä£ÐÍ£¨ÒÀÀµÓÚÍⲿÊý¾Ý¿âÀ´È·¶¨ÆäÓ¦ÓóÌÐò״̬£©Ï൱¸´ÔÓ¡£ÎÞÐèÍ£»úÉý¼¶¾Í²»ÐèҪͬʱÔËÐÐа汾ºÍ¾É°æ±¾µÄÓ¦ÓóÌÐò¡£Éý¼¶¼¸¸öʵÀýºó£¬Èç¹û·¢ÏÖ´íÎó£¬ÔòÐèÒªÄܹ»Í¸Ã÷µØ½«¸ºÔØÇл»»ØÍ¬Ò»Ó¦ÓóÌÐòµÄ¾ÉʵÀý¡£¼øÓÚÐÂʵÀýºÍ¾ÉʵÀý½«ÐèÒª¸üÐÂÍⲿÊý¾Ý¿âÖеÄÏàͬ±í£¬Òò´ËÐèÒª¸ñÍâСÐÄ£¬ÒÔÔÚ²»ÆÆ»µ×´Ì¬´æ´¢ÖÐÊý¾ÝµÄÇé¿öϽøÐдËÀàÎÞÍ£»úÉý¼¶¡£

ÏÖÔÚ£¬¶ÔÓÚÒÀÀµÓÚ±¾µØÇ¶Èëʽ״̬µÄÓÐ״̬ӦÓóÌÐò£¬¿¼ÂÇÏàͬµÄÎÞÍ£»úÉý¼¶ÎÊÌ⡣ͨ¹ý´ËÄ£ÐÍ£¬Äú¿ÉÒÔÓë¾É°æ±¾Ò»ÆðÍÆ³öа汾µÄÓ¦ÓóÌÐò£¨ÔÚKafka StreamsÖоßÓв»Í¬µÄÓ¦ÓóÌÐòID£©¡£Ã¿¸öÈ˶¼ÓµÓа´ÕÕÆäÓ¦ÓóÌÐòÒµÎñÂß¼­°æ±¾Ö¸Ê¾µÄ·½Ê½´¦ÀíµÄÓ¦ÓóÌÐò״̬¸±±¾¡£Äú¿ÉÒÔÖð²½½«Á÷Á¿´Ó¾ÉµÄÒýµ¼µ½Ðµġ£Èç¹ûа汾µÄij¸ö´íÎó»áÔÚÓ¦ÓóÌÐò״̬´æ´¢ÇøÖвúÉúÒâÍâ½á¹û£¬ÄÇôÄúʼÖÕ¿ÉÒÔ½«Æä¶ªÆú£¬ÐÞ¸´¸Ã´íÎó£¬ÖØÐ²¿Êð¸ÃÓ¦ÓóÌÐò²¢ÈÃÆä´ÓÈÕÖ¾ÖÐÖØ½¨Æä״̬¡£

·ÅÔÚÒ»Æð£ºÁãÊÛ¿â´æÓ¦ÓÃ

ÏÖÔÚÈÃÎÒÃÇÒÔÒ»¸öÀý×ÓÀ´ËµÃ÷ÈçºÎ½«±¾ÎĽéÉܵĸÅÄÖîʵ¼ù-ÈçºÎʹÓÃKafkaºÍKafka StreamsΪӦÓóÌÐòÆôÓÃʼþÔ´ºÍCQRS¡£

Àý×Ó:ÁãÊÛÓ¦ÓóÌÐò ¼Ü¹¹

¿¼ÂÇÒ»¸öʵÌåÁãÊÛÉ̵ÄÓ¦ÓóÌÐò£¬¸ÃÓ¦ÓóÌÐò¹ÜÀíËùÓÐÉ̵êµÄ¿â´æ£»µ±Ð»õµ½´ï»ò·¢ÉúÐÂÏúÊÛʱ£¬Ëü»á¸üÐÂ¿â´æ±í£¬²¢ÇÒÒªÖªµÀÉ̵ê¿â´æµÄµ±Ç°×´Ì¬£¬Ëü»á²éѯ¿â´æ±í¡£

¾ßÓÐʼþÔ´µÄÁãÊÛÓ¦ÓóÌÐò¼Ü¹¹¡ªÓÉKafkaÌṩ֧³Ö

Èç¹ûÎÒÃǽ«Ê¼þ²É¹º ¼Ü¹¹ ģʽӦÓÃÓÚ´ËInventoryÓ¦Óã¬ÔòеĻõ¼þ½«ÔÚShipments KafkaÖ÷ÌâÖбíʾΪʼþ¡£Í¬Ñù£¬ÐÂÏúÊÛ½«ÒÔSales KafkaÖ÷Ì⣨¿ÉÄÜÓÉSalesÓ¦ÓóÌÐò±àд£©ÖеÄʼþ±íʾ¡£Îª¼òµ¥Æð¼û£¬ÎÒÃǼÙÉè¡°ÏúÊÛ¡±ºÍ¡°·¢»õ¡±Ö÷ÌâÖеÄKafkaÏûÏ¢µÄ¹Ø¼ü×ÖÊÇ{É̵êID£¬ÉÌÆ·ID}£¬¶øÖµÊÇÉ̵êÖÐÉÌÆ·ÊýÁ¿µÄ¼ÆÊý¡£

InventoryÓ¦ÓóÌÐòÄÚµÄʼþ´¦Àí³ÌÐò±»½¨Ä£ÎªKafka StreamsÍØÆË£¬¸ÃÍØÆËÁ¬½ÓÁËSalesºÍShipments KafkaÖ÷Ìâ¡£Áª½Ó²Ù×÷´´½¨²¢¸üÐÂ״̬´æ´¢¿âInventoryTable£¬¸Ã״̬´æ´¢¿â±íʾÒÔÁ¬Ðø·½Ê½¸üеÄÇåµ¥µÄµ±Ç°×´Ì¬¡£

Á¬½Ó²Ù×÷µÄÄÚ²¿½á¹¹ÒÔ¹¹½¨¿â´æ±í

¿ÉÒÔ½«ÕâÑùµÄÓ¦ÓóÌÐò²¿ÊðÔÚ²»Í¬¼ÆËã»úÉϵĶà¸öʵÀýÖУ¨ÈçÏÂͼËùʾ£©¡£¶øÇÒ£¬InventoryAppµÄÿ¸öʵÀý¶¼³ÐÔØInventoryTableµÄ·ÖƬµÄ×Ó¼¯£¬ÆäÖаüº¬´ËÁª½Ó²Ù×÷µÄ½á¹û¡£µ±Óû§²éѯInventoryAppÀ´Á˽âÉ̵êÖÐijÉÌÆ·µÄµ±Ç°¿â´æÊýÁ¿Ê±£¬

  • ÔËÐÐInventoryAppµÄËæ»ú·þÎñÆ÷ÊÕµ½Ò»¸öÇëÇó£ºGET / inventory / stores / {store id} / items / {item id} / count

  • ËüʹÓÃKafka StreamsʵÀýÉϵÄmetadataForKey£¨£©APIÀ´»ñÈ¡É̵êµÄStreamsMetadataºÍÃÜÔ¿¡£StreamsMetadata±£´æKafka StreamsÍØÆËÖÐÿ¸öÉ̵êµÄÖ÷»úºÍ¶Ë¿ÚÐÅÏ¢¡£Ó¦ÓóÌÐòʹÓÃStreamsMetadata¼ì²é¸ÃʵÀýÊÇ·ñ¾ßÓаüº¬¹Ø¼ü×Ö{store id£¬item id}µÄInventoryTable·ÖÇø¡£Èç¹ûÊÇÕâÑù£¬Ëü½«Ê¹Óñ¾µØKafka StreamsʵÀýÉϵÄstore£¨¡° InventoryTable¡±£©apiÀ´»ñÈ¡¸ÃÉ̵겢¶ÔÆä½øÐвéѯ¡£

  • Èç¹û²»ÊÇ£¬Ëü½«Îªµ±Ç°³ÖÓаüº¬{store id£¬item id}µÄKafka·ÖÇøµÄʵÀýÕÒµ½Ö÷»ú/¶Ë¿Ú£¬²¢×ª·¢GETÇëÇóµ½/ inventory / stores / {store id} / items / {item id} / countµ½ÔÚ¸ÃÖ÷»úÉÏÔËÐеÄInventoryAppʵÀý¡£

  • ÏòÓû§·µ»Ø¿â´æÅ̵ã

ÔÚKafka StreamsÖÐʹÓý»»¥Ê½²éѯµÄ¿â´æ×´Ì¬Ó¦ÓóÌÐò

ÒªÁ˽âÓйء°½»»¥Ê½²éѯ¡±¹¦Äܵĸü¶àÐÅÏ¢£¬ÇëÔĶÁÆäÎĵµ¡£³ýÁËÕâЩ×ÊÔ´Ö®Í⣬Çë²ÎÔÄCapital OneµÄÑÝʾÎĸ壬¸ÃÑÝʾÎĸ彫ÔÚʵ¼ùÖÐÓ¦Óñ¾ÎÄÖнéÉܵÄһЩ˼Ï룬²¢¸ÅÊöʹÓÃKafka StreamsµÄ»ùÓÚREST£¬Ê¼þÔ´£¬CQRSºÍÏìÓ¦Á÷´¦ÀíµÄÓ¦ÓóÌÐò ¼Ü¹¹ ¡£

ÈçÉÏÀýËùʾ£¬´æ´¢ºÍ²éѯ±¾µØ×´Ì¬¶ÔÓÚijЩÓÐ״̬ӦÓóÌÐò¿ÉÄÜûÓÐÒâÒå¡£ÓÐʱ£¬ÄúÏ뽫״̬´æ´¢ÔÚÄúÖªµÀ²¢ÐÅÈεÄÍⲿÊý¾Ý¿âÖС£ÀýÈ磬ÔÚÉÏÃæµÄʾÀýÖУ¬Äú¿ÉÒÔʹÓÃKafka Streamsͨ¹ýjoin²Ù×÷À´¼ÆËã¿â´æÊýÁ¿£¬µ«Ñ¡Ôñ½«½á¹ûдÈëÍⲿÊý¾Ý¿â²¢²éѯ¡£

µ«ÊÇ£¬ÖµµÃ×¢ÒâµÄÊÇ£¬¹¹½¨¾ßÓвéѯ±¾µØ×´Ì¬µÄÓÐ״̬ӦÓóÌÐòÓÐÐí¶àÓŵ㣬Èç±¾ÎÄÇ°ÃæËùÊö¡£

½áÂÛÐÔ˼Ïë

ʼþѰԴΪӦÓóÌÐòʹÓÃÁãËðʧЭÒé¼Ç¼Æä¹ÌÓеIJ»¿É±ÜÃâµÄ״̬±ä»¯ÌṩÁËÒ»ÖÖÓÐЧµÄ·½·¨¡£ÕâÒâζׯָ´¼È¼òµ¥ÓÖ¸ßЧ£¬ÒòΪËüÍêÈ«»ùÓÚÈռǻòÏñKafkaÕâÑùµÄÓÐÐòÈÕÖ¾¡£CQRS¸ü½øÒ»²½£¬½«Ô­Ê¼Ê¼þ±ä³É¿É²éѯµÄÊÓͼ£»¾«ÐÄÐγɵÄÓëÆäËûÒµÎñÁ÷³ÌÏà¹ØµÄÊÓͼ¡£KafkaµÄStreams APIÌṩÁËÒÔÁ÷·½Ê½´´½¨ÕâЩÊÓͼËùÐèµÄÉùÃ÷ÐÔ¹¦ÄÜ£¬ÒÔ¼°¿ÉÀ©Õ¹µÄ²éѯ²ã£¬Òò´ËÓû§¿ÉÒÔÖ±½ÓÓë´ËÊÓͼ½øÐн»»¥¡£½á¹ûÊÇÔÚApache KafkaÉϹ¹½¨ÁËÊÊÓõĻùÓÚʼþÔ´ºÍCQRSµÄÓ¦ÓóÌÐò ¼Ü¹¹ £»ÔÊÐí´ËÀàÓ¦ÓóÌÐò»¹ÀûÓÃKafkaµÄºËÐľºÕùÁ¦-ÐÔÄÜ£¬¿ÉÉìËõÐÔ£¬°²È«ÐÔ£¬¿É¿¿ÐԺʹó¹æÄ£²ÉÓá£

×îÖØÒªµÄÊÇ£¬ÒÔÕâÖÖ·½Ê½¹¹½¨ÓÐ״̬µÄÓ¦ÓóÌÐò¿Éʹ×éÖ¯×îÖÕ»ñµÃËÉÉ¢ñîºÏµÄÓ¦ÓóÌÐò ¼Ü¹¹ -Ò»ÖÖ¾ßÓе¯ÐԺͿÉÉìËõÐÔ£¬¸üÒ×ÓÚ¹ÊÕÏÅųýºÍÉý¼¶µÄÓ¦ÓóÌÐò ¼Ü¹¹ £¬×îÖØÒªµÄÊÇ£¬¸Ã ¼Ü¹¹ ¾ßÓÐǰÏò¼æÈÝÐÔ¡£


 

   
1182 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

ÆóÒµ¼Ü¹¹¡¢TOGAFÓëArchiMate¸ÅÀÀ
¼Ü¹¹Ê¦Ö®Â·-ÈçºÎ×öºÃÒµÎñ½¨Ä££¿
´óÐÍÍøÕ¾µçÉÌÍøÕ¾¼Ü¹¹°¸ÀýºÍ¼¼Êõ¼Ü¹¹µÄʾÀý
ÍêÕûµÄArchimateÊÓµãÖ¸ÄÏ£¨°üÀ¨Ê¾Àý£©
Ïà¹ØÎĵµ

Êý¾ÝÖÐ̨¼¼Êõ¼Ü¹¹·½·¨ÂÛÓëʵ¼ù
ÊÊÓÃArchiMate¡¢EA ºÍ iSpace½øÐÐÆóÒµ¼Ü¹¹½¨Ä£
ZachmanÆóÒµ¼Ü¹¹¿ò¼Ü¼ò½é
ÆóÒµ¼Ü¹¹ÈÃSOAÂ䵨
Ïà¹Ø¿Î³Ì

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
¼Ü¹¹Éè¼Æ-̸̸¼Ü¹¹
ʵÏÖSaaS£¨Èí¼þ¼°·þÎñ£©¼Ü¹¹Èý´ó¼¼ÊõÌôÕ½
µ½µ×ʲôÊÇÊý¾ÝÖÐ̨£¿
ÏìӦʽ¼Ü¹¹¼ò½é
ÒµÎñ¼Ü¹¹¡¢Ó¦Óüܹ¹ÓëÔÆ»ù´¡¼Ü¹¹
×îпγÌ
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
´Ó´óÐ͵çÉ̼ܹ¹Ñݽø¿´»¥ÁªÍø¸ß¿ÉÓüܹ¹Éè¼Æ
´óÐÍ»¥ÁªÍø¸ß¿ÉÓüܹ¹Éè¼ÆÊµ¼ù
ÆóÒµ¼Ü¹¹Ê¦ (TOGAF¹Ù·½ÈÏÖ¤)
ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ¡ª¸ß¼¶Êµ¼ù
³É¹¦°¸Àý
ijÐÂÄÜÔ´µçÁ¦ÆóÒµ Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
Öк½¹¤ÒµÄ³Ñо¿Ëù ǶÈëʽÈí¼þ¿ª·¢Ö¸ÄÏ
ij¹ìµÀ½»Í¨ÐÐÒµ ǶÈëʽÈí¼þ¸ß¼¶Éè¼ÆÊµ¼ù
±±¾© º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Èí¼þ²âÊԼܹ¹Ê¦
±±¾©Ä³ÁìÏÈÊý×ÖµØÍ¼ ¼Ü¹¹Ê¦£¨Éè¼Æ°¸Àý£©