ProducerGroup(生产者组):
一个生产者组,代表着一群topic相同的Producer。即一个生产者组是同一类Producer的组合。
如图,Producer_1、Producer_2、Producer_3 为一个ProducerGroup,因为他们都订阅了topicA。同理Producer_4、Producer_5、Producer_6为另一个ProducerGroup,他们订阅了topicB。
如果Producer是TransactionMQProducer,则发送的是事务消息。如果节点1发送完消息后,消息存储到broker的Half Message Queue中,还未存储到目标topic的queue中时,此时节点1崩溃,则可以通过同一Group下的节点2进行二阶段提交,或回溯。
使用时,一个节点下,一个topic会对应一个producer
ConsumerGroup(消费者组):
一个消费者组,代表着一群topic相同,tag相同(即逻辑相同)的Consumer。通过一个消费者组,则可容易的进行负载均衡以及容错
使用时,一个节点下,一个topic加一个tag可以对应一个consumer。一个消费者组就是横向上多个节点的相同consumer为一个消费组。
首先分析一下producer。习惯上我们不会创建多个订阅了相同topic的Producer实例,因为一个Producer实例发送消息时是通过ExecutorService线程池去异步执行的,不会阻塞完全够用,如果创建了多个相同topic的Producer则会影响性能。
而Consumer则不同。消息会在一topic下会细分多个tag,需要针对tag需要针对不同的tag创建多个消费者实例。