Apache Kafka消息传递

传统的消息传递有两种模型,即队列(queue)和发布订阅(publish-subscribe)。

1. 队列

在队列消息传递系统中,消费者池可以从服务器读取数据,一个记录被一个消费者读取。这样的工作方式有优点也有缺点。优点在于它允许我们在多个消费者实例上处理数据,这有助于扩展。但缺点是,它不是多重订阅模式,一条数据只要被一个进程读取后它就消失了。

2. 发布-订阅

在这个Kafka 发布-订阅系统中,一条记录被广播给所有消费者。它的优点使允许我们将数据广播到多个进程。但是,它也有一些限制,例如无法进行扩展处理,因为每个消息都发送给每个订阅者。

Kafka的消费者组概念集成了这两种模型。与队列模型一样,消费者组允许你将数据处理分配到一组进程上(消费者组的每个成员)。与发布订阅模型一样,Kafka允许你向多个消费者组广播消息。

Kafka模型的优势在于每个主题都具有这两种属性 – 它可以扩展处理并且也是多用户订阅模式 – 不需要被迫选择其中一个。

与传统的消息系统相比,Kafka更能保证消息的顺序性。

传统队列在服务器上按顺序保留记录,如果多个消费者从队列中读取数据,则服务器按照存储顺序项多个消费者分发记录。但是,虽然服务器按顺序分发记录,但是记录是异步传递给消费者的,因此它们可能会在不同的消费者处出现乱序。这实际上意味着在并行消耗的情况下有丢失记录的顺序的可能。 消息传递系统通常通过独占消费者的方法来解决这个问题,该方法只允许一个进程从队列中读取消息,但当然这意味着处理中没有并行性。

Kafka做得更好。通过并行的概念在主题中分区,Kafka能够为消费者流程池提供顺序保证和负载平衡。这是通过将主题中的分区分配给消费者组中的消费者来实现的,以便一个分区仅由该组中的一个消费者使用。通过这样做,我们确保这个消费者是该分区的唯一读者并按顺序读取数据。 即使有许多分区,这仍然可以平衡许多消费者实例的负载。 但请注意,消费者组中的消费者实例数量不能超过分区的数量。

Apache Kafka消息传递

发表评论

邮箱地址不会被公开。 必填项已用*标注

五 + 二 =

滚动到顶部