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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÄãÓ¦¸ÃÖªµÀµÄRocketMQ
 
×÷Õߣº ¿§·ÈÄÃÌú
  8157  次浏览      27
 2020-3-18
 
±à¼­ÍƼö:
±¾ÎÄÆªÎÄÕ»ᾡÁ¦È«ÃæµÄ½éÉÜRocketMQºÍKafka¸÷¸ö¹Ø¼üµãµÄ±È½Ï£¬Ï£Íû¶ÔÄúÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚitpub£¬ÓÉ»ðÁú¹ûÈí¼þDelores±à¼­¡¢ÍƼö¡£

1.¸ÅÊö

RocketMQǰÉí½Ð×öMetaQ, ÔÚMeataQ·¢²¼3.0°æ±¾µÄʱºò¸ÄÃûΪRocketMQ£¬Æä±¾ÖÊÉϵÄÉè¼ÆË¼Â·ºÍKafkaÀàËÆ£¬µ«ÊǺÍKafka²»Í¬µÄÊÇÆäʹÓÃJava½øÐпª·¢£¬ÓÉÓÚÔÚ¹úÄÚµÄJavaÊÜÖÚȺÌåÔ¶Ô¶¶àÓÚScala£¬ËùÒÔRocketMQÊǺܶàÒÔJavaÓïÑÔΪÖ÷µÄ¹«Ë¾µÄÊ×Ñ¡¡£Í¬ÑùµÄRocketMQºÍKafka¶¼ÊÇApache»ù½ð»áÖеĶ¥¼¶ÏîÄ¿£¬ËûÃÇÉçÇøµÄ»îÔ¾¶È¶¼·Ç³£¸ß£¬ÏîÄ¿¸üеü´úÒ²·Ç³£¿ì¡£

2.ÈëÃÅʵÀý

2.1 Éú²úÕß

public class Producer {
public static void main(String[] args)
throws MQClientException,
InterruptedException {
DefaultMQProducer producer = new
DefaultMQProducer("ProducerGroupName");
producer.start();
for (int i = 0; i < 128; i++)
try {
{
Message msg = new Message("TopicTest",
"TagA",
"OrderID188",
"Hello world".getBytes
(RemotingHelper.DEFAULT_CHARSET));
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
}
} catch (Exception e) {
e.printStackTrace();
}
producer.shutdown();
}
}

Ö±½Ó¶¨ÒåºÃÒ»¸öproducer£¬´´½¨ºÃMessage£¬µ÷ÓÃsend·½·¨¼´¿É¡£

2.2 Ïû·ÑÕß

public class PushConsumer {
public static void main(String[] args)
throws InterruptedException, MQClientException {
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_JODIE_1");
consumer.subscribe("TopicTest", "*");
consumer.setConsumeFromWhere
(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
//wrong time format 2017_0422_221800
consumer.setConsumeTimestamp("20181109221800");
consumer.registerMessageListener
(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus
consumeMessage(List<MessageExt> msgs,
ConsumeConcurrentlyContext context) {
System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.printf("Consumer Started.%n");
}
}

3.RocketMQ¼Ü¹¹Ô­Àí

¶ÔÓÚRocketMQÏÈÅ׳ö¼¸¸öÎÊÌâ:

RocketMQµÄtopicºÍ¶ÓÁÐÊÇʲôÑùµÄ£¬ºÍKafkaµÄ·ÖÇøÓÐʲô²»Í¬£¿

RocketMQÍøÂçÄ£ÐÍÊÇʲôÑùµÄ£¬ºÍKafka¶Ô±ÈÈçºÎ£¿

RocketMQÏûÏ¢´æ´¢Ä£ÐÍÊÇʲôÑùµÄ£¬ÈçºÎ±£Ö¤¸ß¿É¿¿µÄ´æ´¢£¬ºÍKafka¶Ô±ÈÈçºÎ£¿

3.1 RocketMQ¼Ü¹¹Í¼

¶ÔÓÚRocketMQµÄ¼Ü¹¹Í¼£¬ÔÚ´óÌåÉÏÀ´¿´ºÍKafka²¢Ã»ÓÐÌ«¶àµÄ²î±ð£¬µ«ÊÇÔںܶàϸ½ÚÉÏÊÇÓкܶà²î±ðµÄ£¬½ÓÏÂÀ´»áÒ»Ò»½øÐн²Êö¡£

3.2 RocketMQÃû´Ê½âÊÍ

ÔÚ3.1µÄ¼Ü¹¹ÖÐÎÒÃÇÓжà¸öProducer£¬¶à¸öÖ÷Broker£¬¶à¸ö´ÓBroker,ÿ¸öProducer¿ÉÒÔ¶ÔÓ¦¶à¸öTopic,ÿ¸öConsumerÒ²¿ÉÒÔÏû·Ñ¶à¸öTopic¡£

BrokerÐÅÏ¢»áÉϱ¨ÖÁNameServer,Consumer»á´ÓNameServerÖÐÀ­È¡BrokerºÍTopicµÄÐÅÏ¢¡£

Producer£ºÏûÏ¢Éú²úÕߣ¬ÏòBroker·¢ËÍÏûÏ¢µÄ¿Í»§¶Ë

Consumer£ºÏûÏ¢Ïû·ÑÕߣ¬´ÓBroker¶ÁÈ¡ÏûÏ¢µÄ¿Í»§¶Ë

Broker£ºÏûÏ¢ÖмäµÄ´¦Àí½Úµã£¬ÕâÀïºÍkafka²»Í¬£¬kafkaµÄBrokerûÓÐÖ÷´ÓµÄ¸ÅÄ¶¼¿ÉÒÔдÈëÇëÇóÒÔ¼°±¸·ÝÆäËû½ÚµãÊý¾Ý£¬RocketMQÖ»ÓÐÖ÷Broker½Úµã²ÅÄÜд£¬Ò»°ãҲͨ¹ýÖ÷½Úµã¶Á£¬µ±Ö÷½ÚµãÓйÊÕÏ»òÕßһЩÆäËûÌØÊâÇé¿ö²Å»áʹÓôӽڵã¶Á£¬ÓеãÀàËÆ- ÓÚmysqlµÄÖ÷´Ó¼Ü¹¹¡£

Topic£ºÏûÏ¢Ö÷Ì⣬һ¼¶ÏûÏ¢ÀàÐÍ£¬Éú²úÕßÏòÆä·¢ËÍÏûÏ¢, Ïû·ÑÕß¶ÁÈ¡ÆäÏûÏ¢¡£

Group£º·ÖΪProducerGroup,ConsumerGroup,´ú±íijһÀàµÄÉú²úÕߺÍÏû·ÑÕߣ¬Ò»°ãÀ´ËµÍ¬Ò»¸ö·þÎñ¿ÉÒÔ×÷ΪGroup,ͬһ¸öGroupÒ»°ãÀ´Ëµ·¢ËͺÍÏû·ÑµÄÏûÏ¢¶¼ÊÇÒ»ÑùµÄ¡£

Tag£ºKafkaÖÐûÓÐÕâ¸ö¸ÅÄTagÊÇÊôÓÚ¶þ¼¶ÏûÏ¢ÀàÐÍ£¬Ò»°ãÀ´ËµÒµÎñÓйØÁªµÄ¿ÉÒÔʹÓÃͬһ¸öTag,±ÈÈç¶©µ¥ÏûÏ¢¶ÓÁУ¬Ê¹ÓÃTopic_Order,Tag¿ÉÒÔ·ÖΪTag_ʳƷ¶©µ¥,Tag_·þ×°¶©µ¥µÈµÈ¡£

Queue: ÔÚkafkaÖнÐPartition,ÿ¸öQueueÄÚ²¿ÊÇÓÐÐòµÄ£¬ÔÚRocketMQÖзÖΪ¶ÁºÍдÁ½ÖÖ¶ÓÁУ¬Ò»°ãÀ´Ëµ¶Áд¶ÓÁÐÊýÁ¿Ò»Ö£¬Èç¹û²»Ò»Ö¾ͻá³öÏֺܶàÎÊÌâ¡£

NameServer£ºKafkaÖÐʹÓõÄÊÇZooKeeper±£´æBrokerµÄµØÖ·ÐÅÏ¢£¬ÒÔ¼°BrokerµÄLeaderµÄÑ¡¾Ù£¬ÔÚRocketMQÖв¢Ã»ÓвÉÓÃÑ¡¾ÙBrokerµÄ²ßÂÔ£¬ËùÒÔ²ÉÓÃÁËÎÞ״̬µÄNameServerÀ´´æ´¢£¬ÓÉÓÚNameServerÊÇÎÞ״̬µÄ£¬¼¯Èº½ÚµãÖ®¼ä²¢²»»áͨÐÅ£¬ËùÒÔÉÏ´«Êý¾ÝµÄʱºò¶¼ÐèÒªÏòËùÓÐ½Úµã½øÐз¢ËÍ¡£

ºÜ¶àÅóÓѶ¼ÔÚÎÊʲôÊÇÎÞ×´Ì¬ÄØ£¿×´Ì¬µÄÓÐÎÞʵ¼ÊÉϾÍÊÇÊý¾ÝÊÇ·ñ»á×ö´æ´¢£¬ÓÐ״̬µÄ»°Êý¾Ý»á±»³Ö¾Ã»¯£¬ÎÞ״̬µÄ·þÎñ¿ÉÒÔÀí½â¾ÍÊÇÒ»¸öÄÚ´æ·þÎñ£¬NameServer±¾ÉíÒ²ÊÇÒ»¸öÄÚ´æ·þÎñ£¬ËùÓÐÊý¾Ý¶¼´æ´¢ÔÚÄÚ´æÖУ¬ÖØÆôÖ®ºó¶¼»á¶ªÊ§¡£

3.3 TopicºÍQueue

ÔÚRocketMQÖеÄÿһÌõÏûÏ¢£¬¶¼ÓÐÒ»¸öTopic£¬ÓÃÀ´Çø·Ö²»Í¬µÄÏûÏ¢¡£Ò»¸öÖ÷ÌâÒ»°ã»áÓжà¸öÏûÏ¢µÄ¶©ÔÄÕߣ¬µ±Éú²úÕß·¢²¼ÏûÏ¢µ½Ä³¸öÖ÷Ìâʱ£¬¶©ÔÄÁËÕâ¸öÖ÷ÌâµÄÏû·ÑÕß¶¼¿ÉÒÔ½ÓÊÕµ½Éú²úÕßдÈëµÄÐÂÏûÏ¢¡£

ÔÚTopicÖÐÓзÖΪÁ˶à¸öQueue£¬ÕâÆäʵÊÇÎÒÃÇ·¢ËÍ/¶ÁÈ¡ÏûϢͨµÀµÄ×îСµ¥Î»£¬ÎÒÃÇ·¢ËÍÏûÏ¢¶¼ÐèÒªÖ¸¶¨Ä³¸öдÈëij¸öQueue£¬À­È¡ÏûÏ¢µÄʱºòÒ²ÐèÒªÖ¸¶¨À­È¡Ä³¸öQueue£¬ËùÒÔÎÒÃǵÄ˳ÐòÏûÏ¢¿ÉÒÔ»ùÓÚÎÒÃǵÄQueueά¶È±£³Ö¶ÓÁÐÓÐÐò£¬Èç¹ûÏë×öµ½È«¾ÖÓÐÐòÄÇôÐèÒª½«Queue´óСÉèÖÃΪ1£¬ÕâÑùËùÓеÄÊý¾Ý¶¼»áÔÚQueueÖÐÓÐÐò¡£

ÔÚÉÏͼÖÐÎÒÃǵÄProducer»áͨ¹ýһЩ²ßÂÔ½øÐÐQueueµÄÑ¡Ôñ£º

·Ç˳ÐòÏûÏ¢£º·Ç˳ÐòÏûÏ¢Ò»°ãÖ±½Ó²ÉÓÃÂÖѵ·¢Ë͵ķ½Ê½½øÐз¢ËÍ¡£

˳ÐòÏûÏ¢£º¸ù¾Ýij¸öKey±ÈÈçÎÒÃdz£¼ûµÄ¶©µ¥Id,Óû§Id£¬½øÐÐHash£¬½«Í¬Ò»ÀàÊý¾Ý·ÅÔÚͬһ¸ö¶ÓÁÐÖУ¬±£Ö¤ÎÒÃǵÄ˳ÐòÐÔ¡£

ÎÒÃÇͬһ×éConsumerÒ²»á¸ù¾ÝһЩ²ßÂÔÀ´Ñ¡Queue£¬³£¼ûµÄ±ÈÈçÆ½¾ù·ÖÅä»òÕßÒ»ÖÂÐÔHash·ÖÅä¡£

ҪעÒâµÄÊǵ±Consumer³öÏÖÏÂÏß»òÕßÉÏÏßµÄʱºò£¬ÕâÀïÐèÒª×öÖØÆ½ºâ£¬Ò²¾ÍÊÇRebalance£¬RocketMQµÄÖØÆ½ºâ»úÖÆÈçÏÂ:

¶¨Ê±À­È¡broker,topicµÄ×îÐÂÐÅÏ¢

ÿ¸ô20s×öÖØÆ½ºâ

Ëæ»úѡȡµ±Ç°TopicµÄÒ»¸öÖ÷Broker£¬ÕâÀïҪעÒâµÄÊDz»ÊÇÿ´ÎÖØÆ½ºâËùÓÐÖ÷Broker¶¼»á±»Ñ¡ÖУ¬ÒòΪ»á´æÔÚÒ»¸öBrokerÔÙ¶à¸öBrokerµÄÇé¿ö¡£

»ñÈ¡µ±Ç°Broker£¬µ±Ç°ConsumerGroupµÄËùÓлúÆ÷ID¡£

È»ºó½øÐвßÂÔ·ÖÅä¡£

ÓÉÓÚÖØÆ½ºâÊǶ¨Ê±×öµÄ£¬ËùÒÔÕâÀïÓпÉÄÜ»á³öÏÖij¸öQueueͬʱ±»Á½¸öConsumerÏû·Ñ£¬ËùÒÔ»á³öÏÖÏûÏ¢ÖØ¸´Í¶µÝ¡£

KafkaµÄÖØÆ½ºâ»úÖÆºÍRocketMQ²»Í¬£¬KafkaµÄÖØÆ½ºâÊÇͨ¹ýConsumerºÍCoordinatorÁªÏµÀ´Íê³ÉµÄ£¬µ±Coordinator¸ÐÖªµ½Ïû·Ñ×éµÄ±ä»¯£¬»áÔÚÐÄÌø¹ý³ÌÖз¢ËÍÖØÆ½ºâµÄÐźţ¬È»ºóÓÉÒ»¸öConsumerLeader½øÐÐÖØÆ½ºâÑ¡Ôñ£¬È»ºóÔÙÓÉCoordinator½«½á¹û֪ͨ¸øËùÓеÄÏû·ÑÕß¡£

3.3.1 Queue¶ÁдÊýÁ¿²»Ò»ÖÂ

ÔÚRocketMQÖÐQueue±»·ÖΪ¶ÁºÍдÁ½ÖÖ£¬ÔÚ×ʼ½Ó´¥RocketMQµÄʱºòÒ»Ö±ÒÔΪ¶Áд¶ÓÁÐÊýÁ¿ÅäÖò»Ò»Ö²»»á³öÏÖʲôÎÊÌâµÄ£¬±ÈÈçµ±Ïû·ÑÕß»úÆ÷ºÜ¶àµÄʱºòÎÒÃÇÅäÖúܶà¶ÁµÄ¶ÓÁУ¬µ«ÊÇʵ¼Ê¹ý³ÌÖз¢ÏÖ»á³öÏÖÏûÏ¢ÎÞ·¨Ïû·ÑºÍ¸ù±¾Ã»ÓÐÏûÏ¢Ïû·ÑµÄÇé¿ö¡£

µ±Ð´µÄ¶ÓÁÐÊýÁ¿´óÓÚ¶ÁµÄ¶ÓÁеÄÊýÁ¿£¬µ±´óÓÚ¶Á¶ÓÁÐÕⲿ·ÖIDµÄд¶ÓÁеÄÊý¾Ý»áÎÞ·¨Ïû·Ñ£¬ÒòΪ²»»á½«Æä·ÖÅ䏸Ïû·ÑÕß¡£

µ±¶ÁµÄ¶ÓÁÐÊýÁ¿´óÓÚдµÄ¶ÓÁÐÊýÁ¿£¬ÄÇô¶àµÄ¶ÓÁÐÊýÁ¿¾Í²»»áÓÐÏûÏ¢±»Í¶µÝ½øÀ´¡£

Õâ¸ö¹¦ÄÜÔÚRocketMQÔÚÎÒ¿´À´Ã÷ÏÔûʲôÓã¬ÒòΪ»ù±¾É϶¼»áÉèÖÃΪ¶Áд¶ÓÁдóСһÑù£¬Õâ¸öΪɶ²»Ö±½Ó½«Æä½øÐÐͳһ£¬·´¶øÈÝÒ×ÈÃÓû§ÅäÖò»Ò»Ñù³öÏÖ´íÎó¡£

Õâ¸öÎÊÌâÔÚRocketMQµÄIssueÀïҲûÓÐÊÕµ½ºÃµÄ´ð°¸¡£

3.4 Ïû·ÑÄ£ÐÍ

Ò»°ãÀ´ËµÏûÏ¢¶ÓÁеÄÏû·ÑÄ£ÐÍ·ÖΪÁ½ÖÖ£¬»ùÓÚÍÆË͵ÄÏûÏ¢(push)Ä£ÐͺͻùÓÚÀ­È¡(poll)µÄÏûϢģÐÍ¡£

»ùÓÚÍÆËÍÄ£Ð͵ÄÏûϢϵͳ£¬ÓÉÏûÏ¢´úÀí¼Ç¼Ïû·Ñ״̬¡£ÏûÏ¢´úÀí½«ÏûÏ¢ÍÆË͵½Ïû·ÑÕߺ󣬱ê¼ÇÕâÌõÏûϢΪÒѾ­±»Ïû·Ñ£¬µ«ÊÇÕâÖÖ·½Ê½ÎÞ·¨ºÜºÃµØ±£Ö¤Ïû·ÑµÄ´¦ÀíÓïÒå¡£±ÈÈçµ±ÎÒÃǰÑÒѾ­°ÑÏûÏ¢·¢Ë͸øÏû·ÑÕßÖ®ºó£¬ÓÉÓÚÏû·Ñ½ø³Ì¹Òµô»òÕßÓÉÓÚÍøÂçÔ­ÒòûÓÐÊÕµ½ÕâÌõÏûÏ¢£¬Èç¹ûÎÒÃÇÔÚÏû·Ñ´úÀí½«Æä±ê¼ÇΪÒÑÏû·Ñ£¬Õâ¸öÏûÏ¢¾ÍÓÀ¾Ã¶ªÊ§ÁË¡£Èç¹ûÎÒÃÇÀûÓÃÉú²úÕßÊÕµ½ÏûÏ¢ºó»Ø¸´ÕâÖÖ·½·¨£¬ÏûÏ¢´úÀíÐèÒª¼Ç¼Ïû·Ñ״̬£¬ÕâÖÖ²»¿ÉÈ¡¡£

ÓùýRocketMQµÄͬѧ¿Ï¶¨²»½û»áÏëµ½£¬ÔÚRocketMQÖв»ÊÇÌṩÁËÁ½ÖÖÏû·ÑÕßÂð£¿

MQPullConsumerºÍMQPushConsumer£¬ÆäÖÐMQPushConsumer²»¾ÍÊÇÎÒÃǵÄÍÆÄ£ÐÍÂð£¿ÆäʵÕâÁ½ÖÖÄ£ÐͶ¼Êǿͻ§¶ËÖ÷¶¯È¥À­ÏûÏ¢£¬ÆäÖеÄʵÏÖÇø±ðÈçÏ£º

MQPullConsumer£ºÃ¿´ÎÀ­È¡ÏûÏ¢ÐèÒª´«ÈëÀ­È¡ÏûÏ¢µÄoffsetºÍÿ´ÎÀ­È¡¶àÉÙÏûÏ¢Á¿£¬¾ßÌåÀ­È¡ÄÄÀïµÄÏûÏ¢£¬À­È¡¶àÉÙÊÇÓɿͻ§¶Ë¿ØÖÆ¡£

MQPushConsumer£ºÍ¬ÑùÒ²Êǿͻ§¶ËÖ÷¶¯À­È¡ÏûÏ¢£¬µ«ÊÇÏûÏ¢½ø¶ÈÊÇÓÉ·þÎñ¶Ë±£´æ£¬Consumer»á¶¨Ê±Éϱ¨×Ô¼ºÏû·Ñµ½ÄÄÀËùÒÔConsumerÏ´ÎÏû·ÑµÄʱºòÊÇ¿ÉÒÔÕÒµ½ÉÏ´ÎÏû·ÑµÄµã£¬Ò»°ãÀ´ËµÊ¹ÓÃPushConsumerÎÒÃDz»ÐèÒª¹ØÐÄoffsetºÍÀ­È¡¶àÉÙÊý¾Ý£¬Ö±½ÓʹÓü´¿É¡£

3.4.1 ¼¯ÈºÏû·ÑºÍ¹ã²¥Ïû·Ñ

Ïû·ÑģʽÎÒÃÇ·ÖΪÁ½ÖÖ£¬¼¯ÈºÏû·Ñ£¬¹ã²¥Ïû·Ñ:

¼¯ÈºÏû·Ñ: ͬһ¸öGroupId¶¼ÊôÓÚÒ»¸ö¼¯Èº£¬Ò»°ãÀ´ËµÒ»ÌõÏûÏ¢Ö»»á±»ÈÎÒâÒ»¸öÏû·ÑÕß´¦Àí¡£

¹ã²¥Ïû·Ñ£º¹ã²¥Ïû·ÑµÄÏûÏ¢»á±»¼¯ÈºÖÐËùÓÐÏû·ÑÕß½øÐÐÏûÏ¢£¬µ«ÊÇҪעÒâÒ»ÏÂÒòΪ¹ã²¥Ïû·ÑµÄoffsetÔÚ·þÎñ¶Ë±£´æ³É±¾Ì«¸ß£¬ËùÒÔ¿Í»§¶Ëÿһ´ÎÖØÆô¶¼»á´Ó×îÐÂÏûÏ¢Ïû·Ñ£¬¶ø²»ÊÇÉϴα£´æµÄoffset¡£

3.5 ÍøÂçÄ£ÐÍ

ÔÚKafkaÖÐʹÓõÄÔ­ÉúµÄsocketʵÏÖÍøÂçͨÐÅ£¬¶øRocketMQʹÓõÄÊÇNettyÍøÂç¿ò¼Ü£¬ÏÖÔÚÔ½À´Ô½¶àµÄÖмä¼þ¶¼²»»áÖ±½ÓÑ¡ÔñÔ­ÉúµÄsocket£¬¶øÊÇʹÓõÄNetty¿ò¼Ü£¬Ö÷ÒªµÃÒæÓÚÏÂÃæ¼¸¸öÔ­Òò:

APIʹÓüòµ¥£¬²»ÐèÒª¹ØÐĹý¶àµÄÍøÂçϸ½Ú£¬¸üרעÓÚÖмä¼þÂß¼­¡£

ÐÔÄܸߡ£

³ÉÊìÎȶ¨£¬jdk nioµÄbug¶¼±»ÐÞ¸´ÁË¡£

Ñ¡Ôñ¿ò¼ÜÊÇÒ»·½Ã棬¶øÏëÒª±£Ö¤ÍøÂçͨÐŵĸßЧ£¬ÍøÂçÏß³ÌÄ£ÐÍÒ²ÊÇÒ»·½Ã棬ÎÒÃdz£¼ûµÄÓÐ1+N(1¸öAcceptorỊ̈߳¬N¸öIOÏß³Ì)£¬1+N+M(1¸öacceptorỊ̈߳¬N¸öIOỊ̈߳¬M¸öworkerÏß³Ì)µÈÄ£ÐÍ£¬RocketMQʹÓõÄÊÇ1+N1+N2+MµÄÄ£ÐÍ£¬ÈçÏÂͼËùʾ£º

1¸öacceptorỊ̈߳¬N1¸öIOỊ̈߳¬N2¸öÏß³ÌÓÃÀ´×öShake-hand,SSLÑéÖ¤,±à½âÂë;M¸öÏß³ÌÓÃÀ´×öÒµÎñ´¦Àí¡£ÕâÑùµÄºÃ´¦½«±à½âÂ룬ºÍSSLÑéÖ¤µÈһЩ¿ÉÄܺÄʱµÄ²Ù×÷·ÅÔÚÁËÒ»¸öµ¥¶ÀµÄÏ̳߳أ¬²»»áÕ¼¾ÝÎÒÃÇÒµÎñÏ̺߳ÍIOÏ̡߳£

3.6 ¸ß¿É¿¿µÄ·Ö²¼Ê½´æ´¢Ä£ÐÍ

×öΪһ¸öºÃµÄÏûϢϵͳ£¬¸ßÐÔÄܵĴ洢£¬¸ß¿ÉÓö¼²»¿ÉÉÙ¡£

3.6.1 ¸ßÐÔÄÜÈÕÖ¾´æ´¢

RocketMQºÍKafkaµÄ´æ´¢ºËÐÄÉè¼ÆÓкܴóµÄ²»Í¬£¬ËùÒÔÆäÔÚдÈëÐÔÄÜ·½ÃæÒ²ÓкܴóµÄ²î±ð£¬ÕâÊÇ16Äê°¢ÀïÖмä¼þÍŶӶÔRocketMQºÍKafka²»Í¬TopicÏÂ×öµÄÐÔÄܲâÊÔ:

´ÓͼÉÏ¿ÉÒÔ¿´³ö£º

KafkaÔÚTopicÊýÁ¿ÓÉ64Ôö³¤µ½256ʱ£¬ÍÌÍÂÁ¿Ï½µÁË98.37%¡£

RocketMQÔÚTopicÊýÁ¿ÓÉ64Ôö³¤µ½256ʱ£¬ÍÌÍÂÁ¿Ö»Ï½µÁË16%¡£

ÕâÊÇÎªÊ²Ã´ÄØ£¿kafkaÒ»¸ötopicÏÂÃæµÄËùÓÐÏûÏ¢¶¼ÊÇÒÔpartitionµÄ·½Ê½·Ö²¼Ê½µÄ´æ´¢ÔÚ¶à¸ö½ÚµãÉÏ¡£Í¬Ê±ÔÚkafkaµÄ»úÆ÷ÉÏ£¬Ã¿¸öPartitionÆäʵ¶¼»á¶ÔÓ¦Ò»¸öÈÕ־Ŀ¼£¬ÔÚĿ¼ÏÂÃæ»á¶ÔÓ¦¶à¸öÈÕÖ¾·Ö¶Î¡£ËùÒÔÈç¹ûTopicºÜ¶àµÄʱºòKafkaËäȻдÎļþÊÇ˳Ðòд£¬µ«Êµ¼ÊÉÏÎļþ¹ý¶à£¬»áÔì³É´ÅÅÌIO¾ºÕù·Ç³£¼¤ÁÒ¡£

ÄÇRocketMQΪʲôÔÚ¶àTopicµÄÇé¿öÏ£¬ÒÀÈ»»¹Äܺܺõı£³Ö½Ï¶àµÄÍÌÍÂÁ¿ÄØ£¿ÎÒÃÇÊ×ÏÈÀ´¿´Ò»ÏÂRocketMQÖбȽϹؼüµÄÎļþ:

ÕâÀïÓÐËĸöĿ¼£¨ÕâÀïµÄ½âÊ;ÍÖ±½ÓÓÃRocketMQ¹Ù·½µÄÁË£©:

commitLog£ºÏûÏ¢Ö÷ÌåÒÔ¼°ÔªÊý¾ÝµÄ´æ´¢Ö÷Ì壬´æ´¢Producer¶ËдÈëµÄÏûÏ¢Ö÷ÌåÄÚÈÝ,ÏûÏ¢ÄÚÈݲ»ÊǶ¨³¤µÄ¡£µ¥¸öÎļþ´óСĬÈÏ1G £¬ÎļþÃû³¤¶ÈΪ20룬×ó±ß²¹Á㣬ʣÓàΪÆðÊ¼Æ«ÒÆÁ¿£¬±ÈÈç00000000000000000000´ú±íÁ˵ÚÒ»¸öÎļþ£¬ÆðÊ¼Æ«ÒÆÁ¿Îª0£¬Îļþ´óСΪ1G=1073741824£»µ±µÚÒ»¸öÎļþдÂúÁË£¬µÚ¶þ¸öÎļþΪ00000000001073741824£¬ÆðÊ¼Æ«ÒÆÁ¿Îª1073741824£¬ÒÔ´ËÀàÍÆ¡£ÏûÏ¢Ö÷ÒªÊÇ˳ÐòдÈëÈÕÖ¾Îļþ£¬µ±ÎļþÂúÁË£¬Ð´ÈëÏÂÒ»¸öÎļþ£»

config£º±£´æÒ»Ð©ÅäÖÃÐÅÏ¢£¬°üÀ¨Ò»Ð©Group£¬TopicÒÔ¼°ConsumerÏû·ÑoffsetµÈÐÅÏ¢¡£

consumeQueue:ÏûÏ¢Ïû·Ñ¶ÓÁУ¬ÒýÈëµÄÄ¿µÄÖ÷ÒªÊÇÌá¸ßÏûÏ¢Ïû·ÑµÄÐÔÄÜ£¬ÓÉÓÚRocketMQÊÇ»ùÓÚÖ÷ÌâtopicµÄ¶©ÔÄģʽ£¬ÏûÏ¢Ïû·ÑÊÇÕë¶ÔÖ÷Ìâ½øÐеģ¬Èç¹ûÒª±éÀúcommitlogÎļþÖиù¾Ýtopic¼ìË÷ÏûÏ¢ÊǷdz£µÍЧµÄ¡£

Consumer¼´¿É¸ù¾ÝConsumeQueueÀ´²éÕÒ´ýÏû·ÑµÄÏûÏ¢¡£ÆäÖУ¬ConsumeQueue£¨Âß¼­Ïû·Ñ¶ÓÁУ©×÷ΪÏû·ÑÏûÏ¢µÄË÷Òý£¬±£´æÁËÖ¸¶¨TopicϵĶÓÁÐÏûÏ¢ÔÚCommitLogÖÐµÄÆðʼÎïÀíÆ«ÒÆÁ¿offset£¬ÏûÏ¢´óСsizeºÍÏûÏ¢TagµÄHashCodeÖµ¡£consumequeueÎļþ¿ÉÒÔ¿´³ÉÊÇ»ùÓÚtopicµÄcommitlogË÷ÒýÎļþ£¬¹ÊconsumequeueÎļþ¼ÐµÄ×éÖ¯·½Ê½ÈçÏ£ºtopic/queue/fileÈý²ã×éÖ¯½á¹¹£¬¾ßÌå´æ´¢Â·¾¶Îª£ºHOME \store\index\${fileName}£¬ÎļþÃûfileNameÊÇÒÔ´´½¨Ê±µÄʱ¼ä´ÁÃüÃûµÄ£¬¹Ì¶¨µÄµ¥¸öIndexFileÎļþ´óСԼΪ400M£¬Ò»¸öIndexFile¿ÉÒÔ±£´æ 2000W¸öË÷Òý£¬IndexFileµÄµ×²ã´æ´¢Éè¼ÆÎªÔÚÎļþϵͳÖÐʵÏÖHashMap½á¹¹£¬¹ÊrocketmqµÄË÷ÒýÎļþÆäµ×²ãʵÏÖΪhashË÷Òý¡£ ÎÒÃÇ·¢ÏÖÎÒÃǵÄÏûÏ¢Ö÷ÌåÊý¾Ý²¢Ã»ÓÐÏñKafkaÒ»ÑùдÈë¶à¸öÎļþ£¬¶øÊÇдÈëÒ»¸öÎļþ,ÕâÑùÎÒÃǵÄдÈëIO¾ºÕù¾Í·Ç³£Ð¡£¬¿ÉÒÔÔںܶàTopicµÄʱºòÒÀÈ»±£³ÖºÜ¸ßµÄÍÌÍÂÁ¿¡£ÓÐͬѧ˵ÕâÀïµÄConsumeQueueдÊÇÔÚ²»Í£µÄдÈëÄØ£¬²¢ÇÒConsumeQueueÊÇÒÔQueueά¶ÈÀ´´´½¨Îļþ£¬ÄÇôÎļþÊýÁ¿ÒÀÈ»ºÜ¶à£¬ÔÚÕâÀïConsumeQueueµÄдÈëµÄÊý¾ÝÁ¿ºÜС£¬Ã¿ÌõÏûÏ¢Ö»ÓÐ20¸ö×Ö½Ú£¬30WÌõÊý¾ÝÒ²²Å6M×óÓÒ£¬ËùÒÔÆäʵ¶ÔÎÒÃǵÄÓ°ÏìÏà¶ÔKafkaµÄTopicÖ®¼äÓ°ÏìÊÇҪСºÜ¶àµÄ¡£ÎÒÃÇÕû¸öµÄÂß¼­¿ÉÒÔÈçÏ£º

Producer²»¶ÏµÄÔÙÍùCommitLogÌí¼ÓеÄÏûÏ¢£¬ÓÐÒ»¸ö¶¨Ê±ÈÎÎñReputService»á²»¶ÏµÄɨÃèÐÂÌí¼Ó½øÀ´µÄCommitLog£¬È»ºó²»¶ÏµÄÈ¥¹¹½¨ConsumerQueueºÍIndex¡£

×¢Ò⣺ÕâÀïÖ¸µÄ¶¼ÊÇÆÕͨµÄÓ²ÅÌ£¬ÔÚSSDÉÏÃæ¶à¸öÎļþ²¢·¢Ð´ÈëºÍµ¥¸öÎļþдÈëÓ°Ïì²»´ó¡£

¶ÁÈ¡ÏûÏ¢

KafkaÖÐÿ¸öPartition¶¼»áÊÇÒ»¸öµ¥¶ÀµÄÎļþ£¬ËùÒÔµ±Ïû·Ñij¸öÏûÏ¢µÄʱºò£¬»áºÜºÃµÄ³öÏÖ˳Ðò¶Á£¬ÎÒÃÇÖªµÀOS´ÓÎïÀí´ÅÅÌÉÏ·ÃÎʶÁÈ¡ÎļþµÄͬʱ£¬»á˳Ðò¶ÔÆäËûÏàÁÚ¿éµÄÊý¾ÝÎļþ½øÐÐÔ¤¶ÁÈ¡£¬½«Êý¾Ý·ÅÈëPageCache£¬ËùÒÔKafkaµÄ¶ÁÈ¡ÏûÏ¢ÐÔÄܱȽϺá£

RocketMQ¶ÁÈ¡Á÷³ÌÈçÏ£º

ÏȶÁÈ¡ConsumerQueueÖеÄoffset¶ÔÓ¦CommitLogÎïÀíµÄoffset

¸ù¾Ýoffset¶ÁÈ¡CommitLog

ConsumerQueueÒ²ÊÇÿ¸öQueueÒ»¸öµ¥¶ÀµÄÎļþ£¬²¢ÇÒÆäÎļþÌå»ýС£¬ËùÒÔºÜÈÝÒ×ÀûÓÃPageCacheÌá¸ßÐÔÄÜ¡£¶øCommitLog£¬ÓÉÓÚͬһ¸öQueueµÄÁ¬ÐøÏûÏ¢ÔÚCommitLogÆäʵÊDz»Á¬ÐøµÄ£¬ËùÒÔ»áÔì³ÉËæ»ú¶Á£¬RocketMQ¶Ô´Ë×öÁ˼¸¸öÓÅ»¯£º

MmapÓ³Éä¶ÁÈ¡£¬MmapµÄ·½Ê½¼õÉÙÁË´«Í³IO½«´ÅÅÌÎļþÊý¾ÝÔÚ²Ù×÷ϵͳÄں˵ØÖ·¿Õ¼äµÄ»º³åÇøºÍÓû§Ó¦ÓóÌÐòµØÖ·¿Õ¼äµÄ»º³åÇøÖ®¼äÀ´»Ø½øÐп½±´µÄÐÔÄÜ¿ªÏú

ʹÓÃDeadLineµ÷¶ÈËã·¨+SSD´æ´¢ÅÌ

ÓÉÓÚMmapÓ³ÉäÊܵ½ÄÚ´æÏÞÖÆ£¬µ±²»ÔÚMmmapÓ³ÉäÕⲿ·ÖÊý¾ÝµÄʱºò(Ò²¾ÍÊÇÏûÏ¢¶Ñ»ý¹ý¶à)£¬Ä¬ÈÏÊÇÄÚ´æµÄ40%£¬»á½«ÇëÇó·¢Ë͵½SLAVE,¼õ»ºMasterµÄѹÁ¦

3.6.2 ¿ÉÓÃÐÔ

3.6.2.1 ¼¯ÈºÄ£Ê½

ÎÒÃÇÊ×ÏÈÐèҪѡÔñÒ»ÖÖ¼¯ÈºÄ£Ê½£¬À´ÊÊÓ¦ÎÒÃÇ¿ÉÈÌÄ͵ĿÉÓó̶ȣ¬Ò»°ãÀ´Ëµ·ÖΪÈýÖÖ£º

µ¥Master:ÕâÖÖģʽ£¬¿ÉÓÃÐÔ×îµÍ£¬µ«Êdzɱ¾Ò²ÊÇ×îµÍ£¬Ò»µ©å´»ú£¬ËùÓж¼²»¿ÉÓá£ÕâÖÖÒ»°ãÖ»ÊÊÓÃÓÚ±¾µØ²âÊÔ¡£

µ¥Master¶àSLAVE:ÕâÖÖģʽ£¬¿ÉÓÃÐÔÒ»°ã£¬Èç¹ûÖ÷å´»ú£¬ÄÇôËùÓÐдÈë¶¼²»¿ÉÓ㬶ÁÈ¡ÒÀÈ»¿ÉÓã¬Èç¹ûmaster´ÅÅÌË𻵣¬¿ÉÒÔÒÀÀµslaveµÄÊý¾Ý¡£

¶àMaster:ÕâÖÖģʽ£¬¿ÉÓÃÐÔÒ»°ã£¬Èç¹û³öÏÖ²¿·Ömasterå´»ú£¬ÄÇôÕⲿ·ÖmasterÉϵÄÏûÏ¢¶¼²»¿ÉÏû·Ñ£¬Ò²²»¿ÉдÊý¾Ý£¬Èç¹ûÒ»¸öTopicµÄ¶ÓÁÐÔÚ¶à¸öMasterÉ϶¼ÓУ¬ÄÇô¿ÉÒÔ±£Ö¤Ã»ÓÐå´»úµÄÄDz¿·Ö¿ÉÒÔÕý³£Ïû·Ñ£¬Ð´Èë¡£Èç¹ûmasterµÄ´ÅÅÌË𻵻ᵼÖÂÏûÏ¢¶ªÊ§¡£

¶àMaster¶àSlave£ºÕâÖÖģʽ£¬¿ÉÓÃÐÔ×î¸ß£¬µ«ÊÇά»¤³É±¾Ò²×î¸ß£¬µ±masterå´»úÁËÖ®ºó£¬Ö»»á³öÏÖÔÚÕⲿ·ÖmasterÉϵĶÓÁв»¿ÉдÈ룬µ«ÊǶÁÈ¡ÒÀÈ»ÊÇ¿ÉÒԵ쬲¢ÇÒÈç¹ûmaster´ÅÅÌË𻵣¬¿ÉÒÔÒÀÀµslaveµÄÊý¾Ý¡£

Ò»°ãÀ´ËµÍ¶ÈëÉú²ú»·¾³µÄ»°¶¼»áÑ¡ÔñµÚËÄÖÖ£¬À´±£Ö¤×î¸ßµÄ¿ÉÓÃÐÔ¡£

3.6.2.2 ÏûÏ¢µÄ¿ÉÓÃÐÔ

µ±ÎÒÃÇÑ¡ÔñºÃÁ˼¯ÈºÄ£Ê½Ö®ºó£¬ÄÇôÎÒÃÇÐèÒª¹ØÐĵľÍÊÇÔõôȥ´æ´¢ºÍ¸´ÖÆÕâ¸öÊý¾Ý£¬rocketMQ¶ÔÏûÏ¢µÄË¢ÅÌÌṩÁËͬ²½ºÍÒì²½µÄ²ßÂÔÀ´Âú×ãÎÒÃǵ쬵±ÎÒÃÇÑ¡Ôñͬ²½Ë¢ÅÌÖ®ºó£¬Èç¹ûË¢Å̳¬Ê±»á¸ø·µ»ØFLUSH_DISK_TIMEOUT£¬Èç¹ûÊÇÒ첽ˢÅ̲»»á·µ»ØË¢ÅÌÏà¹ØÐÅÏ¢£¬Ñ¡Ôñͬ²½Ë¢ÅÌ¿ÉÒÔ¾¡×î´ó³Ì¶ÈÂú×ãÎÒÃǵÄÏûÏ¢²»»á¶ªÊ§¡£

³ýÁË´æ´¢ÓÐÑ¡ÔñÖ®ºó£¬ÎÒÃǵÄÖ÷´Óͬ²½ÌṩÁËͬ²½ºÍÒì²½Á½ÖÖģʽÀ´½øÐи´ÖÆ£¬µ±È»Ñ¡Ôñͬ²½¿ÉÒÔÌáÉý¿ÉÓÃÐÔ£¬µ«ÊÇÏûÏ¢µÄ·¢ËÍRTʱ¼ä»áϽµ10%×óÓÒ¡£

3.6.3 Dleger

ÎÒÃÇÉÏÃæ¶ÔÓÚmaster-slave²¿ÊðģʽÒѾ­×öÁ˺ܶà·ÖÎö£¬ÎÒÃÇ·¢ÏÖ£¬µ±master³öÏÖÎÊÌâµÄʱºò£¬ÎÒÃǵÄдÈëÔõô¶¼»á²»¿ÉÓ㬳ý·Ç»Ö¸´master£¬»òÕßÊÖ¶¯½«ÎÒÃǵÄslaveÇл»³Émaster£¬µ¼ÖÂÁËÎÒÃǵÄSlaveÔÚ¶àÊýÇé¿öÏÂÖ»ÓжÁÈ¡µÄ×÷Óá£RocketMQÔÚ×î½üµÄ¼¸¸ö°æ±¾ÖÐÍÆ³öÁËDleger-RocketMQ£¬Ê¹ÓÃRaftЭÒ鏴֯CommitLog£¬²¢ÇÒ×Ô¶¯½øÐÐÑ¡Ö÷£¬ÕâÑùmasterå´»úµÄʱºò£¬Ð´ÈëÒÀÈ»±£³Ö¿ÉÓá£

ÓйØDleger-RocketMQµÄÐÅÏ¢¸ü¶àµÄ¿ÉÒԲ鿴ÕâÆªÎÄÕ£ºDledger-RocketMQ »ùÓÚRaftЭÒéµÄcommitlog´æ´¢¿â¡£

3.7 ¶¨Ê±/ÑÓʱÏûÏ¢

¶¨Ê±ÏûÏ¢ºÍÑÓʱÏûÏ¢ÔÚʵ¼ÊÒµÎñ³¡¾°ÖÐʹÓõıȽ϶࣬±ÈÈçÏÂÃæµÄһЩ³¡¾°£º

¶©µ¥³¬Ê±Î´Ö§¸¶×Ô¶¯¹Ø±Õ£¬ÒòΪÔںܶೡ¾°ÖÐϵ¥Ö®ºó¿â´æ¾Í±»Ëø¶¨ÁË£¬ÕâÀïÐèÒª½«Æä½øÐг¬Ê±¹Ø±Õ¡£

ÐèҪһЩÑÓʱµÄ²Ù×÷£¬±ÈÈçһЩ¶µµ×µÄÂß¼­£¬µ±×öÍêij¸öÂß¼­Ö®ºó£¬¿ÉÒÔ·¢ËÍÑÓʱÏûÏ¢±ÈÈçÑÓʱ°ë¸öСʱ£¬½øÐжµµ×¼ì²é²¹³¥¡£

ÔÚij¸öʱ¼ä¸øÓû§·¢ËÍÏûÏ¢£¬Í¬ÑùÒ²¿ÉÒÔʹÓÃÑÓʱÏûÏ¢¡£

ÔÚ¿ªÔ´°æ±¾µÄRocketMQÖÐÑÓʱÏûÏ¢²¢²»Ö§³ÖÈÎÒâʱ¼äµÄÑÓʱ£¬ÐèÒªÉèÖü¸¸ö¹Ì¶¨µÄÑÓʱµÈ¼¶£¬Ä¿Ç°Ä¬ÈÏÉèÖÃΪ£º1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h£¬´Ó1sµ½2h·Ö±ð¶ÔÓ¦×ŵȼ¶1µ½18£¬¶ø°¢ÀïÔÆÖеİ汾(Òª¸¶Ç®)ÊÇ¿ÉÒÔÖ§³Ö40ÌìÄÚµÄÈκÎʱ¿Ì£¨ºÁÃë¼¶±ð£©¡£ÎÒÃÇÏÈ¿´ÏÂÔÚRocketMQÖж¨Ê±ÈÎÎñÔ­Àíͼ£º

Step1£ºProducerÔÚ×Ô¼º·¢Ë͵ÄÏûÏ¢ÉÏÉèÖúÃÐèÒªÑÓʱµÄ¼¶±ð¡£

Step2: Broker·¢ÏÖ´ËÏûÏ¢ÊÇÑÓʱÏûÏ¢£¬½«Topic½øÐÐÌæ»»³ÉÑÓʱTopic£¬Ã¿¸öÑÓʱ¼¶±ð¶¼»á×÷Ϊһ¸öµ¥¶ÀµÄqueue£¬½«×Ô¼ºµÄTopic×÷Ϊ¶îÍâÐÅÏ¢´æ´¢¡£

Step3: ¹¹½¨ConsumerQueue

Step4: ¶¨Ê±ÈÎÎñ¶¨Ê±É¨Ãèÿ¸öÑÓʱ¼¶±ðµÄConsumerQueue¡£

Step5: Äõ½ConsumerQueueÖеÄCommitLogµÄOffset£¬»ñÈ¡ÏûÏ¢£¬ÅжÏÊÇ·ñÒѾ­´ïµ½Ö´ÐÐʱ¼ä

Step6: Èç¹û´ïµ½£¬ÄÇô½«ÏûÏ¢µÄTopic»Ö¸´£¬½øÐÐÖØÐÂͶµÝ¡£Èç¹ûûÓдﵽÔòÑÓ³ÙûÓдﵽµÄÕâ¶Îʱ¼äÖ´ÐÐÈÎÎñ¡£

¿ÉÒÔ¿´¼ûÑÓʱÏûÏ¢ÊÇÀûÓÃн¨µ¥¶ÀµÄTopicºÍQueueÀ´ÊµÏֵģ¬Èç¹ûÎÒÃÇҪʵÏÖ40ÌìÖ®ÄÚµÄÈÎÒâʱ¼ä¶È£¬»ùÓÚÕâÖÖ·½°¸£¬ÄÇôÐèÒª402460601000¸öqueue£¬ÕâÑùµÄ³É±¾ÊǷdz£Ö®¸ßµÄ£¬Äǰ¢ÀïÔÆÉÏÃæµÄÖ§³ÖÈÎÒâʱ¼äÊÇÔõôʵÏÖµÄÄØ£¿ÕâÀï²Â²âÊdz־û¯¶þ¼¶TimeWheelʱ¼äÂÖ£¬¶þ¼¶Ê±¼äÂÖÓÃÓÚÌæ´úÎÒÃǵÄConsumeQueue£¬±£´æCommitlog-Offset£¬È»ºóͨ¹ýʱ¼äÂÖ²»¶ÏµÄÈ¡³öµ±Ç°ÒѾ­µ½Á˵Äʱ¼ä£¬È»ºóÔÙ´ÎͶµÝÏûÏ¢¡£¾ßÌåµÄʵÏÖÂß¼­ÐèÒªºóÐø»áµ¥¶ÀдһƪÎÄÕ¡£

3.8 ÊÂÎñÏûÏ¢

ÊÂÎñÏûϢͬÑùµÄÒ²ÊÇRocketMQÖеÄÒ»´óÌØÉ«£¬Æä¿ÉÒÔ°ïÖúÎÒÃÇÍê³É·Ö²¼Ê½ÊÂÎñµÄ×îÖÕÒ»ÖÂÐÔ

¾ßÌåʹÓÃÊÂÎñÏûÏ¢²½ÖèÈçÏ£º

Step1£ºµ÷ÓÃsendMessageInTransaction·¢ËÍÊÂÎñÏûÏ¢

Step2: Èç¹û·¢Ëͳɹ¦£¬ÔòÖ´Ðб¾µØÊÂÎñ¡£

Step3: Èç¹ûÖ´Ðб¾µØÊÂÎñ³É¹¦Ôò·¢ËÍcommit£¬Èç¹ûʧ°ÜÔò·¢ËÍrollback¡£

Step4: Èç¹ûÆäÖÐij¸ö½×¶Î±ÈÈçcommit·¢ËÍʧ°Ü£¬rocketMQ»á½øÐж¨Ê±´ÓBroker»Ø²é£¬±¾µØÊÂÎñµÄ״̬¡£

ÊÂÎñÏûÏ¢µÄʹÓÃÕû¸öÁ÷³ÌÏà¶Ô֮ǰ¼¸ÖÖÏûϢʹÓñȽϸ´ÔÓ£¬ÏÂÃæÊÇÊÂÎñÏûϢʵÏÖµÄÔ­Àíͼ£º

Step1: ·¢ËÍÊÂÎñÏûÏ¢,ÕâÀïÒ²½Ð×öhalfMessage£¬»á½«TopicÌæ»»ÎªHalfMessageµÄTopic¡£

Step2: ·¢ËÍcommit»òÕßrollback£¬Èç¹ûÊÇcommitÕâÀï»á²éѯ³ö֮ǰµÄÏûÏ¢£¬È»ºó½«ÏûÏ¢¸´Ô­³ÉÔ­Topic£¬²¢ÇÒ·¢ËÍÒ»¸öOpMessageÓÃÓڼǼµ±Ç°ÏûÏ¢¿ÉÒÔɾ³ý¡£Èç¹ûÊÇrollbackÕâÀï»áÖ±½Ó·¢ËÍÒ»¸öOpMessageɾ³ý¡£

Step3: ÔÚBrokerÓиö´¦ÀíÊÂÎñÏûÏ¢µÄ¶¨Ê±ÈÎÎñ£¬¶¨Ê±¶Ô±ÈhalfMessageºÍOpMessage,Èç¹ûÓÐOpMessageÇÒ״̬Ϊɾ³ý£¬ÄÇô¸ÃÌõÏûÏ¢±Ø¶¨commit»òÕßrollback£¬ËùÒԾͿÉÒÔɾ³ýÕâÌõÏûÏ¢¡£

Step4: Èç¹ûÊÂÎñ³¬Ê±£¨Ä¬ÈÏÊÇ6s£©£¬»¹Ã»ÓÐopMessage£¬ÄÇôºÜÓпÉÄÜcommitÐÅÏ¢¶ªÁË£¬ÕâÀï»áÈ¥·´²éÎÒÃǵÄProducer±¾µØÊÂÎñ״̬¡£

Step5: ¸ù¾Ý²éѯ³öÀ´µÄÐÅÏ¢×öStep2¡£

ÎÒÃÇ·¢ÏÖRocketMQʵÏÖÊÂÎñÏûÏ¢Ò²ÊÇͨ¹ýÐÞ¸ÄÔ­TopicÐÅÏ¢£¬ºÍÑÓ³ÙÏûÏ¢Ò»Ñù£¬È»ºóÄ£Äâ³ÉÏû·ÑÕß½øÐÐÏû·Ñ£¬×öÒ»Ð©ÌØÊâµÄÒµÎñÂß¼­¡£µ±È»ÎÒÃÇ»¹¿ÉÒÔÀûÓÃÕâÖÖ·½Ê½È¥×öRocketMQ¸ü¶àµÄÀ©Õ¹¡£

4.×ܽá

ÕâÀïÈÃÎÒÃÇÔڻص½ÎÄÕÂÖÐÌáµ½µÄ¼¸¸öÎÊÌ⣺

RocketMQµÄtopicºÍ¶ÓÁÐÊÇʲôÑùµÄ£¬ºÍKafkaµÄ·ÖÇøÓÐʲô²»Í¬£¿

RocketMQÍøÂçÄ£ÐÍÊÇʲôÑùµÄ£¬ºÍKafka¶Ô±ÈÈçºÎ£¿

RocketMQÏûÏ¢´æ´¢Ä£ÐÍÊÇʲôÑùµÄ£¬ÈçºÎ±£Ö¤¸ß¿É¿¿µÄ´æ´¢£¬ºÍKafka¶Ô±ÈÈçºÎ£¿

 
   
8157 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

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

ÔÆÆ½Ì¨Óë΢·þÎñ¼Ü¹¹Éè¼Æ
ÖÐ̨սÂÔ¡¢ÖÐ̨½¨ÉèÓëÊý×ÖÉÌÒµ
ÒÚ¼¶Óû§¸ß²¢·¢¡¢¸ß¿ÉÓÃϵͳ¼Ü¹¹
¸ß¿ÉÓ÷ֲ¼Ê½¼Ü¹¹Éè¼ÆÓëʵ¼ù