MQ和注册中心
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
