每个业务用例的Kafka消费者-实现的最佳方式



对于不同类型的相关消息,我使用一个kafka主题。主题名称为:apiEvents。事件类型:

  1. ApiUpdateEvent
  2. EndpointUpdateEvent
  3. TemplateUpdateEvent

我拥有的一个应用程序会消耗所有这些事件。此外,我希望它在两个不相关的用例中以不同的方式(两次(使用同一事件。

例如,同一事件(EndpointUpdateEvent(的两个用例:

  1. 我想创建一个500ms的窗口时间框架,并对该时间框架内发生的所有事件的聚合做出响应-一次
  2. 这些与第(1(节中所述相同的事件-我想通过触发一些DB操作来单独响应每一个事件

因此,我希望编写干净和可维护的代码,而不想把所有用例都放在一个大的消费者身上。

我考虑过的一个解决方案是为每个用例编写一个新的kafka使用者,并为每个使用者分配一个不同的groupId(在同一应用程序中(。这样,每个业务逻辑用例都将有自己的类,这些类将以自己的特殊方式处理事件。看起来很整洁。

  1. 如果我在一个应用程序中创建了太多的使用者组,会不会出现任何问题
  2. 有没有更好的解决方案可以让我保持干净并划分不同的业务逻辑用例

对于不同的业务逻辑用例,使用单独的使用者组来跟踪单个进度,这听起来是正确的。这也将与微服务风格的架构更加一致,其中不同的业务案例可以在不同的组件中实现。

还有一个考虑因素-我不能仅仅根据所提供的信息来判断这一点,但我也会考虑将您的主题划分为每种事件类型。一个消费者群体同时订阅多个主题不是问题。然而,我认为让消费者处理/丢弃大量与他们无关的事件效率较低。

您可以使用Kafka Streams Processor API消费和处理单个消息,以及在特定的滚动/跳跃时间段内窗口它们

最新更新