【发布时间】:2016-06-26 02:05:50
【问题描述】:
我们正在尝试使用通过 kafka 进行异步通信的微服务来构建一个平台。 按照我的理解,每个微服务中每个聚合类型有 1 个主题似乎很自然。因此,实现用户注册的微服务会将用户相关事件发布到主题“用户”中。 其他微服务将侦听从“用户”微服务创建的事件并实现自己的逻辑并相应地填充其数据库。问题是其他微服务可能对用户微服务生成的所有事件不感兴趣,而是对这些事件的子集感兴趣,例如仅 UserCreated (例如,没有 UsernameChanged...)。 使用 RabbitMq 很容易,因为事件处理程序是根据消息类型调用的。
- 您是否曾经在 kafka 上实现过基于消息的路由/过滤?
- 我们是否应该使用所有消息、反序列化它们并忽略消费者不需要的消息? (听起来像是开销)
- 我们是否应该将这些主题转发到风暴并将这些消息重定向到消费者目标主题? (听起来有点矫枉过正且不可扩展)
- 使用分区作为路由机制似乎不合逻辑
【问题讨论】:
-
1 - 在使用 Kafka 的一年中从未出现过类似的情况。 2 - 差不多,是的,除非您有更细化或有针对性的主题。好消息是,如果您的客户端具有完整的 snappy 支持 3 功能,那么从 Kafka 消费很便宜 - 只有您可以回答这个问题。使用 Camel 可以完成更轻的路由。 4 - 这根本不是分区的目的。当您需要快速提供大量数据时,Kafka 是一个非常强大的工具,但代价是更微妙地控制数据的分发方式。你不会用消防水管给花园浇水。
-
不仅从 Kafka 消费很便宜,而且阅读整个流并折腾你想要的东西实际上从生产方来说也很便宜。磁盘驱动器进行线性读取与随机读取相比要快 100 到 1,000 倍。这是 Kafka 设计理念的重要组成部分:kafka.apache.org/08/design.html
标签: apache-kafka kafka-consumer-api