±à¼ÍƼö: |
±¾ÎÄÆªÎÄÕ»ᾡÁ¦È«ÃæµÄ½éÉÜ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£¬ÀÈ¡ÏûÏ¢µÄʱºòÒ²ÐèÒªÖ¸¶¨Àȡij¸ö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¶Ô±ÈÈçºÎ£¿
|