https://www.cnblogs.com/kevingrace/p/9443270.html
1、消息队列的使用场景
解耦、异步、削峰
2、消息队列的重发、补偿策略
主要因为消费者从队列获取消息,未处理完成发生故障,恢复启动后可能会丢失刚才处理失败的消息。
activeMQ消息监听器一般为:MessageListener。而使用SessionAwareMessageListener可以在消费者处理失败的时候重发,默认6次仍然失败后放入死信队列
kafka:设置手动提交消息偏移,消费者在消息处理成功后手动异步或者同步提交偏移量offset
3、如何保证消息的有序性
kafka:只保证partition内的消息有序,针对多分区情况,需要根据实际的业务场景,应用代码需要实现,如:生产者通过算法将同一个业务ID的数据有序的发送到同一个partition,消费者采用多线程处理消息时,可以将fetch的消息放入内存队列
activemq:consumer.exclusive=true,如果有2个consumer都是这样配置的,broker只会把队列消息发送给其中一个consumer,如果这个consumer挂掉了,broker会把消息推送给另外的consumer,这样就保证了按顺序消费消息。在cusomer中如果是多线程处理消息,则需要对消息进行本地队列控制
4、如何保证消息不丢失
kafka:https://www.cnblogs.com/likehua/p/3999538.html
1)kafka集群保证不丢失:当leader副本宕机,无同步副本时,非同步副本会当选leader时会丢失消息,保证kafka系统中至少有两个同步副本。一个肯定是首领副本,另外一个是从的副本。此时需要kafka的另外一个参数 最小同步副本数 **min,insync.replicas**只有保证kafka收到生产者的消息之后,至少有 “最小同步副本数“ 的副本收到消息,才能保证在主宕机时消息不丢失。这个参数的意思是 kafka收到生产者消息之后,至少几个同步副本,同步之后,才给客户端消息确认。
2)生产者发送保证不丢失:
涉及到一个参数 acks ,有三个 0, 1, all
0 ,那么代表发送过去,不等待kafka消息确认,认为成功,一定会丢失消息,可能kafka集群正在选举,此时就无法收到任何异常。
如果是1,那么代表发送过去,等待首领副本确认消息,认为成功.首领肯定收到了消息,写入了分区文件(不一定落盘)。
如果是all, 那么代表发送过去之后,消息被写入所有同步副本之后 ,认为成功。
3)消费者处理时保证不丢失:
enable.auto.commit自动提交 ,如果开启了自动提交,那么系统会自动进行提交offset。可能会引起,并未消费掉,就提交了offset.引起数据的丢失。
activemq:消息确认机制 ack
5、如何保证消息不重复
MQ中间件都可能出现消息重复的情况,在系统设计的时候需要考虑重复消息的幂等性
kafka可关闭手动提交偏移量
消息被路由到哪个partition上,由producer客户端决定
一个分区只被一个消费者消费
6、activemq与kafka设计上的不同
1)amq消息时push推送给消费者,kafka则是消费者fetch主动获取
2)kafka被消费的消息不会被立即删除,被写入日志文件,定期删除
3)kafka中的broker和consumer都是轻量级的,不需要控制消息的状态,也没有复杂的消息确认机制,通过offset记录消费的位置
4)消息传送机制
传统mq消息传输担保非常直接:有且只有一次(exactly once),kafka则不同:
a. at most once: 最多一次,这个和JMS中"非持久化"消息类似.发送一次,无论成败,将不会重发.
b、 at least once: 消息至少发送一次,如果消息未能接受成功,可能会重发,直到接收成功.首选
c、 exactly once: 消息只会发送一次.
activemq:虽然支持主从、集群,集群功能很弱,只有failover功能;支持广播和队列模式
7、kafka吞吐量高的原因
顺序读写、零拷贝、分区分段、批量发送、数据压缩
8、kafka 主从同步怎么实现
leader负责处理所有的接入。并广播这些,flowers向普通的consumer那样从leader那里拉取消息并保存在自己的日志文件中。
9、利用mq怎么实现最终一致性
订单服务,库存服务,在保存订单成功后,向队列中发送一条消息,库存服务进行处理,达到最后一致性
会有几种异常情况:消息未到达队列、消息未被消费、消费过程中出现异常等情况,需要应用有针对性的进行处理
10、kafka分区与消费者关系:https://www.cnblogs.com/cjsblog/p/9664536.html