kafka中的邮件路由

时间:2016-03-11 00:11:56

标签: apache-kafka kafka-consumer-api

我们正在尝试使用通过kafka进行异步通信的微服务来构建平台。 以我理解的方式,在每个微服务中每个聚合类型有一个主题似乎是自然的。因此,实现用户注册的微服务将用户相关事件发布到主题" users"。 其他微服务将监听从用户"创建的事件。微服务并实现自己的逻辑并相应地填充其数据库。问题是其他微服务可能不会对用户微服务生成的所有事件感兴趣,而是对这些事件的子集感兴趣,例如UserCreated(例如,没有UsernameChanged ......)。 使用RabbitMq非常简单,因为事件处理程序是根据消息类型调用的。

  1. 您是否曾在kafka上实施基于邮件的路由/过滤?
  2. 我们应该消费所有消息,反序列化消息并忽略消费者不需要的消息吗? (听起来像一个开销)
  3. 我们是否应该将这些主题转发给风暴并将这些消息重定向到针对消费者的主题? (听起来有点矫枉过正,无法扩展)
  4. 使用分区似乎不符合路由机制

1 个答案:

答案 0 :(得分:4)

为每个标准对象操作使用不同的主题:创建,读取,更新和删除,使用“UserCreated”,“UserRead”等命名约定。如果您考虑它,您可能会有一个每个对象的不同模式。创建将需要一个有效的对象;读取将需要某种过滤器;更新您可能希望处理增量更新(将10添加到特定字段等)。

如果不同的操作具有不同的模式,则会使反序列化变得困难。如果你是一个松散的goosey语言,如JavaScript,没关系 - 没什么大不了的。但是像Scala这样的严格类型的语言在同一个主题中有不同的模式是有问题的。

它也可以解决你的问题 - 你可以准确地听取你想要的行动类型,不多也不少。