常用动静中间件17个维度全方位比拟
未确认的动静不会有逾期时刻,假如一向没有确认,而且没有断开毗连,rabbitmq会一向守候,rabbitmq应承一条动静处理赏罚的时刻可以好久好久。
十五 动静回溯
十六 动静重试 Kafka:不支持,可是可以实现。 kafka支持指定分区offset位置的回溯,可以实现动静重试。 rabbitmq:不支持,可是可以操作动静确认机制实现。 rabbitmq吸取方确认机制,配置autoAck为false。 当autoAck为false的时辰,rabbitmq行列会分成两部门,一部门是守候投递给consumer的动静,一部门是已经投递可是充公到确认的动静。假如一向没有收到确认信号,而且consumer已经断开毗连,rabbitmq会布置这个动静从头进入行列,投递给原本的斲丧者可能下一个斲丧者。 zeromq:不支持 rocketmq:支持。 动静斲丧失败的大部门场景下,当即重试99%城市失败,以是rocketmq的计策是在斲丧失败时按时重试,每次时距离断沟通。 1、发送端的 send 要领自己支持内部重试,重试逻辑如下: a)至多重试3次; b)假如发送失败,则轮转到下一个broker; c)这个要领的总耗时不高出sendMsgTimeout 配置的值,默认 10s,高出时刻不在重试。 2、吸取端。 Consumer 斲丧动静失败后,要提供一种重试机制,令动静再斲丧一次。Consumer 斲丧动静失败凡是可以分为以下两种环境: 因为动静自己的缘故起因,譬喻反序列化失败,动静数据自己无法处理赏罚(譬喻话费充值,当前动静的手机号被 注销,无法充值)等。按时重试机制,好比过 10s 秒后再重试。 因为依靠的下流应用处事不行用,譬喻 db 毗连不行用,外体系收集不行达等。 纵然跳过当前失败的动静,斲丧其他动静同样也会报错。这种环境可以 sleep 30s,再斲丧下一条动静,减轻 Broker 重试动静的压力。 activemq:不支持 十七 并发度 Kafka:高 一个线程一个斲丧者,kafka限定斲丧者的个数要小于便是分区数,假如要进步并行度,可以在斲丧者中再开启多线程,可能增进consumer实例数目。 rabbitmq:极高 自己是用Erlang说话写的,并发机能高。 可在斲丧者中开启多线程,最常用的做法是一个channel对应一个斲丧者,每一个线程独霸一个channel,多个线程复用connection的tcp毗连,镌汰机能开销。 当rabbitmq行列拥有多个斲丧者的时辰,行列收到的动静将以轮询的分发方法发送给斲丧者。每条动静只会发送给订阅列内外的一个斲丧者,不会一再。 这种方法很是得当扩展,并且是专门为并发措施计划的。 假如某些斲丧者的使命较量沉重,那么可以配置basicQos限定信道上斲丧者能保持的最大未确认动静的数目,在到达上限时,rabbitmq不再向这个斲丧者发送任何动静。 zeromq:高 rocketmq:高 1、rocketmq限定斲丧者的个数少于便是行列数,可是可以在斲丧者中再开启多线程,这一点和kafka是同等的,进步并行度的要领沟通。 修改斲丧并行度要领 a) 统一个 ConsumerGroup 下,通过增进 Consumer 实例数目来进步并行度,高出订阅行列数的 Consumer实例无效。 b) 进步单个 Consumer 的斲丧并行线程,通过修改参数consumeThreadMin、consumeThreadMax 2、统一个收集毗连connection,客户端多个线程可以同时发送哀求,毗连会被复用,镌汰机能开销。 activemq:高 单个ActiveMQ的吸取和斲丧动静的速率在1万笔/秒(耐久化 一样平常为1-2万, 非耐久化 2 万以上),在出产情形中陈设10个Activemq就能到达10万笔/秒以上的机能,陈设越多的activemq broker 在MQ上latency也就越低,体系吞吐量也就越高。 版权阐明:本文来自知乎,更多相干答复:http://t.cn/RVDWcfe,版权归原创者全部。除非无法确认,我们城市标明作者及出处,若有侵权烦请奉告,我们会当即删除并暗示歉意,感谢。
(编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |