消息代理中的分区如何解决订购问题?

问题描述 投票:0回答:1

我总的来说想到了分区的想法,但是我不知道它是如何真正解决排序问题的。以克里斯·理查森(Chris Richardson)的书示例为例,如果我有3个事件与给定“分片键”为1的订单(已创建订单,已更新订单和已取消订单)有关。如果每个分区有多个实例,如何确保事件按顺序处理?不是因为同样的问题而裁员吗?

我的意思是,在该示例中,所有消息都发送到第一个分片,但是它们是否在两个实例之间循环轮询?

apache-kafka kafka-producer-api messagebroker
1个回答
0
投票

分区是一种分而治之的方法,但是会带来一些牺牲,这在任何给定的问题域中都是可以接受的。具有多个分区的主题没有“顺序”的概念。如您所指出的,您可以有多个竞争的消费者,它们可能以不同的速度运行。

相反,每个分区只能分配给一个消费者组中的一个消费者,并且在此级别上订购是严格的。我说严格是因为事情总是会出错,而且记录可能会被重新处理,所以开箱即用的Kafka绝对不会保证您的订购。

[当您说需要按顺序处理事物时,我需要考虑它的重要性。例如您可能会争辩说,应该(可能)按顺序处理银行帐户的交易,因此特定帐户的所有记录应在同一分区上,但是两个不同帐户活动的相对顺序并不重要。

© www.soinside.com 2019 - 2024. All rights reserved.