这可能是某种最佳实践问题。请曾经从事过这方面工作的人举例说明。这样我们所有人都能受益!
对于使用Kafka/Redis的事件驱动架构,当我们为事件创建主题/流时,需要遵循哪些最佳实践。
让我们考虑一下在线订单处理工作流。
我读到一些博客说,创建主题/流,如order-created-events
、order-deleted-events
等。但我的问题是,当我们将其拆分为多个主题时,如何保证消息的顺序。
例如:
订单创建的事件可能有数千个事件,并且由消费者缓慢处理。订单删除事件在队列中可能只有很少的记录,假设只有5-10%会取消订单。
现在,假设用户首先下订单。然后他立即取消。这将使订单删除事件首先处理,因为在一些消费者处理相同订单的订单创建事件之前,主题/流没有太多消息。这会导致一些数据不一致。
希望我的问题很清楚。那么,如何提出主题/流设计呢?
Kafka只确保特定分区的排序。
因此,为了使用kafka分区和使用分区的负载平衡,应该为单个主题创建多个分区(如order(。
现在,使用分区类为每条消息生成一个键,该键应该只对应于同一个分区。
所以,无论订单A被创建、更新或删除,它们都应该始终属于同一个分区。
为了正确地实现排序,这应该是决定主题的基础,而不是针对不同活动的两个不同主题。