https://mp.weixin.qq.com/s/bc2YcVeBglZkeHdASg3wXw
1.为什么使用消息队列?
引入MQ好处:
- 系统解耦
- 异步调用
- 流量削峰
2.使用消息队列有什么缺点?
4.如何保证消息队列是高可用的?
5.如何保证消息不被重复消费?
6.如何保证消费的可靠性传输?
7.如何保证消息的顺序性?
kafka可靠性保证
关系型数据库ACID
- 原子性
- 一致性
- 隔离性
- 持久性
kafka 可靠性保证
- kafka 可以保证分区消息的顺序
- 只有当消息被写入分区的所有同步副本时(但不一定要写入磁盘),它才被认为是“已提交”的
- 只要还有一个副本是活跃的,那么已经提交的消息就不会丢失
- 消费者只能读取已经提交的消息
分区的分布:
默认情况下,kafka会确保分区的每个副本被放在不同的broker上。
发送确认:
生产者可以选择3中确认模式
- acks=0 如果生产者能够通过网络把消息发送出去,那么就认为消息已成功写入Kafka;
- acks=1 Leader在收到消息并把它写入到分区数据文件(不一定同步到磁盘上)时会返回确认或错误响应,
在这个模式下,如果发生正常的Leader选举,生产者会在选举时收到一个LeaderNotAvailableException异常, - acks=all