0

这可能是某种最佳实践问题。请从事此工作的人举例说明。让我们所有人都能受益!

对于使用 Kafka / Redis 的事件驱动架构,当我们为事件创建主题/流时,要遵循哪些最佳实践。

让我们考虑在线订单处理工作流程。

我读了一些博客说创建主题/流,如order-created-eventsorder-deleted-events。但我的问题是,当我们将其拆分为多个主题时,如何保证消息的顺序。

例如:

order-created-events 可能有数千个事件并由消费者缓慢处理。假设只有 5-10% 会取消订单,order-deleted-events 在队列中可能只有很少的记录。

现在,让我们假设,用户首先下订单。然后他立即取消。这将使 order-deleted-event 首先处理,因为在某些消费者处理同一订单的 order-created-event 之前,主题/流没有太多消息。会造成一些数据不一致。

希望我的问题很清楚。那么,如何提出主题/流设计?

4

1 回答 1

2

Kafka 确保仅对特定分区进行排序。

因此,要使用 kafka 分区和使用分区的负载平衡,应该为单个主题(如订单)创建多个分区。

现在,使用分区类为每条消息生成一个键,该键应该只对应于同一个分区。

因此,无论 Order A 被创建、更新或删除,它们都应该始终属于同一个分区。

为了正确实现排序,这应该是确定主题的基础,而不是针对不同活动的 2 个不同主题。

于 2020-04-16T17:47:19.193 回答