消息队列
1. 消息队列对比
2. 为什么Kafka不能支持更多的分区?
- 分区内顺序写入,性能高,如果分区多,分区变多,操作系统看,写入变的随机
3. RocketMQ可以支持更多分区
- 所有消息数据都存储在提交日志文件中。所有写入都是完全顺序的,而读取是随机的。
ConsumeQueue存储实际的用户消费位置信息,这些信息也以顺序方式刷新到磁盘
4. 为什么kafka设计中要引入分区,好处是什么?
如果没有引入分区,意味着只能写入一台机器,不利于数据负载均衡和横向扩展。
引入多分区对写,分区落在不同服务器,提升并发写的能力
读方面,消费消息的时候是跟消费者组进行绑定,可以从不同节点的不同分区进行消费消息,提高了读消息的能力
5. 消息丢失
5.1 生产者丢失
- 异步发送,无回调 : 解决 异步回调,重试机制
5.2 broker 丢失
5.2.1 丢失场景
消息异步刷盘
单副本
5.2.2 kafak 和rocketMq防丢失配置
RocketMQ分为同步刷盘和异步刷盘(异步刷前宕机丢失)
kafak消息中间件配置:
acks=all 只有参与复制的所有节点全部收到消息,才返回⽣产者成功。这样的话除⾮所有的节点都挂了,消息才会丢失。
replication.factor=N,设置⼤于1的数,这会要求每个partion⾄少有2个副本
min.insync.replicas=N,设置⼤于1的数,这会要求leader⾄少感知到⼀个follower还保持着连接
retries=N,设置⼀个⾮常⼤的值,让⽣产者发送失败⼀直重试
5.3 消费者丢失
ack自动提交,服务挂了,导致丢失,解决方案:改为手动提交