我是设计系统的新手,对消息队列和协调服务(zookeeper)有一些疑问。使用消息队列和协调服务的设计系统
这将是巨大的,如果有人可以澄清这些概念: -
我在我设计的系统MQ的理解: -
我将生产性服务,这将创建消息,并加入到MQ。消费者将使用此消息并执行相应的操作。一旦消费者ACK完成消息处理, MQ会将偏移量移至下一个偏移量。我不希望我的邮件被错过,所以我必须确保邮件成功使用。此外,我试图让这个系统消耗一次消息(尝试尽可能接近)。
现在我基于这样的认识以下几个问题: -
1)如果我想我在同一个DC生产者和消费者要运行多个实例(高可用性),那么我需要有生产者和消费者都是独立的Zookeeper服务?我的所有不同的服务(在微服务世界中)是否都需要单独的zookeeper服务器/实例,或者同一个实例可以解决这个问题?
2)当消费者使用消息时,它会在消费完消息后对其进行确认(完成处理并采取任何所需的操作)。我想了解一个系统每秒钟会有几千个请求的速度会如何加快。如果我们读取更多的消息或不等待ACK直到处理,那么在消费者失败的情况下,这些消息将被错过,因为它们从未成功处理过。我知道拥有更多的消费者将会使其同时工作,但我不清楚这个概念是如何工作的。有人可以向我解释什么是消费和配置组件之间的交互的正确方式,以使其优化以及持久性,高可用性,可靠性以及关闭到一次模型。
编辑:我打算在系统中使用Java,Zookeeper,Kafka,Cassandra。