Ave*_*tes 4 concurrency java-8 apache-kafka spring-kafka
比方说,我有 topicA、topicB 和 topicC,这两个主题根据域实体由单独的事件类型分隔。topicA 仅与 eventA 一起操作,topicB 保留 eventB,topicC 仅与 eventC 一起操作。所有事件都通过业务领域相互关联,但由单独的微服务生成,并且应按特定顺序进行处理。
问题是,如何使用 Apache Kafka 按特定顺序引入消费事件,eventA 然后等待接收 eventB,然后当 eventC 接收到时消费所有事件。
感谢任何反馈,欢迎提出任何问题。
一些注意事项:Kafka Streams 是一个很好的方法,但受到公司政策的限制。
另外,我浏览了连接模式,但没有找到任何可靠的实现方法。
解决这个问题的方法可能有很多种。我可以建议以下几个:
引入相关 ID,它将链接来自主题 A、B 和 C 的事件。然后,按以下方式使用相关 ID:
服务 A、B 和 C 产生对应主题的事件,但相关事件具有相同的关联 ID
服务 D 使用来自不同主题的事件。每次从任何主题接收到事件时,服务 D 都会通过相关 ID 将事件数据插入数据库,或者在接收到所有数据后执行某些操作。
例如,当服务 D 接收到事件 C 时,它首先发出查询以检查数据库中是否存在具有来自事件 C 的相关 ID 的记录:
对于每个消费事件依此类推。
产生事件的链服务(A、B 和 C)。例如,可以通过以下方式形成链:
服务 A 向主题 A 生成事件
服务 B 消费来自主题 A 的事件,并向主题 B 生成事件(可能聚合事件 A 和 B)
服务 C 消费来自主题 B 的事件,并向主题 C 生成事件(可能聚合事件 A、B 和 C)
最后,服务 D 消费来自主题 C 的事件(可能与 A、B 和 C 聚合)并执行所需的操作。
这种方法的变体(无需在每个中间阶段聚合事件)将链接服务并侦听链中的最后一个事件。当最后一个事件被消费时,然后向相应的主题发出Kafka拉取以获取其他服务产生的事件。
| 归档时间: |
|
| 查看次数: |
3824 次 |
| 最近记录: |