消息队列若干问题

2020-09-16  本文已影响0人  小怪兽狂殴奥特曼

1Questions

2Answers

2.1如何保证消息的可靠性

消息的可靠性由三方面组成:生产端可靠性、broker端可靠性、消费端可靠性。
生产端可靠性:必须处理broker的响应,确认消息已经成功写入。一旦写入broker失败,则无限重试。对kafka而言,设置retries=max。这种情况下,可能会导致broker收到重复的消息。
broker端可靠性:采用集群配置。一个消息收到后被写入所有副本后再返回成功。对kafka而言,设置ack=all,配置多个副本。
消费端可靠性:关闭手动提交,等本地业务逻辑执行完毕后再提交。

2.2如何处理重复消息

造成重复消息的原因是因为我们要求生产者确认broker的存储结果,但是由于网络波动造成broker的回包丢失。
处理重复消息的方法有两种:

2.3如何保证消息的有序性

由于前面的要求,即要保证消息的可靠性,broker一般都会做成集群模式。所以很难保证消息的全局有序性。
要满足消息去全局有序性,以kafka为例,一个topic只能有一个分区。这种情况下性能和可靠性都很低,一般不采取。
绝大部分时候,我们只需要分区有序性即可。
对kafka来说,有三种发送策略:指定分区发送、按key哈希后发送、轮询。采用第二种,即可实现分区的有序。

上一篇 下一篇

猜你喜欢

热点阅读