给定一个REST API,其中以下操作会导致事件发布到Kafka:
- AddCategory(添加类别)
- UpdateCategory(更新类别)
- RemoveCategory(删除类别)
- AddItem(通过某个标识符引用类别)
- UpdateItem(更新条目)
- RemoveItem(删除条目)
同时,存在多个用户可能同时使用REST API的环境,并且消费者必须获取相同的事件。消费者可能离线一段时间(超过一天)。可以添加新的消费者,也可以删除其他消费者。
问题:
- 事件排序(只能使用单个主题/分区解决?)
- 在AddCategory之前执行AddItem,类别引用无效。
- 在AddCategory之前执行UpdateItem,曾经是有效引用,现在无效。
- 在AddItem之前执行RemoveCategory,类别引用无效。
- ...无限的并发问题清单。
- 事件存储快照以便重新启动消费者时进行快速重新同步
- 是否应该为类别和条目都创建压缩日志主题,每个实体都以其标识符为键?
- 整个压缩日志主题是否可以被识别为一个偏移量?
- 压缩日志主题中应该只有一个条目,其数据包含给定偏移量下的所有类别和条目的序列化blob(这将需要单个主题/分区)。
- 如何处理从重放渲染实体事件存储到“实时流”命令/事件的交接?在压缩日志视图中为每个条目编码偏移量,并将其传递给从实时事件日志重新播放?
是否有其他系统更适合解决这个问题?