消息队列-kafka-高性能设计及对比

高性能设计

1 分区提升了些的效率,因为分区分布在不同的broker上这样就提升了并行的效率。
2 Segment顺序些,顺序写的性能非常的快。
3 在发送消息的时候,先是通过send发送到了队列里面,然后sender线程批次发送,这样节省了网络开销。
4 通过 offset 查找消息,利用零拷贝的思想。
传统IO
4次上下文切换,2次CPU拷贝,2次DMA拷贝。也就是读取数据和写数据是分离的先将要写的数据加载进行,然后写完发送出去。
在这里插入图片描述
mmap
建立了一个通道,不将数据拷贝到用户态,而是直接由用户写这个通道,这样少一次拷贝。
在这里插入图片描述
sendfile
数据先拷贝到内核缓冲区,然后还是需要将数据拷贝到网卡进行发送。
在这里插入图片描述
sendfile + gather
和上面的sendfile 区别是它是直接将数据的地址发偏移量给socket缓冲区,网卡进行发送。
在这里插入图片描述

与RocketMq的对比

1 生产者

  • 发送方式在RocketMq是自己控制批量批量发送,Kafka底层直接使用了批量发送的方式。
  • 顺序发送RocketMq使用MessageQueueSelector,Kafka 使用分区器来分区到某一个区域。
  • 定时消息RocketMq支持等级延迟,在高版本也支持自己指定时间,Kafka 不支持定时发送。

2 broker端
消息过滤:RocketMq支持,kafka 不支持
消息轨迹:RocketMq支持,kafka 不支持
消息查询:RocketMq “topic+key”、“topic+messageId” 支持,kafka 不支持
文件存储:RocketMq一个 commitlog、messagequeue、indexfile,kafka N 个 segment(.log、.index)
队列上限:RocketMq单机支持 5W+,kafka 单机支持 64 partition
单机性能:RocketMq十万 TPS,kafka 百万 TPS
Master宕机有无自动切换:RocketMq普通不支持但是 Dledger 支持,kafka 自动支持
数据可靠:RocketMq 同步刷盘,kafka 异步刷盘
开发语言:RocketMq java,kafka scala
注册中心:RocketMq使用去中心化 nameserver,kafka 使用中心化的 zookeeper

3 消费者
消费并行:RocketMq mq的数量线程数量(也就是可以开多线程去消费),kafka 分区一个消费者消费一个分区
消费重试:RocketMq 次数、间隔,kafka 不支持消费重试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值