来自2019年1月4号的学习总结

这几天针对高性能,强顺序的MQ产品进行了测试和选型,主要针对的是apache kafka和apache rocketmq 两款产品。

 

对两端产品的特性做一个简单的阐述:

 

rocketmq 是国内阿里巴巴出产,来自大厂,听说经过双十一洗礼,稳定可靠,主要针对电商场景,支持事务消息,支持延迟消息(用于付款),支持多副本(高可用),消息严格有序,性能测试与kafka不相上下,异步刷盘和同步刷盘,消息持久化。每个topic下都有读/取 队列划分,可以路由消息到指定队列,这一点和kafka的消息分区概念接近。

 

kafka 出自国际大厂 linkin, 目前主要创始人目前自立门户创办了公司 confluent并且推出开源的平台和组件,稳定可靠,上手部署快。各种大厂都在用,用户群体广,稳定可靠,但是有些问题。其支持的特性是 异步刷盘、0.10版本开始支持事务消息和流处理,支持多副本,要严重依赖zookeeper实现副本集群和leader、follower切换,支持topic分区。

 

不支持 延迟消息队列(要靠自己实现),因消费通过offset进行确认的机制,导致消息卡顿和消息重复消费。

 

kafka 的事务消息与 rocketmq 实现方式有差异,kafka 的事务可以跨分区并且有回滚操作,而rocketmq 采用2PC 强一致的方式进行。

 

kafka 会在生产者与broker两端可能丢失部分消息,kafka的生产者将累计消息发送,而不是一条消息就发送一次,所以当消息没有达到发送阈值生产者又异常退出,则消息丢失。

 

kafka 和rmq都是用的page cache,而不是堆内存,所以应用退出后操作系统会保证数据写回磁盘。

 

rocketmq 主要针对的是topic 数据,而kafka 则已经扩展至stream.

 

rocketmq 对每一条消息都要设置key与tag ,没有Key与tag的消息容易出现不可预期的问题。

 

rocketmq consumer 有两种方式,一种是pull consumer,一种是push consumer

 

pull 为主动拉取,可以拉取指定offset和message queue 的消息, 适合补充消费。Pull模式为严格排序方式。

 

push 为被动推,又可分为多线程乱序方式与严格排序方式,严格排序方式无论多少线程,都会变成单线程模式。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值