MQ和注册中心

51 阅读1分钟

1.kafka

  • topic(主题) -> partition(分区) -> segment(数据文件)
  • 分区内保证消息顺序
  • 写入消息分发策略:按照key hash 到对应的分区,如果key==null,则随机指定到分区,一段时间后刷新随机分区(可配)
  • 消费者分区策略:范围、轮询
  • 保证不丢消息:
    • 副本 :多副本保证保证一个宕机,其他的可以顶上
    • isp :leader 和follower 副本之间误差较大时会剔除知道差距很小
    • ack :0 不需要broker 响应,1 需要leader响应 ,-1 需要所有副本响应

RocketMQ

  • rocket 保证一个队列中消息的有序性
  • 发送消息通过设置 putUserProperty(‘delay-level’)发送延迟消息
  • 保证不丢消息:
    • 队列主从同步,防止单节点宕机
    • 同步、异步刷盘
    • 发送确认、重试

kafka 和 rocketmq 对比

  • kafka写入性能是rocketmq的10倍,原因是kafka发送端会合并消息批量发送,而rocketmq 考虑到 gc、严谨、正常业务无法达到 万/s.
  • rocketmq 相比较kafka 消息的延迟更低,使用了长轮询
  • rocketmq 支持定时消息、事务消息、消息查询,kafka则不支持
  • rocketmq 支持异步和同步刷盘,kafka异步刷盘
  • rocketmq 还支持 brock端过滤消息(tag)

注册中心

  • cap:
    • c:一致性
    • a:可用性
    • p:系统中任意节点丢失不影响整体使用
  • zookeeper:cp ,更多适合分布式协调,作为注册中心应该是a大于c的
  • eureka: ap 去除中心节点,保证高可用和稳定,节点下线自动发现较慢
  • nacos:支持ap或者cp,命令切换,还可以作为配置中心,功能强大
  • consul和etcd都是go语言cp

ca093ffdee7e49ec80c3d03f503d211f.png