1.重复消费问题如何解决?
- 设置数据库业务唯一id
- 利用redis的原子性操作,把业务主键id,setnx到redis,set成功则消费
2.如何防止消息丢失?
- 发送者丢消息:kafka主从切换同步不及时就会丢消息,设置ACK=ALL+重试可以解决
- 消费者丢消息:kafka为了提高性能先commit再处理业务,业务处理失败则会丢消息,先保存数据库再commit再处理业务可以解决。
3.秒杀场景消息积压如何解决?
- kafka可以通过消费者把消息转发到多个不同分区,然后开多个消费者分别消费不同的分区
- rabbitmq直接开多个消费者消费
4.顺序消费
- kafka分区支持顺序消费